如何监控 kubernetes 持久卷的磁盘使用情况?

How to monitor disk usage of kubernetes persistent volumes?

我有 container_fs_usage_bytes 和 prometheus 来监控容器根 fs,但 cAdvisor 中似乎没有其他卷的指标。

卷指标可通过 kubelet 摘要 API (/stats/summary) 获得。但是,每个卷插件都必须实现自己的指标。从Kubernetes 1.7开始,目前实现了metrics的volume plugins包括:emptydir、secrets、gce pd、aws ebs、azure file、flocker、portworx

我确认 Kubernetes 1.8 公开了 prometheus 的指标。

  • kubelet_volume_stats_available_bytes
  • kubelet_volume_stats_capacity_bytes
  • kubelet_volume_stats_inodes
  • kubelet_volume_stats_inodes_free
  • kubelet_volume_stats_inodes_used
  • kubelet_volume_stats_used_bytes

必须使用以下指标来监控 Kubernetes 中的持久卷统计信息(PVC 名称在 persistentvolumeclaim 标签中导出):

  • kubelet_volume_stats_capacity_bytes - per-PVC 字节容量。
  • kubelet_volume_stats_used_bytes - per-PVC space 字节使用量。
  • kubelet_volume_stats_available_bytes - per-PVC 免费 space 字节。

以下 PromQL 查询可用于确定 per-pod PVC 磁盘 space 使用字节数:

sum(kubelet_volume_stats_used_bytes) by (namespace,persistentvolumeclaim)
  * on(namespace,persistentvolumeclaim) group_left(pod)
kube_pod_spec_volumes_persistentvolumeclaims_info

以下查询可用于确定每个 pod 的可用 PVC 磁盘 space(以字节为单位):

sum(kubelet_volume_stats_available_bytes) by (namespace,persistentvolumeclaim)
  * on(namespace,persistentvolumeclaim) group_left(pod)
kube_pod_spec_volumes_persistentvolumeclaims_info