Edited at

Kubernetes 1.15: SIG Instrumentation の変更内容


Kubernetes 1.15: SIG Instrumentation の変更内容


はじめに

ここでは、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)



    • :pencil: その他にも以下の 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)



    • :pencil: これは名前の通り kubelet 自身のプロセスが起動した時間となります




  • [scheduler] scheduler の queue ごとに Pending ステータスの Pod 数を記録する scheduler_pending_pods メトリクスが追加されました (#75501, @Huang-Wei)



    • :pencil: クラスターの全体的な状態を知るために追加されました、ちなみにスケジュール済の Pod は scheduler_schedule_attempts_total{result="scheduled"} のメトリクスで取得できます。




  • [kubelet] kubelet_volume_stats_* メトリクスに CSI ボリュームの情報が追加されました (#76188, @humblec)


  • [kube-controller-manager, kubelet] ストレージ操作の成功と失敗のステータスを記録する storage_operation_status_count メトリクスが追加されました (#75750, @msau42)



    • :pencil: 合わせて storage_operation_duration_seconds メトリクス(Histogram)のバケット範囲が、最大50秒だったものから600秒まで拡張されています




Deprecated/changed metrics


  • [kubelet] Probe メトリクスが Gauge タイプから Counter タイプに変更となったため、 メトリクス名も prober_probe_result から prober_probe_total に変更となりました (#76074, @danielqsj)



    • :pencil: 変更になったため prober_probe_result は利用できません




  • [kube-apiserver] transformation_failures_total メトリクスが非推奨となり将来のリリースで削除されるため、transformation_operation_total の利用が推奨となりました。 (#70715, @immutableT)



    • :pencil: KMS Provider の変換処理をモニタリングすることがモチベーションのようです




  • [kubelet] storage_operation_duration_seconds メトリクスには潜在的な問題があったため、ボリュームのプロビジョニングと削除を含んだ volume_operation_total_seconds メトリクスが追加されました。storage_operation_duration_seconds メトリクスに変更はありませんが以下の問題を含んでいます。 (#78061, @yuxiangqian)


    • 1. External Provisioner / Deleter によってプロビジョニング/削除されたボリュームの場合、 storage_operation_duration_seconds メトリクスに External Provisioner / Deleter の操作時間は含まれません(事実上0秒に近い数値となります)。これは volume_operation_total_seconds で修正されています。

    • 2. プロビジョニングや削除の処理中に一時的なエラーが発生した場合、例えば deleteVolume が呼び出されている間にボリュームがまだ使用中だと storage_operation_duration_seconds メトリクスはボリュームが削除されるまで待ちません。これも volume_operation_total_seconds メトリクスで修正されています。

    • この変更の潜在的な影響としてアラートや 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)


    • これは命名ガイドライン違反の影響を受けました


    • :pencil: これは SIG-Instrumentation のガイドラインではなく、Prometheus のガイドラインmust have a single unit です




  • [kube-apiserver] Admission メトリクス *_admission_duration_seconds の Histogram バケットの範囲が 5ミリ秒 〜 2.5秒 の範囲に修正されました (#78608, @jpbetz)



    • :pencil: ミリ秒から秒に修正した時、6桁ほどずれていたみたいです :cry:




  • [cloud-providers/azure] 不正確な Azure のメトリクスが修正されました (#77722, @andyzhangx)


その他の変更 (Other notable changes)


  • [metrics-server addon] 優先的に IP addresses を使ってノードへ接続するように戻しました (#76819, @serathius)



    • :pencil: metrtics-server v0.3 で変更された機能により、IP アドレスより DNS が優先されるようになり一部のテストなどで DNS への依存が増えたので、引数の変更でもとの挙動に戻したようです。




  • Pod に実行中のインスタンスがある場合、containerd や cri-o などの CRI ランタイムについては、 kubelet の Stats から以前に終了したインスタンスの Stats を表示しないように修正しました。
    この修正により Docker を利用した時の挙動と一貫性が保たれ、同じ Pod に複数インスタンスの Stats がある場合に一部のコンテナの Prometheus メトリクスが機能しなくなるという問題が修正されました (#77426, @Random-Liu)



    • :pencil: ここで使われているインスタンスとは Pod の実体のことを指しています。またこの現象は短い期間で再作成されると同じ名前空間と名前をもつ Pod が作成され発生するようです。




所感

v1.14 ほどではありませんが、v1.15 でもメトリクスの追加・変更があったので アラートや SLO のメトリクスも合わせて棚卸しをした方がよさそうです。


また現状だと Kubernetes に限らず Prometheus のメトリクスのガイドラインは、レビューによって守られているので ツール や仕様などで検知・修正できる仕組みが OpenMetrics などで議論されると嬉しいなと思っています。