CloudWatch Observability EKS add-on を試してみたので備忘録。これまで EKS のメトリクスを CloudWatch に送信するには、Quick Start setup for Container Insights on Amazon EKS and Kubernetes - Amazon CloudWatch を参考に CloudWatch Agent と Fluentd を手動でインストールして管理する必要があったのですが、それらが add-on にパッケージ化され、インストールやバージョンアップが楽になりました。
参考にしたサイトは公式ドキュメントの Install the CloudWatch agent by using the Amazon CloudWatch Observability EKS add-on - Amazon CloudWatch。EKS のバージョンは 1.27、eksctl は 0.167.0 で動作確認。
目次
- EKS にインストールできる add-on のバージョンを調べる
- EKS に add-on をインストールする
- add-on のインストールが失敗する場合は amazon-cloudwatch 名前空間の Pod が起動しているか確認する
- add-on のインストール後にできるようになること
- 細かいカスタマイズはできるか?
EKS にインストールできる add-on のバージョンを調べる
Managing Amazon EKS add-ons | Creating an add-on - Amazon EKS を参考に、EKS にインストールできる addon を調べます。
eksctl utils describe-addon-versions --kubernetes-version 1.27 | grep AddonName
実行すると、いくつか add-on が表示されます。その中に amazon-cloudwatch-observability
add-on が見つかります。
...
"AddonName": "amazon-cloudwatch-observability",
...
インストール可能な add-on のバージョンを調べます。
eksctl utils describe-addon-versions --kubernetes-version 1.27 --name amazon-cloudwatch-observability | grep AddonVersion
以下のバージョンが出力されました。今回は v1.2.0-eksbuild.1
をインストールします。
"AddonVersions": [
"AddonVersion": "v1.2.0-eksbuild.1",
"AddonVersion": "v1.1.1-eksbuild.1",
EKS に add-on をインストールする
公式ドキュメントによると、add-on をインストールする前に IAM Role による権限設定が必要です。Option 2: Install using IAM service account role による方法が権限の範囲が小さくなるので良いでしょう。
公式ドキュメントに書かれている eksctl による一連のコマンドでインストールするのではなく、設定ファイルに add-on と IAM Role を記載してインストールをします。このようにすると、後から見たときに設定がすぐに分かるのでオススメです。設定ファイル例は以下の通り。仕様は Config file schema - eksctl を参照。
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: my-eks
region: ap-northeast-1
version: "1.27"
iam:
withOIDC: true
addons:
- name: amazon-cloudwatch-observability
version: v1.2.0-eksbuild.1
attachPolicyARNs:
- arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
- arn:aws:iam::aws:policy/AWSXrayWriteOnlyAccess
OpenID Connect (OIDC) provider が設定されていない場合は以下のコマンドで設定をしてから
eksctl utils associate-iam-oidc-provider -f my-eks-config.yaml --approve
以下のコマンドで add-on をインストールします。
eksctl create addon -f my-eks-config.yaml
add-on のインストールが失敗する場合は amazon-cloudwatch 名前空間の Pod が起動しているか確認する
eksctl create addon
コマンドは通常はすぐに完了しますが、私の環境ではなかなか完了せずに、タイムアウトをしてしまいました。AWS マネジメントコンソールでは add-on のステータスは Creating から先に進まず、最終的に install-failed のような失敗ステータスになりました。
このような場合は、amazon-cloudwatch
namespace で Pod がすべて起動しているかどうか確認してみてください。
kubectl get pods -n amazon-cloudwatch
うまくいっている場合は以下のような結果が返ってきます。
NAME READY STATUS RESTARTS AGE
amazon-cloudwatch-observability-controller-manager-a1237456abc7 1/1 Running 0 1d
cloudwatch-agent-abcde 1/1 Running 0 1d
cloudwatch-agent-fghij 1/1 Running 0 1d
fluent-bit-kl1m2 1/1 Running 0 1d
fluent-bit-op3q4 1/1 Running 0 1d
私の場合はいくつかの Pod が Node のリソース不足により起動していませんでした。Node のリソースを調整し、すべての Pod を起動させて再度インストールを試みたところ、インストールが成功しました。
add-on のインストール後にできるようになること
- EKS で起動しているすべての Pod のメトリクスが CloudWatch に送信されるようになります。CloudWatch Metrics の ContainerInsights の名前空間から各種メトリクスが確認できます。
- メトリクスを一覧で確認ができるダッシュボードが利用できるようになります。CloudWatch Insights の Container Insights から確認ができます。
- EKS のログが CloudWatch Logs に送信されるようになります。
/aws/containerinsights/<EKS名>/
のロググループから確認できます。
細かいカスタマイズはできるか?
CloudWatch に送信されるメトリクスやログは、デフォルトの状態ではすべて送信されます。これらを制限したかったのですが、ドキュメントにはカスタマイズについて詳しく書かれていませんでした。
(Optional) Additional configuration によると、CloudWatch agent configuration を上書きすることでカスタマイズができそうでしたが、細かいことは書かれていなかったので、CloudWatch agent のドキュメントを確認する予定です。カスタマイズ方法がわかったら追記します。