はじめに
ここでは、Kubernetes 1.28 の CHANGELOG からメトリクスの変更と SIG Instrumentation の取り組みについてまとめています。
Kubernetes v1.28 で SIG Instrumentation が扱う主要なテーマはありませんが、SIG Node のテーマに SIG Instrumentation に関連した施策があるため記載します(注意: v1.28 のマイルストーンから外れました)。
CRI container and pod statistics without cAdvisor
このテーマは SIG Node のため詳細については割愛しますが、kubelet の /metrics/cadvisor
、/stats/summary
エンドポイントで取得できる統計情報の取得元の整理と改善が進められています。
エンドポイント自体の廃止などはノンゴールとなっていますが、一部のメトリクスは新しい情報源である CRI API でサポートされない可能性もあるため注視していきたいと思います。
この施策によりメトリクスの変更がある場合も可能な限り メトリクスの変更
で記載していきます。
ただし、残念ながら v1.28 のマイルストーンからは外れたため Beta ではなく Alpha のままとなっています。
cAdvisor-less, CRI-full Container and Pod Stats · Issue #2371 · kubernetes/enhancements
それ以外の更新された KEP のマイルストーンと参考リンクを記載しておきます。
-
KEP-3498: Extending Metrics Stability
- v1.28 で GA になりました
- こちらの記事で紹介しています
-
KEP-2305: Dynamic Cardinality Enforcement
- v1.28 で Beta の予定でしたが v1.28 のマイルストーンから現在は削除されています
それでは Metrics Changes
について説明していきます。
メトリクスの変更
は、私が全ての変更点からメトリクスの変更に関連するものを抜粋した内容となります。
メトリクスの変更(Metrics Changes)
component-base
- [ADD] client-go の DNS 解決のレイテンシーを計測するメトリクスが追加されました(#115357, @mfojtik)
- Histogram:
rest_client_dns_resolution_duration_seconds
- Labels: {"host"}
- Buckets: {0.005, 0.025, 0.1, 0.25, 0.5, 1.0, 2.0, 4.0, 8.0, 15.0, 30.0}
- Histogram:
- [ADD] client-go の http.Transports の処理で、キャッシュエントリ数とトランスポートの作成数を記録するメトリクスが追加されました(#117295, @aojea)
- Gauge:
rest_client_transport_cache_entries
- Labels: None
- Counter:
rest_client_transport_create_calls_total
- Labels: {"result"}
- Gauge:
- [MOD] 次のメトリクスが Beta になりました(#119264, @logicalhan)
- Gauge:
kubernetes_feature_enabled
- Gauge:
- [MOD] 次のメトリクスの名前がリネームされ、Beta になりました(#119264, @logicalhan)
- Counter:
registered_metric_total
=>registered_metrics_total
- Counter:
disabled_metric_total
=>disabled_metrics_total
- Counter:
hidden_metric_total
=>hidden_metrics_total
- Counter:
- [MOD] 次のメトリクスが Beta になりました(#118986, @logicalhan)
- Counter:
kubernetes_healthcheck
- Counter:
kubernetes_healthchecks_total
- Counter:
kube-apiserver
- [ADD] ValidatingWebhookConfiguration、または MutatingWebhookConfiguration の matchCondition の評価時間と除外された数を記録するメトリクスが追加されました(#119311, @ivelichkovich)
- Histogram:
apiserver_admission_match_condition_evaluation_seconds
- Labels: {"name", "kind", "type", "operation"}
- Buckets: {0.001, 0.005, 0.01, 0.025, 0.1, 0.2, 0.25}
- Counter:
apiserver_admission_match_condition_exclusions_total
- Labels: {"name", "kind", "type", "operation"}
- Histogram:
- [ADD] apiserver から etcd へのリクエストをモニタリングするためのメトリクスが追加されました。
type
ラベルにはリソースタイプが記録されます(#117222, @iyear)- Counter:
etcd_requests_total
- Labels: {"operation", "type"}
- Counter:
etcd_request_errors_total
- Labels: {"operation", "type"}
- Counter:
- [ADD] Encryption Configuration Controller の暗号設定の自動再読み込みをモニタリングするメトリクスが追加されました (#119008, @nilekhc)
- Counter:
apiserver_encryption_config_controller_automatic_reload_failures_total
- Help: Total number of failed automatic reloads of encryption configuration.
- Labels: None
- Counter:
apiserver_encryption_config_controller_automatic_reload_success_total
- Help: Total number of successful automatic reloads of encryption configuration
- Labels: None
- Gauge:
apiserver_encryption_config_controller_automatic_reload_last_timestamp_seconds
- Help: Timestamp of the last successful or failed automatic reload of encryption configuration
- Labels: None
- Counter:
- [ADD] Authorization Webhook をモニタリングするメトリクスが追加されました(#117211, @HirazawaUi)
- Counter:
authorization_attempts_total
- Labels: {"result"}
- Histgram:
authorization_duration_seconds
- Labels: {"result"}
- Buckets: metrics.ExponentialBuckets(0.001, 2, 15)
- Counter:
- [ADD] CRD Conversion Webhook のリクエストをモニタリングするメトリクスが追加されました(#118292, @cchapla)
- Counter:
apiserver_webhook_conversion_request_total
- Labels: {"result", "failure_type"}
- Histogram:
apiserver_webhook_conversion_duration_seconds
- Labels: {"result", "failure_type"}
- Bucket: {0.005, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 30, 45, 60}
- Counter:
- [ADD|DEPRECATED] 次の紛らわしい名前のメトリクスが非推奨となり、代わりのメトリクスが追加されました(#118960, @MikeSpreitzer)
- [DEPRECATED] Gauge:
apiserver_flowcontrol_request_concurrency_in_use
- [ADD] Gauge:
apiserver_flowcontrol_current_executing_seats
- Labels: {"priorityLevel", "flowSchema"}
- [DEPRECATED] Gauge:
- [MOD] 次の Flowcontrol に関するメトリクスが Beta となりました(#119110, @andrewsykim)
- Histgram:
apiserver_flowcontrol_request_wait_duration_seconds
- Gauge:
apiserver_flowcontrol_current_executing_seats
- Gauge:
apiserver_flowcontrol_nominal_limit_seats
- Counter:
apiserver_flowcontrol_rejected_requests_total
- Counter:
apiserver_flowcontrol_dispatched_requests_total
- Gauge:
apiserver_flowcontrol_current_inqueue_requests
- Gauge:
apiserver_flowcontrol_current_executing_requests
- Histgram:
- [MOD] 次のメトリクスがリネームされました(#118812, @serathius)
-
apiserver_storage_db_total_size_in_bytes
=>apiserver_storage_size_bytes
-
- [MOD] 次のメトリクスのバケットを更新しました(#118945, @andrewsykim)
- Histogram:
apiserver_request_filter_duration_seconds
- Buckets: {0.0001, 0.0003, 0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1.0, 5.0, 10.0, 15.0, 30.0}
- Histogram:
apiserver_request_wait_duration_seconds
- Buckets: {0, 0.005, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 15, 30}
- Histogram:
- [DEPRECATED] 次のメトリクスが非推奨となりました。合わせてヘルプテキストも修正されています (#118959, @MikeSpreitzer)
- Gauge:
apiserver_flowcontrol_request_concurrency_limit
- 代わりに
apiserver_flowcontrol_nominal_limit_seats
の利用を検討してください
- 代わりに
- Gauge:
kubelet
- [ADD]
/stats/summary
と/metrics/resource
のエンドポイントにスワップのメトリクスが追加されました(#118865, @iholder101)- Gauge:
node_swap_usage_bytes
- Labels: None
- Gauge:
pod_swap_usage_bytes
- Labels: None
- Gauge:
container_swap_usage_bytes
- Labels: None
- Gauge:
- [FIX]
volume_plugin="kubernetes.io/empty-dir"
のラベル値でカウントされるエラー数に、Projected Volume が作成されるたびにカウントされている問題が修正されました(#117022, @mpatlasov)- Couner:
storage_operation_duration_seconds_count
- Couner:
- [FIX] 再起動待ちの Static Pod で正しくカウントされていない問題が修正されました(#116995, @smarterclayton)
- Counter:
kubelet_working_pods
- Counter:
kube-controller-manager
- [MOD] Attach detach controller に、以下のメトリクスのラベルが追加されました(#119185, @xing-yang)
-
attachdetach_controller_forced_detaches
- Labels: {"reason"}
-
- [FIX] Pod GC による強制削除の全ての挙動で記録されるように修正され、ラベルも追加されました(#118480, @carlory)
- Counter:
force_delete_pods_total
- Labels: {"namespace", "reason"}
- Counter:
force_delete_pod_errors_total
- Labels: {"namespace", "reason"}
- Counter:
kube-scheduler
- [DEL] 次のメトリクスが削除されました(#117727, @kerthcet)
- Gauge:
scheduler_scheduler_goroutines
- 代わりに
scheduler_goroutines
を利用してください
- 代わりに
- Gauge:
- [MOD]
extension_point
ラベルにPrescore
とScore
のサポートが追加されました。Prescore
とScore
に関係のない Pod はカウントされません。(#118025, @AxeZhan)- Counter:
scheduler_plugin_evaluation_total
- Labels: {"extension_point","plugin","profile"}
- Counter:
- [FIX] Pod が
PreEnqueue
に失敗した時間を含まないように修正されました(#118049, @helayoty)- Histgram:
pod_scheduling_duration_seconds
- Labels: {"attempts"}
- Histgram:
kube-proxy
-
kubeproxy_sync_proxy_rules_duration_seconds
メトリクスとは別に、以下のメトリクスが追加されました。(#117787, @danwinship)- Histgram
kubeproxy_sync_full_proxy_rules_duration_seconds
- Labels: None
- Buckets: metrics.ExponentialBuckets(0.001, 2, 15)
- Histgram:
kubeproxy_sync_partial_proxy_rules_duration_seconds
- Labels: None
- Buckets: metrics.ExponentialBuckets(0.001, 2, 15)
-
kubeproxy_sync_proxy_rules_duration_seconds
は 2 つのメトリクスは分割されましたが、今のところ元のメトリクスも継続して利用できるようです
- Histgram
- [MOD|ADD]
sync_proxy_rules_iptables_total
メトリクスは v1.27 以前の方法である kube-proxy が管理する iptables のルール総数を記録する方法にリバートされました。最後に同期したルール数をカウントするメトリクスは別のメトリクスとして追加されました。(#119140, @danwinship)- Gauge:
kubeproxy_sync_proxy_rules_iptables_last
- Labels: {"table"}
- Gauge:
その他
- [ADD] Cloud Controller Manager の Node Controller が
Node
の初期同期のタイミングでメトリクスを出力するようになりました。このメトリクスは新しいNode
の作成と、クラウドプロバイダのテイントの削除、Node Controller の初期アクションとの間のレイテンシーを記録します。これらのメトリクスは、Cloud Manager の--concurrent-node-syncs
フラグを設定する際に参照する必要があります。(#119241, @cartermckinnon)- Histgram:
node_controller_cloud_provider_taint_removal_delay_seconds
- Labels: None
- Buckets: metrics.ExponentialBuckets(1, 4, 6)
- Histgram:
node_controller_initial_node_sync_delay_seconds
- Labels: None
- Buckets: metrics.ExponentialBuckets(1, 4, 6)
- Histgram:
メトリクス以外の変更点
- metrics-server が
v0.6.3
にアップデートされました(#117120, @dgrisonnet)
- cAdvisor が
v0.47.2
にアップデートされました。このバージョンではcri-o
でコンテナがリスタートした場合にメトリクスが欠損する問題が修正されています(#118774, @harche)
- cadvisor
v0.47.3
にアップデートされました(#119225, @iholder101)
- [KMSv2] ログ中の
KeyID
値をハッシュ化する機能が追加されました。KeyID
値は機密情報であるため平文で記録しないようにします。ハッシュ化することで、必要な情報を記録しつつ、データの機密性を保護できます(#118988, @nilekhc)
- スケジューラーは Pod に関連した設定がない場合、
InterPodAffinity
Score プラグインの処理をスキップします。この処理によりスケジューラーのメトリクスに影響が生じます(#117794, @utam0k)
- スケジューラーは Pod Topology Spread Constraint の設定がない場合、
PodTopologySpread
Filter プラグインの処理をスキップします。この処理によりスケジューラーのメトリクスに影響が生じます(#117683, @utam0k)
- スケジューラーは Pod に関連した設定がない場合
PodTopologySpread
Score プラグインの処理をスキップします。この処理によりスケジューラーのメトリクスに影響が生じます(#118608, @AxeZhanutam0k)
- kube-proxy に
--logging-format
フラグが追加され構造化ロギングがサポートされました(#117800, @cyclinder)
- 次のパッケージ、コントローラー、または処理などは構造化ロギングに移行しました
-
pkg/controller/endpoint
(#116755, @my-git9) -
pkg/scheduler/framework/preemption
(#116835, @mengjiao-liu) -
pod-security-admission
(#114471, @Namanl2001) -
pkg/controller/volume
,pkg/controller/util/
,pkg/controller/replicaset
,pkg/controller/nodeipam
,pkg/controller/garbagecollector
,pkg/controller/endpoint
(#116930, @fatsheep9146) -
pkg/scheduler/framework/runtime
(#116842, @mengjiao-liu) - Job Controller(#116910, @fatsheep9146)
- EndpointSlice Controller、EndpointSliceMirroring Controller(#115295, @Namanl2001)
- Certificate Controller(#113994, @mengjiao-liu)
- Disruption Controller(#119147, @mengjiao-liu)
- PodGC Controller/other remaining log calls within
kube-controller-manager
(#119250, @pohly) - NodeResources Scheduler Plugin(#116748, @mengjiao-liu)
- PodtopologySpread Scheduler Plugins(#116797, @mengjiao-liu)
- Interpodaffinity Scheduler Plugin(#116635, @mengjiao-liu)
- Volumezone Scheduler Plugin(#116829, @mengjiao-liu)
- Scheduler Interface/Cache Method(#116849, @mengjiao-liu)
-
- [Addons] metrics-server の metric-resolution が 30s から 15s に変更されました(#117121, @dgrisonnet)
- [Scheduler] プリエンプトされた Pod の詳細がログに記録されうようになりました(ログレベル 2 ) (#117214, @HirazawaUi)