手当たり次第に書くんだ

飽きっぽいのは本能

Kubernetes kube-state-metrics の基本 – オブジェクト状態を監視に渡す

Kubernetes の監視では、CPU やメモリだけを見てもクラスタの状態は分かりません。Pod が desired replicas に届いているか、Deployment が更新中で止まっていないか、PVC が Bound になっているか、といったオブジェクトの状態を見る必要があります。

kube-state-metrics は、Kubernetes API から取得できるオブジェクト状態を Prometheus が扱えるメトリクスとして公開するための部品です。この記事では、kube-state-metrics を何のために入れるのか、導入後にどこを見るのかを確認します。

関連する記事

kube-state-metrics が扱う範囲

kube-state-metrics は、ノードの CPU 使用率やコンテナのメモリ使用量を直接計測する部品ではありません。そうした利用量は kubelet、cAdvisor、node exporter などの領域です。kube-state-metrics は、Kubernetes オブジェクトの状態をメトリクス化します。

対象見えること注意点
Deploymentreplicas、available、updated、generationPod の実利用量ではなく、宣言状態と到達状態を見る
Podphase、ready、restart、ownerログや CPU 使用率の代わりにはならない
PVCphase、StorageClass、requested storageストレージ実体の性能や容量使用量とは別に見る
Nodecondition、taint、labelOS レベルの詳細メトリクスは別の exporter と組み合わせる
Job / CronJobsucceeded、failed、activeアプリケーション処理の成功判定とは分ける

この範囲を分けておくと、監視設計で「使われているリソース」と「Kubernetes が期待する状態」を混同しにくくなります。

Helm release として確認する

kube-state-metrics は Helm chart で導入されることが多い部品です。まず Helm release が存在し、期待した namespace に配置されていることを確認します。release が failed のまま残っていると、再導入や更新時に挙動が分かりにくくなります。

helm list -A
helm status kube-state-metrics -n monitoring
kubectl get pods -n monitoring -l app.kubernetes.io/name=kube-state-metrics

Helm の状態が deployed でも、Pod が起動していなければメトリクスは取得できません。Pod の readiness、Service、RBAC、API Server へのアクセスを分けて確認します。

Service とメトリクスの口を見る

kube-state-metrics は、Prometheus が scrape できる HTTP endpoint を公開します。Service が作られていること、Pod の port と Service の targetPort が合っていることを確認します。

kubectl get svc -n monitoring
kubectl describe svc -n monitoring kube-state-metrics
kubectl port-forward -n monitoring svc/kube-state-metrics 8080:8080
curl -s http://127.0.0.1:8080/metrics | head

ここで確認するのは、メトリクスが取れるかどうかです。Prometheus に取り込まれているかどうかは、次の段階で scrape 設定や ServiceMonitor を見ます。

Prometheus 側で拾えているかを見る

kube-state-metrics が動いていても、Prometheus が scrape していなければ監視には使えません。Prometheus Operator を使っている場合は、ServiceMonitor や PodMonitor の選択条件、namespaceSelector、label を確認します。

kubectl get servicemonitor -A
kubectl get podmonitor -A
kubectl get endpoints -n monitoring kube-state-metrics

Prometheus の targets で kube-state-metrics が up になっているかも確認します。Kubernetes 側の Service は存在するのに Prometheus で見えない場合は、ラベルセレクタや namespace の対象範囲がずれていることがあります。

アラートで使いやすい状態

kube-state-metrics の価値は、オブジェクト状態をアラート条件にできることです。Pod が落ちたという単発の事象だけでなく、Deployment が期待 replica に届いていない、PVC が Pending のまま、Job が失敗している、といった状態を追えます。

  • Deployment の available replicas が desired replicas より少ない
  • Pod が CrashLoopBackOff や Pending のまま一定時間続く
  • PVC が Bound にならない
  • Node condition が Ready ではない
  • Job の failed が増えている

ただし、kube-state-metrics は原因までは教えてくれません。状態の異常を検知し、次にログ、イベント、リソース使用量、外部依存を確認するための入口として使います。

障害時の確認順

kube-state-metrics まわりでメトリクスが見えない場合は、監視システム全体を疑う前に、部品ごとに切り分けます。

  • Helm release が deployed か確認する
  • Pod が Running / Ready か確認する
  • Service と endpoints が作られているか確認する
  • metrics endpoint が応答するか確認する
  • Prometheus の target に登録されているか確認する
  • アラートルールが期待するメトリクス名と label を参照しているか確認する

この順番にすると、kube-state-metrics 自体の問題、Kubernetes Service の問題、Prometheus 側の scrape 設定の問題を分けて扱えます。

運用で決めておくこと

kube-state-metrics は入れれば終わりの部品ではありません。どのオブジェクト状態を監視対象にするか、どの label を集計軸にするか、どの状態をアラートにするかを決めて初めて意味が出ます。

  • namespace、app、cluster などの label を集計軸としてそろえる
  • 利用量メトリクスと状態メトリクスを分けて見る
  • アラートは一時的な揺れではなく、継続時間を条件にする
  • PVC、Job、Deployment など運用影響が大きい状態から監視する
  • Prometheus 側の target とアラートルールを定期的に確認する

kube-state-metrics は、Kubernetes の現在状態を監視に渡すための翻訳層です。クラスタ運用では、リソース使用量とオブジェクト状態の両方を見て、異常の入口を早く見つけるために使います。

参考書籍
参考書籍

Kubernetes完全ガイド 第2版

Kubernetes のオブジェクト、監視、クラスタ運用を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

関連する記事
Kubernetes kube-state-metrics の基本 – オブジェクト状態を監視に渡す

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る