如何监控 Kubernetes 持久卷(PV)的磁盘用量?

K8s 不直接暴露 PV 用量,但 kubelet 提供 kubelet_volume_stats_used_bytes / capacity_bytes 指标,Prometheus 抓取 kubelet 后即可计算使用率并告警。本文给出配置、PromQL 与告警示例。

最佳实践
如何监控 Kubernetes 持久卷(PV)的磁盘用量?封面

抓取 kubelet 的指标即可获得持久卷用量:kubelet_volume_stats_used_bytes(已用)与 kubelet_volume_stats_capacity_bytes(容量),两者相除就是使用率——再按容量风险设置告警阈值(下文以 85% 为例)。

1. 抓取 kubelet

scrape_configs:
  - job_name: 'kubelet'
    scheme: https
    tls_config:
      ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    kubernetes_sd_configs:
      - role: node

抓取还需允许访问 node/kubelet 指标的 RBAC、网络和可信 TLS 配置;API server 的 CA 不一定能验证 kubelet serving 证书,应核对实际签发链和地址。kube-prometheus-stack 常可通过配置启用 kubelet 抓取,具体以 chart 版本与 values 为准。

2. 计算使用率

(kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes) * 100

按 persistentvolumeclaim 与 namespace 定位 PVC;共享卷或重复抓取可能产生多个节点视角,不能简单相加当作新增容量,需按存储语义选择去重/聚合。

3. 告警规则

- alert: PVDiskAlmostFull
  expr: (kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes) > 0.85
  for: 10m
  annotations:
    summary: "PVC {{ $labels.persistentvolumeclaim }} 用量超过 85%"

注意事项

  • 该指标依赖 kubelet 统计,某些存储类型(如部分 NFS、hostPath)不上报——hostPath 可参考 node-exporter 所在挂载点的文件系统指标,但这不是该目录或 PVC 的独立使用量;
  • 指标标签里带 persistentvolumeclaim,告警通知中直接引用即可定位。

常见问题(FAQ)

Q:指标查不到任何数据? 确认 CSI 驱动支持卷统计(部分老旧驱动不支持);在具备 nodes/proxy 权限时,用 kubectl get --raw /api/v1/nodes/<node>/proxy/stats/summary 直接验证 kubelet 是否有数据。

Q:能看 inode 用量吗? 可以,kubelet_volume_stats_inodes_used / kubelet_volume_stats_inodes——小文件多的场景 inode 比容量先爆。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台