在Amazon EKS上部署Istio / Prometheus / Grafana
开场白
因为可能会在将来使用这个配置,所以做了一下 Kubernetes 的教程,因为之前没有接触过,
所以我还总结了一下,并记录了一些调查的结果。
Kubernetes 云原生容器编排平台
一个用于高效运营管理多个容器的开源平台
生产级别容器编排 – Kubernetes
使用 Kubernetes 的好处
使用容器技术
-
- 開発環境の統一
-
- 本番環境への適応
-
- 単純構成
高速
軽量
コスト削減
容器的整合管理
-
- 自動化
デプロイ
スケーリング
ヘルスチェック
自己修復
効率的なリソース使用
稼働を維持しての変更
アップデート
機能追加
Kubernetes的配置。
Kubernetes 的基本术语
在这个范围内,有其他可用的术语,但我们将只使用这个。
聚集
- Kubernetes のリソースをひとくくりにまとめたもの
节点
-
- 物理マシン
AWS であれば EC2 インスタンス
Master Node と Node で区別がある
Master Node は Kubernetes を管理する
Node ではアプリケーションを動かす
飞机
-
- Control Plane は Master Node が配置される
- Data Plane には Node が配置される
荚
-
- コンテナの集合
- デプロイする際の最小単位
复制集合
-
- 常に稼働している同一仕様の Pod の数
冗長化
部署
-
- デプロイ管理ができる
アップデート
ロールバック
亚马逊弹性容器服务 (Amazon EKS)
AWS提供的Kubernetes托管服务主要负责处理Kubernetes中的主节点部分。
Amazon EKS 是亚马逊的 AWS 服务。
创建 EKS 集群
据AWS官方文件介绍,似乎有一个名为eksctl的单行命令可以创建所有内容,但由于不清楚它内部发生了什么,所以这次我们将使用常规方法进行创建。
环境
Windows 10 -> 十代 Windows 操作系统
AWS CLI 1.16.191
AWS CLI 安装 – AWS
kubectl 1.14.8
Kubectl 的安装- AWS
Helm 2.15.1版本
安装Helm – Helm
Istio 1.3.4
下载这个版本 – Istio
流动
请按照以下步骤进行创建:
1. 角色
2. VPC
3. EKS 集群
4. 节点
5. 部署到 EKS 集群
AWS管理控制台的启动方法- AWS
构图
以下是一个可能的中文翻译:
卷筒
VPC的意思是虚拟私有云。
EKS 集群
由于从控制面板上无法成功进行后续确认,所以使用了命令行。
$ aws eks create-cluster --name [cluster-name] --role-arn [eks-role] --resources-vpc-config subnetIds=[subnet-ids],securityGroupIds=[security-group-ids]
$ aws eks update-kubeconfig --name [cluster-name]
只要 Kubernetes 成功输出到服务中,就算完成。
$ kubectl get svc
节点
使用 CloudFormation 创建 EKS 优化节点
根据以下参考填写除 NodeImageId 和 BootstrapArguments 之外的参数
$ kubectl apply -f aws-auth-cm.yaml
当节点准备就绪时,任务完成。
$ kubectl get nodes
Helm / Istio / Prometheus / Grafana
安装程序 / Istio / 统计器 / Grafana
这次要使用的软件和工具
-
- Helm
-
- Kubernetes のパッケージマネージャ
-
- クラスター内に tiller コンポーネントをデプロイすることで APIserver を介してコマンドでリソースの操作ができる
-
- Istio
-
- マイクロサービスを構成するためのオープンソースソフトウェア
-
- 条件や割合でのトラフィック制御やログ収集ができる
-
- Prometheus
-
- メトリクスベースのモニタリングシステム
-
- Grafana
- データ可視化ツール
将部署到 EKS 集群
舵柄部署
$ kubectl -n kube-system create serviceaccount tiller
$ kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
$ helm init --service-account=tiller
一旦输出客户/服务器,则完成。
$ helm version
Istio的部署
移动到部署了Istio的目录,其中包括Prometheus和Granfana。
$ helm install --name istio-init install/kubernetes/helm/istio-init --namespace istio-system
$ helm install --name istio install/kubernetes/helm/istio --namespace istio-system --set grafana.enabled=true --set grafana.persistentVolume.storageClass="gp2",server.persistentVolume.storageClass="gp2"
如果Istio的Pod被输出,则任务完成。
$ kubectl get pods -n istio-system
部署 BookInfo(用于示例的应用程序)。
引用书籍信息应用程序
$ kubectl create namespace bookinfo
$ kubectl label namespace bookinfo istio-injection=enabled
$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -n bookinfo
$ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml -n bookinfo
只要BookInfo的Pod被输出,就完成了。
$ kubectl get pods -n bookinfo
确认部署
$ kubectl get svc -n istio-system
访问 EXTERNAL-IP/productpage/
使用 Prometheus/Grafana 进行监控确认。
普罗米修斯
$ kubectl port-forward deploy/prometheus -n istio-system 9090:9090
Grafana是一个数据可视化和监控平台。
$ kubectl port-forward deploy/grafana -n istio-system 3000:3000
删除
在EKS中,使用命令创建AWS资源。
由于在此次部署Istio时创建了负载均衡器,因此在删除集群之前需要将其删除。
$ kubectl get svc --all-namespaces
删除具有EXTERNAL-IP值的服务。
$ kubectl delete svc istio-ingressgateway -n istio-system
从控制面板中依次删除:
1. 节点堆栈
2. 集群
3. VPC堆栈
总结
因为是第一次接触CloudFormation,所以我不了解它的操作方式,在失败时没有理解如何进行恢复,这让我感到困难。
特别是在使用Istio和Prometheus时,由于资料较少,花费了很多时间。
我重新意识到 Kubernetes 是一项强大的技术,因为它可以通过命令方便且立即地操作资源。然而,我认为实际运用它需要学习一些相关工具,比如 Helm,这增加了学习成本。
由于只是总结了步骤,而没有进行设置文件的编辑等工作,所以这篇文章只是简单概述,我希望能够进一步加深理解,以便能够轻松地进行解释。