この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは!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を例にしたものもありますので、興味がある方はぜひ試してみてください!