はじめに
ここでは、Kubernetes 1.16 の CHANGELOG から Metrics Changes と SIG Instrumentation の取り組みについてまとめています。
また今回のリリースに関連する以下の KEP について紹介します。
-
KEP Kubernetes Control-Plane Metrics Stability
- ゴール
- Kubernetes コントロールプレーンのメトリクス取得に関するさまざまな安定性の保証について定義する
- メトリクスの安定性を表現するための統一的なメカニズムを定義する
- ゴール
-
KEP Metrics Stability Migration
- ゴール
- Stability Framework にメトリクスを移行するための一般的な戦略の概要を定義する
- 共有されているメトリクスの移行方法を明示的に定義する
- 移行パスを通じて下位互換性を維持する
- ただしメトリクスのオーバーホールで廃止予定になったメトリクスは除外する(今後削除されるものも含む)
- メトリクスの変更を各コンポーネントの所有者に通知する
- ゴール
メトリクスの安定性はコミュニティの継続的な関心事であり、コントロールプレーンのメトリクスに変更がある場合は事前に通知され、十分な移行期間などが設けられている必要があります。
そこで KEP Control-Plane Metrics Stability
ではメトリクス名やラベル名について何らかの保証を策定し、プログラムとして適切に扱う方法が提案されています。
また KEP Metrics Stability Migration
では上記で策定されたフレームワークに移行する方法が提案されています。
そして今回のリリースでは上記 KEP の一部が実装され取り込まれました。
おおまかな内容としては、一部のコントロールプレーンのメトリクスに Stability Level というメタデータが追加され、値として Stability Classes(ALPHA, STABLE) が登録されるようになりました。
このメタデータはメトリクスの Help テキストに表示されます。
Example)
# HELP kubelet_docker_operations [ALPHA] (Deprecated) Cumulative number of Docker operations by operation type.
# TYPE kubelet_docker_operations counter
kubelet_docker_operations{operation_type="create_container"} 33
kubelet_docker_operations{operation_type="info"} 1
...
それでは CHANGELOG を見ていきます。
メトリクスの変更(Metrics Changes)
追加されたメトリクス(Added metrics)
apiserver
-
aggregator_openapi_v2_regeneration_count
、aggregator_openapi_v2_regeneration_gauge
、apiextension_openapi_v2_regeneration_count
-
authentication_attempts
- 認証の試行回数をカウントします(#81509, @RainbowMango)
-
apiserver_admission_webhook_rejection_count
- Admission Webhook により Reject された原因を計測します(#81399, @roycaihw)
kubelet
-
running_container_count
-
container_state
のラベルが追加され、コンテナの状態(running/exited/created/unknown)に基づいてコンテナ数を取得できるようになりました(#81573, @irajdeep)
-
-
kubelet_evictions
- リソースを再利用するために kubelet によって実行された Pod eviction 数をカウントします(#81377, @sjenning)
- StatFS メトリクスプロバイダーを使用し、NFS ドライバーのメトリクスが収集できるようになりました(#75805, @brahmaroutu)
cadvisor
- cAdvisor が v0.34.0 にアップデートされました(#81972, @dashpole)
-
container_sockets
- コンテナで開いているソケット数を計測します
-
container_threads
- コンテナ内で実行されているスレッドの数を計測します
-
container_threads_max
- コンテナ内で許可されるスレッドの最大数を計測します。値がゼロの場合は無限となります。
-
kube-proxy
-
sync_proxy_rules_iptables_restore_failures_total
削除されたメトリクス(Removed metrics)
-
SIG instrumentation のガイドライン に合わせて、cAvisor のメトリクスから
pod_name
とcontainer_name
のラベルが削除されました。もし cAdvisor や kubelet で提供されたメトリクスでpod_name
とcontainer_name
のラベルを利用している PromQL がある場合は、pod
とcontainer
に置き換える必要があります(#80376, @ehashman)。-
Grafana のダッシュボードで使ってる PromQL、Prometheus の Record Rule、Alert Rule で コンテナの CPU や Memory を参照しているプロジェクトでは v1.16 移行前には修正が必要です。
container_cpu_usage_seconds_total{ container="coredns", # 削除された=> container_name="coredns", pod="coredns-xxxxxxxxxx-xxxx", # 削除された=> pod_name="coredns-xxxxxxxxxx-xxxx" }
-
非推奨/変更されたメトリクス(Deprecated/changed metrics)
- kube-controller-manager と cloud-controller-manager のメトリクスは、Stability Level が ALPHA となりました(#81624, @logicalhan)
- kube-proxy のメトリクスは、Stability Level が ALPHA となりました(#81626, @logicalhan)
- kube-apiserver のメトリクスは、Stability Level が ALPHA となりました(#81531, @logicalhan)
- kubelet の
/metrics
と/metrics/probes
のパスが提供するメトリクスは、Stability Level が ALPHA となりました(#81534, @logicalhan)
- scheduler のメトリクスは、Stability Level が ALPHA となりました(#81576, @logicalhan)
-
apiserver_admission_webhook_admission_duration_seconds
メトリクスのrejected
ラベルの値が正しい結果が記録されるように修正されました(#81399, @roycaihw)
- CSI ドライバーがメトリクスをサポートしていない場合、サポートしていないエラーを返さない CSI メトリクスの不具合が修正されました(#79851, @jparklab)
-
ZFS ストレージプールを使用し LXD のディスク Stats が修正されました(#81972, @dashpole)
-
CRI-O に存在しないネットワークメトリクスの不具合が修正されました(#81972, @dashpole)
その他の変更 (Other notable changes)
所感
今回紹介した KEP の実装が完了すれば、STABLE なメトリクスが突然廃止になることはなくなりますが、Prometheus(Alertmanager)、Grafana 側でプログラマブルに Deprecated なメトリクスを検知できるわけではありません。
将来的に Prometheus(もしくは OpenMetrics) 側のメトリクスの仕様が見直され、Deprecated なメトリクスがプログラマブルに検知できたら嬉しいです。