repl.info

Kubernetes Metricsについて調べる

クラスター構築・更新が一通り実装できてきて、Productionを見据えたあれこれを進めるのだが、まずはモニタリング、特にメトリクスまわりからやっていく。以前調べたりもしたが、再度基本的な所を調べておく。

Tools for Monitoring Resourcesを見ると、アプリケーションのメトリクスはリソースメトリクスパイプラインとフルメトリクスパイプラインに分かれている。前者はkubectl topやHorizontalPodAutoscalerで使われるもので、kubeletに内蔵されているcAdvisorが取得するメトリクスをmetrics-serverに集約、KubernetesのAPIから利用できるようにするのが一般的なようだ。

以前だとheapsterがクラスターレベルで分析・監視をするためのソフトウェアとして使われていたと思うが、現在EOLであった。基本的なCPUやメモリ、HPAメトリクスはmetrics-server、汎用的なモニタリングはPrometheusベース、イベントトランスファー(これは調べていない)はeventrouterという風に、用途別に後継ソフトウェアがあるようだ。

それならば、ということでまずはmetrics-serverを試す。kube-apiserverのオプション・metrics-server双方にオプションの追加が必要で手こずったが、NodeとPodのtopが見えることを確認した。手元でパッと見るのによさそう。

$ kubectl top node

NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%

nks-dev-master-001 117m 5% 2083Mi 54%

nks-dev-master-002 146m 7% 2113Mi 54%

nks-dev-master-003 112m 5% 2074Mi 53%

nks-dev-node-001 51m 5% 706Mi 37%

nks-dev-node-002 43m 4% 674Mi 35%

$ kubectl top pod

NAME CPU(cores) MEMORY(bytes)

debug-59f75b49f4-fsvth 0m 1Mi

httpd-8586b5cc4-52n5q 0m 8Mi

httpd-8586b5cc4-7qcd2 0m 8Mi

httpd-8586b5cc4-8qrm6 0m 8Mi

httpd-8586b5cc4-9mskj 0m 8Mi

httpd-8586b5cc4-c6n98 0m 8Mi

httpd-8586b5cc4-ckjt6 0m 9Mi

httpd-8586b5cc4-dh8v8 0m 8Mi

httpd-8586b5cc4-dpcgn 0m 8Mi

httpd-8586b5cc4-h27sp 0m 8Mi

httpd-8586b5cc4-hqj9g 0m 8Mi

httpd-8586b5cc4-j4trm 0m 8Mi

httpd-8586b5cc4-kp9zz 0m 10Mi

httpd-8586b5cc4-ksmc7 0m 8Mi

httpd-8586b5cc4-pdcqc 0m 8Mi

httpd-8586b5cc4-pwn77 0m 8Mi

httpd-8586b5cc4-vn86r 0m 9Mi

httpd-8586b5cc4-vtp7b 0m 8Mi

httpd-8586b5cc4-xggv5 0m 8Mi

httpd-8586b5cc4-xzmmp 0m 9Mi

httpd-8586b5cc4-z2mmb 0m 8Mi

HPAはkube-controllermanagerにオプションを追加し、HorizontalPodAutoscalerリソースを作成すれば動く。ちょっと反応が鈍いと感じるが、ここは設定で変わるのだろうか?Prometheusとの連携も気になるところ。

metrics-serverに触れたので、次はPrometheusとGrafanaを見る。入れるだけならyamlでシュッと入れられる。Grafanaのダッシュボードを作るのが大変だよなあ…と思っていたのだけど、Grafana Labsというところからインポートすることができることがわかった。Kubernetes Cluster (Prometheus) dashboard for Grafanaが結構いいかんじぽい。さらには、kubernetes plugin for Grafanaというプラグインがあり、Kubernetesをデータソースとして扱い、Cluster・Node・Podなどのダッシュボードがすぐ使えるようになることがわかった。また、Grafana自体にアラート機能もあるようで、可視化とアラートをGrafanaに集約するのがいいのかな、とも思ったりした。PrometheusのAlertManagerとどちらがいいんだろう。ここは別途調べたい。

メトリクスデータの永続化をどうするか、とか複数クラスターがあるときに見ないと行けない場所が複数あるのがダルそうという課題が残ってはいる(後者についてはメトリクスを集約してあげればよいと思う)が、クラスターを建てたらmetrics-serverとPrometheus、Grafanaを同時にインストールし、GrafanaのKubernetes Pluginですぐにメトリクスが見える状態になっているとかなり便利そうじゃないかなあ。