最近 Anket 以外にもプライベートで作成したサービスをリリースしたのですが実行環境には両方とも k8s を採用してます。
k8s は AWS の EC2 上に構築しているのですが、 EKS は使用しておらず kops を使って構築しています。
そのあたりの話はここに書いてます。
blog.hatappi.me
今回やったこと
k8s 上で運用する pod も増えてきたので、pod がどれくらいのリソースを使っているのかを見たくなりました。
そこで今回は pod のリソース をどうやって監視するのかを考えました。
検討した方法
Monitoring Saas から OSS まで色々ある。
今回使用したもの
今回は Amazon CloudWatch Container Insights を使うことにしました。
選定した基準としては導入のお手軽さとコストです。
まずお手軽さから Prometheus を除きました。
Prometheus は使ったことがないので正確ではないと思いますが、メトリクスの収集先とかダッシュボード的なサーバーを自分で管理する必要がある?認識なので今回は除きました。
価格という面だと Datadog や Mackerel は少々お値段がかかりそうでした。
Amazon CloudWatch Container Insights はどうかというと まずお手軽さは結構あって CloudWatch Container Insights 用の namespace を作成して ServiceAccount, ConfigMap, そして agent を DaemonSet として起動してあげるだけで基本はいける。
収集したメトリクスは AWS のコンソールからこんな感じで見ることができる。
Amazon CloudWatch Container Insights の導入
ドキュメント通りにやれば導入できるはずです。
今回はまったところ
一通りドキュメントを見て導入したあとにメトリクスがとれてないので agent の pod のログを見ると 次のエラーログが出てました。
Unauthorized panic: Cannot retrieve cadvisor data from kubelet
これはドキュメントのトラブルシューティングにも書いてあって kubelet で webhook authentication が有効になってないっぽいです。
kops を使ってる場合は authenticationTokenWebhook
を true にしてあげれば webhook は有効になるので kops rolling-update cluster --yes
で update してあげればメトリクスがとれるようになるはず。
apiVersion: kops/v1alpha2 kind: Cluster spec: ~~~ kubelet: anonymousAuth: false authenticationTokenWebhook: true kubernetesApiAccess:
最後に
金額面などみつつしばらくこれで運用してみようと思います。