はじめに
ここでは Kubernetes v1.30 の Changelog からメトリクスの変更と SIG Instrumentation の取り組みについてまとめました。
Kubernetes v1.30 では以下の KEP が Beta となりました。
KEP-3077: Contextual Logging
前回の v1.29 がリリースされた時に公式からブログが公開されていますので、詳細はこちらの記事を参照してください。
その他にも以下の KEP が Stable となりました。
メトリクスの変更
component-base
-
すべてのコンポーネントの
/metrics/slis
エンドポイントにプロセスの開始時間を記録するメトリクスが追加されました(#122750, @richabanker)- Gauge:
process_start_time_seconds
- Labels: {}
- Gauge:
kube-apiserver
-
ウォッチのキャッシュが新しくなるまでの待ち時間を測定するメトリクスが追加されました(#123190, @padlar)
- Histogram:
apiserver_watch_cache_read_wait
- Labels: {"resource"}
- Histogram:
-
--authorization-config
で指定されたファイルが更新されるとリロードし、メトリクスに記録されるようになりました。リロードに成功した場合はstatus="success"
、失敗した場合はstatus="failed"
が記録されます(#121946, @liggitt)- Gauge:
apiserver_authorization_config_controller_automatic_reload_last_timestamp_seconds
- Labels: {"status", "apiserver_id_hash"}
- Gauge:
-
Authorization Webhook のマッチ条件について以下のメトリクスが記録されるようになりました(#123611, @ritazh)
- Counter:
apiserver_authorization_match_condition_evaluation_errors_total
- Labels: {"type", "name"}
- Counter:
apiserver_authorization_match_condition_exclusions_total
- Labels: {"type", "name"}
- Histogram:
apiserver_authorization_match_condition_evaluation_seconds
- Labels: {"type", "name"}
- Counter:
-
JWT Authenticator で以下のメトリクスが記録されるようになりました(#123793, @aramase)
- Histogram:
apiserver_authentication_config_controller_automatic_reloads_total
- Labels: {"status", "apiserver_id_hash"}
- Histogram:
apiserver_authentication_config_controller_automatic_reload_last_timestamp_seconds
- Labels: {"status", "apiserver_id_hash"}
- Histogram:
-
API サーバーの暗号化設定のリロード回数を記録するメトリクスが追加されました。このメトリクスは、
success
またはfailure
を値とするstatus
ラベルを持ちます(#123179, @aramase)- Counter:
apiserver_encryption_config_controller_automatic_reloads_total
- Labels: {"status", "apiserver_id_hash"}
-
この変更にともない以下のメトリクスが非推奨となりました
apiserver_encryption_config_controller_automatic_reload_success_total
apiserver_encryption_config_controller_automatic_reload_failure_total
- 代わりに上記で追加された
apiserver_encryption_config_controller_automatic_reloads_total
を利用してください
- Counter:
-
JWT Authenticator のトークン認証のレイテンシを記録するメトリクスが追加されました(#123225, @aramase)
- Histogram:
apiserver_authentication_jwt_authenticator_latency_seconds
- Labels: {"result", "jwt_issuer_hash"}
- Histogram:
-
認可の結果を
decision
ラベルにallowed
とdenied
で記録するメトリクスが追加されました(#123333, @liggitt)- Counter:
apiserver_authorization_decisions_total
- Labels: {"type", "name", "decision"}
- Counter:
-
Authorization Webhook で次のメトリクスを記録するようになりました(#123639, @liggitt)
- Counter:
apiserver_authorization_webhook_evaluations_total
- Labels: {"name", "result"}
- Histogram:
apiserver_authorization_webhook_duration_seconds
- Labels: {"name", "result"}
- Counter:
apiserver_authorization_webhook_evaluations_fail_open_total
- Labels: {"name", "result"}
- Counter:
-
ラベル名をリネームし、StabilityLevel が Stable となりました(#124283, dims) (#123342, @logicalhan)
- Gauge:
apiserver_storage_size_bytes
- Labels: {"cluster" => "storage_cluster_id"}
- Gauge:
kubelet
-
待機時間を含め、コンテナイメージがダウンロードされるまでの時間(秒)を記録するメトリクスが追加されました。このメトリクスはイメージサイズのラベルに持ち、以下の範囲ごとに記録されます(#121719, @ruiwen-zhao)
- Histogram:
kubelet_image_pull_duration_seconds
- Labels: {"image_size_in_bytes"}
-
image_size_in_bytes
ラベルの値- {0-10MB, 10MB-100MB, 100MB-500MB, 500MB-1GB, 1GB-5GB, 5GB-10GB, 10GB-20GB, 20GB-30GB, 30GB-40GB, 40GB-60GB, 60GB-100GB, GT100GB}
- Histogram:
-
LifecycleHandler のスリープが予期せず終了した回数を記録するメトリクスが追加されました(#122456, @AxeZhan)
- Gauge:
kubelet_sleep_action_terminated_early_total
- Labels: {}
- Gauge:
-
Memory Manager のピニングの割当を記録するメトリクスが追加されました(#121778, @Tal-or)
- Counter:
kubelet_memory_manager_pinning_requests_total
- Labels: {}
- Counter:
kubelet_memory_manager_pinning_errors_total
- Labels: {}
- Counter:
-
開発者がノード起動時の遅延問題の原因を把握できるように、最初のネットワーク Pod が起動するのにかかる時間(イメージのダウンロードやinitコンテナの実行時間を除く)を記録するメトリクスが追加されました。Pod 作成のタイムスタンプから、すべてのコンテナが起動しウォッチで観測されるまでの時間(秒)となります(#121720, @aojea)。
- Gauge:
kubelet_first_network_pod_start_sli_duration_seconds
- Labels: {}
- Gauge:
-
age
とspace
の値を持つreason
ラベルが追加されました。これにより何が要因でコンテナイメージが GC されたかが区別できるようになりました(#123345, @haircommander)- Counter:
kubelet_image_garbage_collected_total
- Labels: {"reason"}
- Counter:
-
RWX
、ROX
、RWO
、RWOP
などの値を持つ、access_mode
ラベルが追加されました#123667, @jsafrane)-
volume_manager_selinux_*
- Labels: {"access_mode"}
-
kube-scheduler
-
不要な時は
NodeAffinity Score
プラグインをスキップするようになりました。そのため次のメトリクスが増加している可能性があります(#117024, @sanposhiho)- Histogram:
scheduler_plugin_execution_duration_seconds{extension_point="score", plugin="NodeAffinity"}
- Histogram:
-
非推奨バージョンが
1.28
から1.29
に修正されました(#123038, @alculquicondor)-
scheduler_pod_scheduling_duration_seconds
- 代替は
scheduler_pod_scheduling_sli_duration_seconds
を利用してください
- 代替は
-
kube-proxy
- なし
その他
- cAdvisor:
v0.49.0
に更新されました(#123599, @bobbypage)
- client-go: リーダーが最適化されずに更新されているかどうかを監視できるメトリクスが追加されました(#122069, @linxiulei)。
- Counter:
leader_election_slowpath_total
- Labels: {"name"}
- Counter:
メトリクス以外の変更点
- kube-proxy: 構造化ロギングが使えるようになりました(#122197, @fatsheep9146)
- kubelet: 同時にログローテーションを行う機能が有効になりました。これは、
containerLogMaxWorkers
という設定により、実行可能な同時ローテーションの最大数を決定します。また、containerLogMonitorInterval
という設定で監視期間を設定します(#114301, @harshanarayana)
- コンポーネントのテキストロギングにtextloggerが使われるようになりパフォーマンスが向上しました(#114672, @pohly)
- kube-controller-manager: Broadcaster ロギングのグローバルレベルを 3 に更新し、ログベルを下げることでユーザーがイベントメッセージを無視できるようにしました。これによりログのノイズが減少します(#122293, @mengjiao-liu)
- audit-log:
apiserver.latency.k8s.io/decode-response-object
アノテーションが追加され、デコード時間が記録されるようになりました(#121512, @HirazawaUi)