6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-09-24

はじめに

ここでは、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 なメトリクスがプログラマブルに検知できたら嬉しいです。

備考

6
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?