Kubernetes 1.15: SIG Instrumentation の変更内容
はじめに
ここでは、[Kubernetes 1.15 の CHANGELOG](Kubernetes 1.15 の CHANGELOG ) から SIG Instrumentation の取り組みについてまとめています。
v1.15 の SIG Instrumentation では以下のトピックに変更内容はないため記載を省略しています。
- 主な変更点(1.15 What’s New)
- 既知の問題 (Known Issues)
- アップグレード時の注意点 (Urgent Upgrade Notes)
- 廃止及び削除される機能 (Deprecations and Removals)
- 注目機能 (Notable Features)
- API の変更 (API Changes)
- 依存関係 (Dependencies)
また今回 SIG Instrumentation 単体での変更内容調査は初回となるため、今回のリリースにも関連する SIG Instrumentation の KEP についても紹介します。
以下の KEP で提唱されている Kubernetes Metrics Overhaul により v1.14 をターゲットにメトリクスの修正が実施されました。
- KEP Kubernetes Metrics Overhaul
- ゴール
- Prometheusや他のエコシステムに合わせて一貫性のある名前と高品質のメトリクスを提供すること
- メトリクスの直接的な結合を可能にするため、一貫したラベル名を提供すること
v1.15 でも引続き単位の修正などが実施されており、今後も SIG-Instrumentation のガイドラインや、Prometheus のガイドラインに合わせてメトリクスの改善がされるでしょう。
メトリクスの変更 (Metrics Changes)
Added metrics
- [kube-proxy] kube-proxy がプロキシールールを適用した最後の時間を記録するメトリクスである
kubeproxy_sync_proxy_rules_last_timestamp_seconds
が追加されました (#74027, @squeed)-
その他にも以下の
kubeproxy_sync_proxy_rules_*
メトリクスが追加されていますkubeproxy_sync_proxy_rules_endpoint_changes_pending
kubeproxy_sync_proxy_rules_endpoint_changes_total
kubeproxy_sync_proxy_rules_service_changes_pending
kubeproxy_sync_proxy_rules_service_changes_total
-
その他にも以下の
- [kubelet]
process_start_time_seconds
メトリクスが追加されました (#77975, @logicalhan)- これは名前の通り kubelet 自身のプロセスが起動した時間となります
- [scheduler] scheduler の queue ごとに Pending ステータスの Pod 数を記録する
scheduler_pending_pods
メトリクスが追加されました (#75501, @Huang-Wei)-
クラスターの全体的な状態を知るために追加されました、ちなみにスケジュール済の Pod は
scheduler_schedule_attempts_total{result="scheduled"}
のメトリクスで取得できます。
-
クラスターの全体的な状態を知るために追加されました、ちなみにスケジュール済の Pod は
- [kube-controller-manager, kubelet] ストレージ操作の成功と失敗のステータスを記録する
storage_operation_status_count
メトリクスが追加されました (#75750, @msau42)-
合わせて
storage_operation_duration_seconds
メトリクス(Histogram)のバケット範囲が、最大50秒だったものから600秒まで拡張されています
-
合わせて
Deprecated/changed metrics
- [kubelet] Probe メトリクスが Gauge タイプから Counter タイプに変更となったため、 メトリクス名も
prober_probe_result
からprober_probe_total
に変更となりました (#76074, @danielqsj)-
変更になったため
prober_probe_result
は利用できません
-
変更になったため
- [kube-apiserver]
transformation_failures_total
メトリクスが非推奨となり将来のリリースで削除されるため、transformation_operation_total
の利用が推奨となりました。 (#70715, @immutableT)- KMS Provider の変換処理をモニタリングすることがモチベーションのようです
- [kubelet]
storage_operation_duration_seconds
メトリクスには潜在的な問題があったため、ボリュームのプロビジョニングと削除を含んだvolume_operation_total_seconds
メトリクスが追加されました。storage_operation_duration_seconds
メトリクスに変更はありませんが以下の問題を含んでいます。 (#78061, @yuxiangqian)-
- External Provisioner / Deleter によってプロビジョニング/削除されたボリュームの場合、
storage_operation_duration_seconds
メトリクスに External Provisioner / Deleter の操作時間は含まれません(事実上0秒に近い数値となります)。これはvolume_operation_total_seconds
で修正されています。
- External Provisioner / Deleter によってプロビジョニング/削除されたボリュームの場合、
-
- プロビジョニングや削除の処理中に一時的なエラーが発生した場合、例えば deleteVolume が呼び出されている間にボリュームがまだ使用中だと
storage_operation_duration_seconds
メトリクスはボリュームが削除されるまで待ちません。これもvolume_operation_total_seconds
メトリクスで修正されています。
- プロビジョニングや削除の処理中に一時的なエラーが発生した場合、例えば deleteVolume が呼び出されている間にボリュームがまだ使用中だと
- この変更の潜在的な影響としてアラートや SLO で使用しているメトリクスを
storage_operation_duration_seconds
からvolume_operation_total_seconds
に修正すると、以前より正確な数値で値も大きくなるため、閾値を超える可能性があります。
-
- [kube-apiserver] ミリ秒ではなく秒の単位になっていたため、
*_admission_latencies_milliseconds_summary
と*_admission_latencies_milliseconds
メトリクスは、*_admission_duration_seconds
と*_admission_duration_seconds_summary
に変更となりました (#75279, @danielqsj)
- [kube-apiserver] Admission メトリクス
*_admission_duration_seconds
の Histogram バケットの範囲が 5ミリ秒 〜 2.5秒 の範囲に修正されました (#78608, @jpbetz)- ミリ秒から秒に修正した時、6桁ほどずれていたみたいです
- [cloud-providers/azure] 不正確な Azure のメトリクスが修正されました (#77722, @andyzhangx)
その他の変更 (Other notable changes)
- [metrics-server addon] 優先的に IP addresses を使ってノードへ接続するように戻しました (#76819, @serathius)
- metrtics-server v0.3 で変更された機能により、IP アドレスより DNS が優先されるようになり一部のテストなどで DNS への依存が増えたので、引数の変更でもとの挙動に戻したようです。
- Pod に実行中のインスタンスがある場合、containerd や cri-o などの CRI ランタイムについては、 kubelet の Stats から以前に終了したインスタンスの Stats を表示しないように修正しました。
この修正により Docker を利用した時の挙動と一貫性が保たれ、同じ Pod に複数インスタンスの Stats がある場合に一部のコンテナの Prometheus メトリクスが機能しなくなるという問題が修正されました (#77426, @Random-Liu)- ここで使われているインスタンスとは Pod の実体のことを指しています。またこの現象は短い期間で再作成されると同じ名前空間と名前をもつ Pod が作成され発生するようです。
所感
v1.14 ほどではありませんが、v1.15 でもメトリクスの追加・変更があったので アラートや SLO のメトリクスも合わせて棚卸しをした方がよさそうです。
また現状だと Kubernetes に限らず Prometheus のメトリクスのガイドラインは、レビューによって守られているので ツール や仕様などで検知・修正できる仕組みが OpenMetrics などで議論されると嬉しいなと思っています。