このプロジェクトについて
kube-state-metrics(KSM)は、Kubernetes APIサーバーをリッスンし、デプロイメント、ノード、ポッドなどのクラスタオブジェクトの状態に関するメトリクスを生成するサービスです。個々のKubernetesコンポーネントの健全性を監視するのではなく、クラスタ内のオブジェクトについて報告します。メトリクスはHTTPエンドポイント/metrics(デフォルトポート8080)でプレーンテキストとして公開され、Prometheusまたは互換性のあるスクレイパーを対象としています。このエンドポイントは現在のクラスタ状態を反映するため、削除されたオブジェクトはそこから消えます。
設計思想:KSMはKubernetes APIオブジェクトからメトリクスを変更せずに生成するため、その機能は基盤となるAPIオブジェクトの安定性グレードを共有します。kubectlスタイルのヒューリスティックを適用せず、生の未変更データを公開し、解釈はユーザーに委ねます。アルファAPIに基づくメトリクスは安定性の保証から除外されます。
READMEに記載されている主な機能:
- docsディレクトリ内のメトリクスドキュメントに加え、カスタムリソース状態メトリクス(resource-state-metricsを優先して機能凍結中)。
- ラベル処理:Kubernetesのラベル名はPrometheus互換の名前に変換されます(例:app.kubernetes.io/nameはlabel_app_kubernetes_io_nameになります)。変換時に衝突が発生した場合は、自動的に_conflictNサフィックスが付加されます。
- 許可/拒否リストはECMAScript正規表現(先読み・後読みを含む)をサポートし、評価は1分に制限されています。
- セルフメトリクスは別のテレメトリホスト/ポート(デフォルト8081)で公開され、リスト/ウォッチの成功およびエラーカウンター、HTTPリクエスト期間のヒストグラム、ビルド情報、シャード序数/総シャード数、設定ファイルのハッシュと再読み込みステータスが含まれます。
- スケーリングのガイダンス:一般的な目安として約250MiBのメモリと0.1コア。CPU制限が低いとキューが蓄積し、メモリ使用量が増加する可能性があります。100ノードのスケーリングテストによるレイテンシ数値が示されています(Perc50約260ms、Perc90約475ms、Perc99約907ms)。
- --shardと--total-shardsによる水平シャーディング。オブジェクトUIDのmd5を総シャード数で割った剰余を使用します。--podと--pod-namespaceを使用したStatefulSetでの自動シャーディング(実験的)、明示的なシャードインデックスを使用したデプロイメントベースのシャーディング、および--nodeを使用したポッドメトリクスのデーモンセットシャーディング(未割り当てポッド用の--track-unscheduled-podsもあり)。
- /metricsでのリソースフィルタリングは、resourcesおよびexclude_resourcesクエリパラメータを使用し、excludeが優先されます。
- ヘルスエンドポイント:メインポートの/healthzと/livez、テレメトリポートの/readyz。
セットアップと使用法:go get k8s.io/kube-state-metrics/v2でインストールし、make containerでコンテナをビルドし、kubectl apply -f examples/standardでデプロイします。kube-prometheusスタックにはKSMがコンポーネントとしてすでに含まれています。GKEユーザーは厳格なロール権限のため、クラスタ管理者バインディングが必要な場合があります。READMEではKSMとmetrics-serverの比較も行っています。metrics-serverはMetrics APIを介してKubeletから集約されたリソースメトリクスを提供しますが、KSMはオブジェクト状態から新しいメトリクスを生成し、スナップショットをメモリ内に保持します。どちらもサードパーティの宛先にメトリクスをエクスポートしません。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.