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ですぐにメトリクスが見える状態になっているとかなり便利そうじゃないかなあ。

Leave a Reply

Your email address will not be published. Required fields are marked *