5
0

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 3 years have passed since last update.

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

Last updated at Posted at 2019-12-24

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

はじめに

v1.17 では前回の v1.16 に引き続き、KEP: Metrics Stability Migration が進められています。

その影響でいくつかのメトリクスが非表示となったので、古いメトリクスを使用している場合は、移行が必要となる点に注意してください。
ただし Stability Framework の戦略に沿ったメトリクスで、コードから削除されず非表示になっただけのメトリクスは、show-hidden-metrics-for-version フラグを指定することで、メトリクスを出力できます。

例えば rest_client_request_latency_secondsメトリクスは、次の通り v1.17 からは表示されない設定になりました。

# オプションをなしで起動
 ❯❯ minikube start --kubernetes-version 1.17.0

# proxy 経由でコンポーネントにアクセスするために proxy コマンドを実行
 ❯❯ kubectl proxy --port 8080

# apiserver のメトリクスを取得するが、`rest_client_request_latency_seconds`メトリクスは表示されない
 ❯❯ curl -sLf http://localhost:8080/metrics |grep rest_client_request_latency_seconds

# grep 終了ステータスは 1 となる
 ❯❯ echo $?
1

このような場合でも、フラグにshow-hidden-metrics-for-version=1.16を設定することでメトリクスを表示できます。
ただし、このフラグは KEP に記載されている通り、メトリクスが移行できなかった場合の救済措置として使用するものなので、基本的にはメトリクス移行をするようにした方が良いでしょう。

# show-hidden-metrics-for-version を 1.16 で指定し起動
 ❯❯ minikube start --kubernetes-version 1.17.0 --extra-config=apiserver.show-hidden-metrics-for-version=1.16

# proxy 経由でコンポーネントにアクセスするために proxy コマンドを実行
 ❯❯ kubectl proxy --port 8080

# apiserver のメトリクスを取得すると、`rest_client_request_latency_seconds`メトリクスが表示される
 ❯❯ curl -sLf http://localhost:8080/metrics |grep rest_client_request_latency_seconds
# HELP rest_client_request_latency_seconds [ALPHA] (Deprecated since 1.14.0) Request latency in seconds. Broken down by verb and URL.
# TYPE rest_client_request_latency_seconds histogram
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/%7Bprefix%7D",verb="GET",le="0.001"} 12
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/%7Bprefix%7D",verb="GET",le="0.002"} 124
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/%7Bprefix%7D",verb="GET",le="0.004"} 164
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/%7Bprefix%7D",verb="GET",le="0.008"} 177
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/%7Bprefix%7D",verb="GET",le="0.016"} 183
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/%7Bprefix%7D",verb="GET",le="0.032"} 187
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/%7Bprefix%7D",verb="GET",le="0.064"} 187
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/%7Bprefix%7D",verb="GET",le="0.128"} 204
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/%7Bprefix%7D",verb="GET",le="0.256"} 210
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/%7Bprefix%7D",verb="GET",le="0.512"} 210
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/%7Bprefix%7D",verb="GET",le="+Inf"} 210
rest_client_request_latency_seconds_sum{url="https://[::1]:8443/%7Bprefix%7D",verb="GET"} 3.3186713230000024
rest_client_request_latency_seconds_count{url="https://[::1]:8443/%7Bprefix%7D",verb="GET"} 210
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/healthz",verb="GET",le="0.001"} 0
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/healthz",verb="GET",le="0.002"} 3
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/healthz",verb="GET",le="0.004"} 6
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/healthz",verb="GET",le="0.008"} 8
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/healthz",verb="GET",le="0.016"} 9
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/healthz",verb="GET",le="0.032"} 11
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/healthz",verb="GET",le="0.064"} 11
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/healthz",verb="GET",le="0.128"} 11
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/healthz",verb="GET",le="0.256"} 11
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/healthz",verb="GET",le="0.512"} 11
rest_client_request_latency_seconds_bucket{url="https://[::1]:8443/healthz",verb="GET",le="+Inf"} 11
rest_client_request_latency_seconds_sum{url="https://[::1]:8443/healthz",verb="GET"} 0.08930866600000001
rest_client_request_latency_seconds_count{url="https://[::1]:8443/healthz",verb="GET"} 11

# grep 終了ステータスは 0 となる
 ❯❯ echo $?
0

v1.17.0 時点ではshow-hidden-metrics-for-versionフラグを持つコンポーネントは apiserver だけのようでしたが、今後のバージョンで他のコンポーネントにも追加されていくと思われます

それでは CHANGELOG を見ていきます。

メトリクスの変更(Metrics Changes)

追加されたメトリクス(Added metrics)

scheduler

  • scheduler_goroutines
    • kube-scheduler のゴルーチン数を記録し、prioritizing_extenderbinding のラベルを持ちます(#83535, @￰wgliang)
  • plugin_execution_duration_seconds
    • スケジュールフレームワークのプラグインごとの実行時間を記録します(#84522, @￰liu-cong)
  • permit_wait_duration_seconds

controll-manager

  • endpoint_slice_controller_endpoints_added_per_syncendpoint_slice_controller_endpoints_removed_per_syncendpoint_slice_controller_endpoints_desiredendpoint_slice_controller_num_endpoint_slicesendpoint_slice_controller_desired_endpoint_slicesendpoint_slice_controller_changes

kubelet

  • kubelet_preemptions
    • 時間の経過とともに発生するプリエンプションの数を記録し、トリガーとなるリソースをラベルに持ちます(#84120, @￰smarterclayton)

apiserver

  • apiserver_request_error_total
    • apiserver のリクエストエラー数を記録し、verb, group, version, resource, subresource, scope, component, codeのラベルを持ちます(#83427, @￰logicalhan)
  • authentication_latency_seconds
    • 認証処理のレイテンシーを記録し、success|failure|errorなどの値が入る、resultラベルを持ちます(#82409, @￰RainbowMango)

非推奨/変更されたメトリクス(Deprecated/changed metrics)

etcd

  • 次のメトリクスの Stability Level が ALPHA となりました(#83283, @￰RainbowMango)
    • etcd_version_info

kubelet

  • 次のメトリクスの Stability Level が ALPHA となりました(#84907, @￰RainbowMango, #84987, @￰RainbowMango)
    • kubelet_container_log_filesystem_used_bytes
    • kubelet_volume_stats_capacity_bytes
    • kubelet_volume_stats_available_bytes
    • kubelet_volume_stats_used_bytes
    • kubelet_volume_stats_inodes
    • kubelet_volume_stats_inodes_free
    • kubelet_volume_stats_inodes_used
    • plugin_manager_total_plugins
    • volume_manager_total_volumes
    • node_cpu_usage_seconds_total
    • node_memory_working_set_bytes
    • container_cpu_usage_seconds_total
    • container_memory_working_set_bytes
    • scrape_error

kube-controller-manager

  • 次のメトリクスの Stability Level が ALPHA となりました(#84896, @￰RainbowMango)
    • storage_count_attachable_volumes_in_use
    • attachdetach_controller_total_volumes
    • pv_collector_bound_pv_count
    • pv_collector_unbound_pv_count
    • pv_collector_bound_pvc_count
    • pv_collector_unbound_pvc_count

apiserver

  • 次のメトリクスは v1.17 より出力されない設定となりました(#83837, @￰RainbowMango)
    • apiserver_request_count
    • apiserver_request_latencies
    • apiserver_request_latencies_summary
    • apiserver_dropped_requests
    • etcd_request_latencies_summary
    • apiserver_storage_transformation_latencies_microseconds
    • apiserver_storage_data_key_generation_latencies_microseconds
    • apiserver_storage_transformation_failures_total

scheduler

  • pod_preemption_victims
    • メトリクスのタイプが Gauge から Histogram に変更されました(#83603, @￰Tabrizian)
  • 次のメトリクスは v1.17 より出力されない設定となりました(#83838, @￰RainbowMango)
    • scheduler_scheduling_latency_seconds
    • scheduler_e2e_scheduling_latency_microseconds
    • scheduler_scheduling_algorithm_latency_microseconds
    • scheduler_scheduling_algorithm_predicate_evaluation
    • scheduler_scheduling_algorithm_priority_evaluation
    • scheduler_scheduling_algorithm_preemption_evaluation
    • scheduler_scheduling_binding_latency_microseconds

kubeproxy

  • 次のメトリクスは v1.17 より出力されない設定となりました(#83839, @￰RainbowMango)
    • kubeproxy_sync_proxy_rules_latency_microseconds

その他

  • 次のメトリクスは v1.17 より出力されない設定となりました(#83836, @￰RainbowMango)
    • rest_client_request_latency_seconds
  • Prometheus のクライアントライブラリから削除されたため、非推奨だった以下の Prometheus のリクエストメトリクスが削除されました。代わりのメトリクスはpromhttp.InstrumentMetricHandlerから生成されるようになりました(#83987, @￰wenjiaswe)
    • http_request_duration_microseconds
    • http_request_duration_microseconds_sum
    • http_request_duration_microseconds_count
    • http_request_size_bytes
    • http_request_size_bytes_sum
    • http_request_size_bytes_count
    • http_requests_total
    • http_response_size_bytes
    • http_response_size_bytes_sum
    • http_response_size_bytes_count

その他の変更 (Other notable changes)

  • Addons: fluentd-gcp
    • event-exporter が 0.3.1 に更新され、protobuf を利用するようになりました(#83396, @￰loburm)
  • Addons: fluentd-elasticsearch
    • elasticsearch ディスカバリーが IPv6 をサポートしました(#85543, @￰SataQiu)
  • Addons: metrics-server
    • 次のバグが修正され、metrics-server が v0.3.6 に更新されました
      • Pod メトリクスの重複が発生すると、Metrics ストレージが壊れる問題(HPA と metrics-server がダウンする原因になる)(#83907, @￰olagacek)

所感

私の環境で v1.17 のメトリクスを見る限り、Kubernetes コンポーネント特有のメトリクスは、大方 Stability Framework に移しているようです。なので Stability Framework の仕様に合わせ、v1.18 からは非推奨なメトリクスが、非表示でななくコードから削除され始めるはずです。

Application Developer からするとメトリクスの変更ばかりで、大きな恩恵が受けられるわけではありません。ですが、メトリクス の扱いについて仕様的に保護されることは、監視システムを含めエコシステムの高い関心事なので引き続きウォッチしていきます。

5
0
0

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
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?