Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Kubernetesにおけるストレージ関連のメトリクス一覧

はじめに

Kubernetesで、パフォーマンスやキャパシティの監視を行う際、Prometheusなどを使い各種メトリクスを収集しGrafanaなどでグラフ化している人も多いのではないでしょうか。
本ドキュメントでは、KuberntesにてPV(Persistent Volume)を利用する際、モニタリングにて利用できるストレージ関連のメトリクスを紹介します。

※ Kubernetes 1.17.3, Node exporter 0.18.1時点のメトリクスになります。

PVのマウントと監視範囲

PVがどのようにマウントされているのかを一例を用いて説明します。
以下の図は、外部ストレージから提供されているiSCSI VolumeがPod内のコンテナのディレクトリにマウントされるまでの、各デバイスファイルとディレクトリのマウントについて示しています。

path.png

まず、外部ストレージにより提供されたVolumeは、ベアメタルのサーバと同じくNode上のデバイス(この例では/dev/sdb)にマッピングされ、その後、kubeletにて管理されているディレクトリ(/var/lib/kubelet/pods配下)にマウントされます。
次に、kubeletによりPod内のコンテナにマッピングされた後、ディレクトリ(この例では/mnt/data)にマウントされます。
どのようにマウントされているのかを理解することが、PVの監視では重要となります。
PVの監視では、メトリクスの収集元となるExporter/Serviceがどのデバイス・ディレクトリ(およびFileSystem)を監視しているかを理解する必要があります。
例えば、コンテナの監視を行うcAdvisorは、上記図のPod内のデバイス(/dev/sda)およびその上に作られているFileSystem(この例だと/mnt/dataがFileSystemのRoot)が監視の範囲となります。kubeletは、kubeletが把握しているディレクトリ(/var/lib/kubelet/pods配下)が監視の範囲となります。Nodeのリソースを監視するNode exporterはNodeのリソースとして見える全てのデバイス・ディレクトリが監視の範囲となります。

ストレージ関連のメトリクス一覧

以下に、ストレージ関連のメトリクスを示します。

メトリクス 説明 Exporter/Service
container_file_descriptors オープンしているファイルディスクリプタ数 cAdvisor
container_fs_inodes_free フリーのinode数 cAdvisor
container_fs_inodes_total inodeのトータル数 cAdvisor
container_fs_io_current 実行中のIO数 cadvisor
container_fs_io_time_seconds_total IOに費やされた時間の合計値 cAdvisor
container_fs_io_time_weighted_seconds_total IOに費やされた加重秒数の合計値 cAdvisor
container_fs_limit_bytes このFileSystem上のコンテナが消費できるバイト数 cAdvisor
container_fs_read_seconds_total readに費やした秒数の合計値 cAdvisor
container_fs_reads_bytes_total readされたbyte数の合計値 cAdvisor
container_fs_reads_merged_total マージされたread数の合計値 cAdvisor
container_fs_reads_total 完了したread数の合計値 cAdvisor
container_fs_sector_reads_total 完了したセクターのread数の合計値 cAdvisor
container_fs_sector_writes_total 完了したセクターのwrite数の合計値 cAdvisor
container_fs_usage_bytes FileSystem上のコンテナによって消費されるバイト数 cAdvisor
container_fs_write_seconds_total writeに費やした秒数の合計値 cAdvisor
container_fs_writes_bytes_total writeされたbyte数の合計値 cAdvisor
container_fs_writes_merged_total マージされたwrite数の合計値 cAdvisor
container_fs_writes_total 完了したwrite数の合計値 cAdvisor
kubelet_volume_stats_available_bytes Volumeの空き容量(バイト) kubelet
kubelet_volume_stats_capacity_bytes Volumeの容量(バイト) kubelet
kubelet_volume_stats_used_bytes Volumeの使用済みバイト数 kubelet
kubelet_volume_stats_inodes Volumeのinode数 kubelet
kubelet_volume_stats_inodes_free Volumeの空きinode数 kubelet
kubelet_volume_stats_inodes_used Volumeの使用済みinode数 kubelet
storage_operation_duration_seconds_bucket ストレージ操作時間 kubelet
storage_operation_duration_seconds_count ストレージ操作時間の数 kubelet
storage_operation_duration_seconds_sum ストレージ操作時間の合計 kubelet
storage_operation_errors_total ストレージ操作のエラー回数 kubelet
storage_operation_status_count ストレージ操作のステータスの回数 kubelet
volume_manager_total_volumes Volume Managerのボリュームの数 kubelet
node_disk_io_time_seconds_total IOに費やされた時間の合計値 Node exporter
node_disk_io_time_weighted_seconds_total IOに費やされた加重秒数の合計値 Node exporter
node_disk_read_bytes_total readされたbyte数の合計値 Node exporter
node_disk_read_time_seconds_total readに費やした秒数の合計値 Node exporter
node_disk_reads_completed_total 正常に完了したreadの合計値 Node exporter
node_disk_reads_marged_total マージされたread数の合計値 Node exporter
node_disk_write_time_seconds_total writeに費やした秒数の合計値 Node exporter
node_disk_writes_completed_total 正常に完了したwrite数の合計値 Node exporter
node_disk_writes_merged_total マージされたwrite数の合計値 Node exporter
node_disk_written_bytes_total writeされたbyte数の合計値 Node exporter
node_filefd_allocated 割り当てられたファイルデスクリプタ数 Node exporter
node_filefd_maximum ファイルディスクリプタの統計: 最大数 Node exporter
node_filesystem_avail_bytes non-rootユーザが利用できるFileSystemの容量(バイト) Node exporter
node_filesystem_device_error 特定のデバイスの統計を取得中にエラーが発生したか否か Node exporter
node_filesystem_files FileSystemのファイルノードの合計 Node exporter
node_filesystem_files_free FileSystemの空きファイルノードの合計 Node exporter
node_filesystem_free_bytes FileSystemの空き容量(バイト) Node exporter
node_filesystem_readonly FileSystemのRead Onlyのステータス Node exporter
node_filesystem_size_bytes FileSystemの容量(バイト) Node exporter
node_nfs_packets_total プロトコル毎(TCP,UDP)のNFSのパケット数の合計値 Node exporter
node_nfs_requests_total 呼び出されたNFSプロシージャの合計値 Node exporter
node_nfs_rpc_authentication_refreshes_total NFSで実行されたRPC認証の更新数の合計値 Node exporter
node_nfs_rpc_retransmissions_total NFSで実行されたRPC送信の合計値 Node exporter
node_nfs_rpcs_total NFSで実行されたRPCの合計値 Node exporter

※ storage_operation_XXX にはリソースを問わずストレージ操作のものが含まれます。つまりConfigmapやSecretといったリソースをPodにマウントするケースも含まれます。

感想

cAdvisor, kubelet, Node exporterにて取得できるストレージ関連のメトリクスをまとめました。一覧表をみてわかるように同じ意味のメトリクスが多々あります。キャパシティの観点でみると、外部ストレージ上のFileSystem(e.g.ext4)がそのままNodeからPodまで多段にマウントされているだけで、容量が変わることはないと思います。一方、パフォーマンスの観点では、どのExporter/Serviceからメトリクスを取得しているかで差が出ることがあります。
Node単位でストレージの性能を監視しNodeの性能プランニングをしたいのか、Pod単位でストレージの性能を監視し、PodをどのNodeに配置するかも含めてプランニングしたいのか等々どのような目的で監視するかにより監視すべきメトリクスが変わってくるかと思います。適切なメトリクスを使って有益な監視を実現していきましょう。
なお、今回は外部ストレージのメトリクスは扱いませんでした。外部ストレージのメトリクスについては、各ストレージのドキュメントをご参照ください。

参考情報

ysakashita
サーバ/ストレージからVM/Containerまでのインフラの管理技術を研究開発しています.SNIA-J( http://www.snia-j.org ) でも活動中.博士(情報科学),情報処理学会会員.
zlab
技術で新しい世界へシフトする。
https://zlab.co.jp/
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