Help us understand the problem. What is going on with this article?

Kubernetes 1.16: Metrics Changes と SIG Instrumentation の変更内容

はじめに

ここでは、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_countaggregator_openapi_v2_regeneration_gaugeapiextension_openapi_v2_regeneration_count
    • kube-apiserver が OpenAPI Spec を再生成するときに、トリガーになる API Service または CRD と、追加、更新、削除などの理由を計測します(#81786, @￰sttts)
  • apiserver_admission_webhook_rejection_count
    • Admission Webhook により Reject された原因を計測します(#81399, @￰roycaihw)
  • apiserver_watch_events_total
    • システム内で Watch しているイベント数をカウントします(#78732, @￰mborsz)
  • apiserver_watch_events_sizes
    • システム内の Watch しているイベントのサイズを見積もりするために使用するメトリクスです(#80477, @￰mborsz)

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
    • iptable のリストアに失敗した数をカウントします(ipvsとiptablesの両方に対応)(#81210, @￰figo)

削除されたメトリクス(Removed metrics)

  • SIG instrumentation のガイドライン に合わせて、cAvisor のメトリクスから pod_namecontainer_name のラベルが削除されました。もし cAdvisor や kubelet で提供されたメトリクスで pod_namecontainer_name のラベルを利用している PromQL がある場合は、podcontainer に置き換える必要があります(#80376, @￰ehashman)。

    • :pencil: 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)

  • addons で利用されている fluentd-elasticsearch の Kibana が 最新版に更新され改善されました(#80421, @￰lostick)

所感

今回紹介した KEP の実装が完了すれば、STABLE なメトリクスが突然廃止になることはなくなりますが、Prometheus(Alertmanager)、Grafana 側でプログラマブルに Deprecated なメトリクスを検知できるわけではありません。
将来的に Prometheus(もしくは OpenMetrics) 側のメトリクスの仕様が見直され、Deprecated なメトリクスがプログラマブルに検知できたら嬉しいです。

備考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした