在Amazon EKS上部署Istio / Prometheus / Grafana

开场白

因为可能会在将来使用这个配置,所以做了一下 Kubernetes 的教程,因为之前没有接触过,
所以我还总结了一下,并记录了一些调查的结果。

Kubernetes 云原生容器编排平台

一个用于高效运营管理多个容器的开源平台

生产级别容器编排 – Kubernetes

使用 Kubernetes 的好处

使用容器技术

    • 開発環境の統一

 

    • 本番環境への適応

 

    • 単純構成

高速
軽量
コスト削減

容器的整合管理

    • 自動化

デプロイ
スケーリング
ヘルスチェック
自己修復
効率的なリソース使用

稼働を維持しての変更

アップデート
機能追加

Kubernetes的配置。

Kubernetes.png

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

构图

AWS-EKS.png

以下是一个可能的中文翻译:

卷筒

role.png

VPC的意思是虚拟私有云。

vpc-stack-1.png

EKS 集群

由于从控制面板上无法成功进行后续确认,所以使用了命令行。

vpc-stack-2.png
  $ 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
eks-cluster-svc.png

节点

使用 CloudFormation 创建 EKS 优化节点
根据以下参考填写除 NodeImageId 和 BootstrapArguments 之外的参数

node-stack-1.png
node-stac-2k.png
  $ kubectl apply -f aws-auth-cm.yaml

当节点准备就绪时,任务完成。

  $ kubectl get nodes
get-nodes.png

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
helm-tiller.png

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
istio.png

部署 BookInfo(用于示例的应用程序)。

istio-bookinfo.png

引用书籍信息应用程序

  $ 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
bookinfo.png

确认部署

  $ kubectl get svc -n istio-system

访问 EXTERNAL-IP/productpage/

page-3.png

使用 Prometheus/Grafana 进行监控确认。

普罗米修斯

  $ kubectl port-forward deploy/prometheus -n istio-system 9090:9090
prometheus.png

Grafana是一个数据可视化和监控平台。

  $ kubectl port-forward deploy/grafana -n istio-system 3000:3000
grafana-dashboard.png

删除

在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,这增加了学习成本。

由于只是总结了步骤,而没有进行设置文件的编辑等工作,所以这篇文章只是简单概述,我希望能够进一步加深理解,以便能够轻松地进行解释。