PrometheusをEKSにデプロイしてEKSクラスターをモニタリングしてみた
はじめに
こんにちは!AWS事業本部の島川です。
EKSクラスターの監視やモニタリングの方法は色んなやり方がありますが、今回はPrometheusを使ってモニタリングしてみました。
なおこちらはAmazon EKS WorkshopのMONITORING USING PROMETHEUS AND GRAFANAを元に実施しています。EKSのワークショップがたくさんあるのでぜひ覗いてみてください。
それではやっていきます!
環境
AWS Cloud9を使って今回は構築しました。EC2/t2.micro/Amazon Linuxと最小構成のものです。
EKSを作成する。
まっさら状態ですので、まずはEKSを作成します。今回はeksctlコマンドを用いてインストールしてみました。
eksctlをインストールする。
$ curl --silent --location "https://github.com/weaveworks/eksctl/releases/download/latest_release/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp $ sudo mv -v /tmp/eksctl /usr/local/bin $ eksctl version [ℹ] version.Info{BuiltAt:"", GitCommit:"", GitTag:"0.9.0"}
EKSクラスターを作成する。
t3.mediumで2つのノードを起動します。
$ eksctl create cluster \ > --name eksmonitoring \ > --version 1.14 \ > --nodegroup-name standard-workers \ > --node-type t3.medium \ > --nodes 2 \ > --nodes-min 1 \ > --nodes-max 4 \ > --node-ami auto
完成まで大体15分くらいかかりました。VPCやサブネットに関しても自動で作成されていました。
起動確認
$ kubectl get nodes NAME STATUS ROLES AGE VERSION ip-192-168-31-136.ap-northeast-1.compute.internal Ready <none> 5m58s v1.14.7-eks-1861c5 ip-192-168-80-55.ap-northeast-1.compute.internal Ready <none> 6m4s v1.14.7-eks-1861c5
kubectlのインストールコマンドが入っていない場合はこちら kubectl のインストール
1.14をインストールしています。
$ curl -o kubectl https://amazon-eks.s3-us-west-2.amazonaws.com/1.14.6/2019-08-22/bin/linux/amd64/kubectl $ chmod +x ./kubectl $ mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH $ kubectl version --short --client Client Version: v1.14.7-eks-1861c5
環境変数をセット
STACK_NAME=$(eksctl get nodegroup --cluster eksmonitoring -o json | jq -r '.[].StackName') INSTANCE_PROFILE_ARN=$(aws cloudformation describe-stacks --stack-name $STACK_NAME | jq -r '.Stacks[].Outputs[] | select(.OutputKey=="InstanceProfileARN") | .OutputValue') ROLE_NAME=$(aws cloudformation describe-stacks --stack-name $STACK_NAME | jq -r '.Stacks[].Outputs[] | select(.OutputKey=="InstanceRoleARN") | .OutputValue' | cut -f2 -d/) echo "export ROLE_NAME=${ROLE_NAME}" >> ~/.bash_profile echo "export INSTANCE_PROFILE_ARN=${INSTANCE_PROFILE_ARN}" >> ~/.bash_profile
Prometheusをデプロイ
kubectl create namespace prometheus helm install stable/prometheus \ --name prometheus \ --namespace prometheus \ --set alertmanager.persistentVolume.storageClass="gp2" \ --set server.persistentVolume.storageClass="gp2"
コンポーネントの起動確認
$ kubectl get all -n prometheus NAME READY STATUS RESTARTS AGE pod/prometheus-alertmanager-6f5c6d6f49-8zxv5 2/2 Running 0 2m15s pod/prometheus-kube-state-metrics-7fddb795c8-xtnx8 1/1 Running 0 2m15s pod/prometheus-node-exporter-7269b 1/1 Running 0 2m15s pod/prometheus-node-exporter-mkwm9 1/1 Running 0 2m15s pod/prometheus-pushgateway-564f594fb6-5d6bj 1/1 Running 0 2m15s pod/prometheus-server-775cc84c8f-5hpzf 2/2 Running 0 2m15s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/prometheus-alertmanager ClusterIP 10.100.237.213 <none> 80/TCP 2m15s service/prometheus-kube-state-metrics ClusterIP None <none> 80/TCP 2m15s service/prometheus-node-exporter ClusterIP None <none> 9100/TCP 2m15s service/prometheus-pushgateway ClusterIP 10.100.52.56 <none> 9091/TCP 2m15s service/prometheus-server ClusterIP 10.100.90.214 <none> 80/TCP 2m15s NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/prometheus-node-exporter 2 2 2 2 2 <none> 2m15s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/prometheus-alertmanager 1/1 1 1 2m15s deployment.apps/prometheus-kube-state-metrics 1/1 1 1 2m15s deployment.apps/prometheus-pushgateway 1/1 1 1 2m15s deployment.apps/prometheus-server 1/1 1 1 2m15s NAME DESIRED CURRENT READY AGE replicaset.apps/prometheus-alertmanager-6f5c6d6f49 1 1 1 2m15s replicaset.apps/prometheus-kube-state-metrics-7fddb795c8 1 1 1 2m15s replicaset.apps/prometheus-pushgateway-564f594fb6 1 1 1 2m15s replicaset.apps/prometheus-server-775cc84c8f 1 1 1 2m15s
起動
Prometheusにログインするためにポートフォワーディングの設定をして起動します。
$ kubectl port-forward -n prometheus deploy/prometheus-server 8080:9090 Forwarding from 127.0.0.1:8080 -> 9090 Forwarding from [::1]:8080 -> 9090
確認してみた
Cloud9からTools > Preview > Preview Running Applicationと進むとPrometheusの画面が表示されます。タブから「targets」にアクセスするとノード一覧などが表示されます。
また「Graph」タブからグラフの確認もすることができます。loadaverage_1を表示してみました。
モニタリング項目は他にもたくさんあるので、色々カスタマイズできそうです。
さいごに
workshopという形ではありましたが、EKSでのモニタリングをPrometheusでやってみました。監視モニタリングというのは様々な手段がありますがその選択肢としてPrometheusいかがでしょうか。またこのworkshopはGrafanaを例にしたものもありますので、興味がある方はぜひ試してみてください!