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 オブジェクトの状態をメトリクス化します。
| 対象 | 見えること | 注意点 |
|---|---|---|
| Deployment | replicas、available、updated、generation | Pod の実利用量ではなく、宣言状態と到達状態を見る |
| Pod | phase、ready、restart、owner | ログや CPU 使用率の代わりにはならない |
| PVC | phase、StorageClass、requested storage | ストレージ実体の性能や容量使用量とは別に見る |
| Node | condition、taint、label | OS レベルの詳細メトリクスは別の exporter と組み合わせる |
| Job / CronJob | succeeded、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-metricsHelm の状態が 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-metricsPrometheus の 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 アソシエイトリンクです。


