首先
在使用Kubernetes时,许多人可能会使用Prometheus等工具收集各种指标,并在Grafana等工具中将其可视化,以监视性能和容量。
本文档将介绍在使用Kubernetes的PV(持久卷)时可以用于监视存储相关指标的方法。
※ 这是基于 Kubernetes 1.17.3 和 Node exporter 0.18.1 版本的度量数据。
PV(光伏)安装和监测范围
以下的示例解释了PV是如何挂载的。
下图描述了外部存储提供的iSCSI卷是如何挂载到Pod容器的目录中的,以及每个设备文件和目录的挂载过程。
首先,外部存储提供的Volume会映射到Node上的设备(在这个例子中是/dev/sdb),然后会被挂载到kubelet管理的目录(在/var/lib/kubelet/pods下)中。
然后,它会被kubelet映射到Pod内部的容器,并挂载到目录(在这个例子中是/mnt/data)中。
理解它是如何挂载的对于PV的监视是非常重要的。
在PV监视中,理解用于收集指标的Exporter/Service正在监视哪个设备/目录(和文件系统)也是很重要的。
例如,用于监视容器的cAdvisor将监视上述图示中Pod内的设备(/dev/sda)以及其上创建的文件系统(在此例中是/mnt/data作为文件系统的根)。kubelet将监视kubelet了解的目录(在/var/lib/kubelet/pods下)。用于监视节点资源的Node exporter将监视所有可见的设备/目录作为节点资源的范围。
存储相关指标列表
以下是与存储相关的指标。
メトリクス説明Exporter/Servicecontainer_file_descriptorsオープンしているファイルディスクリプタ数cAdvisorcontainer_fs_inodes_freeフリーのinode数cAdvisorcontainer_fs_inodes_totalinodeのトータル数cAdvisorcontainer_fs_io_current実行中のIO数cadvisorcontainer_fs_io_time_seconds_totalIOに費やされた時間の合計値cAdvisorcontainer_fs_io_time_weighted_seconds_totalIOに費やされた加重秒数の合計値cAdvisorcontainer_fs_limit_bytesこのFileSystem上のコンテナが消費できるバイト数cAdvisorcontainer_fs_read_seconds_totalreadに費やした秒数の合計値cAdvisorcontainer_fs_reads_bytes_totalreadされたbyte数の合計値cAdvisorcontainer_fs_reads_merged_totalマージされたread数の合計値cAdvisorcontainer_fs_reads_total完了したread数の合計値cAdvisorcontainer_fs_sector_reads_total完了したセクターのread数の合計値cAdvisorcontainer_fs_sector_writes_total完了したセクターのwrite数の合計値cAdvisorcontainer_fs_usage_bytesFileSystem上のコンテナによって消費されるバイト数cAdvisorcontainer_fs_write_seconds_totalwriteに費やした秒数の合計値cAdvisorcontainer_fs_writes_bytes_totalwriteされたbyte数の合計値cAdvisorcontainer_fs_writes_merged_totalマージされたwrite数の合計値cAdvisorcontainer_fs_writes_total完了したwrite数の合計値cAdvisorkubelet_volume_stats_available_bytesVolumeの空き容量(バイト)kubeletkubelet_volume_stats_capacity_bytesVolumeの容量(バイト)kubeletkubelet_volume_stats_used_bytesVolumeの使用済みバイト数kubeletkubelet_volume_stats_inodesVolumeのinode数kubeletkubelet_volume_stats_inodes_freeVolumeの空きinode数kubeletkubelet_volume_stats_inodes_usedVolumeの使用済みinode数kubeletstorage_operation_duration_seconds_bucketストレージ操作時間kubeletstorage_operation_duration_seconds_countストレージ操作時間の数kubeletstorage_operation_duration_seconds_sumストレージ操作時間の合計kubeletstorage_operation_errors_totalストレージ操作のエラー回数kubeletstorage_operation_status_countストレージ操作のステータスの回数kubeletvolume_manager_total_volumesVolume Managerのボリュームの数kubeletnode_disk_io_time_seconds_totalIOに費やされた時間の合計値Node exporternode_disk_io_time_weighted_seconds_totalIOに費やされた加重秒数の合計値Node exporternode_disk_read_bytes_totalreadされたbyte数の合計値Node exporternode_disk_read_time_seconds_totalreadに費やした秒数の合計値Node exporternode_disk_reads_completed_total正常に完了したreadの合計値Node exporternode_disk_reads_marged_totalマージされたread数の合計値Node exporternode_disk_write_time_seconds_totalwriteに費やした秒数の合計値Node exporternode_disk_writes_completed_total正常に完了したwrite数の合計値Node exporternode_disk_writes_merged_totalマージされたwrite数の合計値Node exporternode_disk_written_bytes_totalwriteされたbyte数の合計値Node exporternode_filefd_allocated割り当てられたファイルデスクリプタ数Node exporternode_filefd_maximumファイルディスクリプタの統計: 最大数Node exporternode_filesystem_avail_bytesnon-rootユーザが利用できるFileSystemの容量(バイト)Node exporternode_filesystem_device_error特定のデバイスの統計を取得中にエラーが発生したか否かNode exporternode_filesystem_filesFileSystemのファイルノードの合計Node exporternode_filesystem_files_freeFileSystemの空きファイルノードの合計Node exporternode_filesystem_free_bytesFileSystemの空き容量(バイト)Node exporternode_filesystem_readonlyFileSystemのRead OnlyのステータスNode exporternode_filesystem_size_bytesFileSystemの容量(バイト)Node exporternode_nfs_packets_totalプロトコル毎(TCP,UDP)のNFSのパケット数の合計値Node exporternode_nfs_requests_total呼び出されたNFSプロシージャの合計値Node exporternode_nfs_rpc_authentication_refreshes_totalNFSで実行されたRPC認証の更新数の合計値Node exporternode_nfs_rpc_retransmissions_totalNFSで実行されたRPC送信の合計値Node exporternode_nfs_rpcs_totalNFSで実行されたRPCの合計値Node exporter
※ storage_operation_XXX 包括了所有与存储操作相关的资源,无论资源类型如 Configmap 或 Secret ,都包括将其挂载到 Pod 中的情况。
印象或感受
我整理了通过cAdvisor、kubelet和Node exporter获取的与存储相关的指标。从列表中可以看出,有许多相同意义的指标。从容量的角度来看,外部存储上的文件系统(例如ext4)只是从节点直接挂载到Pod,容量不会改变。然而,从性能的角度来看,根据从哪个Exporter/Service获取指标,可能会有差异。
根据需要监控节点的存储性能来规划节点性能,或者根据需要监控Pod的存储性能以及将Pod部署在哪个节点上来进行规划,根据监控的目的不同,应该监控的指标也会有所变化。让我们通过使用适当的指标来实现有益的监控。
此外,本次没有涉及外部存储的指标。有关外部存储的指标,请参考各存储的文档。
请提供资料参考
-
https://github.com/google/cadvisor/blob/master/docs/storage/prometheus.md
-
https://github.com/prometheus/node_exporter/
https://www.scsk.jp/sp/sysdig/blog/sysdig_monitor/kubelet.html