如何监控 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

kube-prometheus-stack 默认已带此 job。

2. 计算使用率

(kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes) * 100

persistentvolumeclaimnamespace 标签分组,直接看出哪个 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 的文件系统指标兜底;
  • 指标标签里带 persistentvolumeclaim,告警通知中直接引用即可定位。

观测云对照

观测云 DataKit 的 K8s 采集自动上报 PV/PVC 用量指标,工作空间里内置容器云监控看板与"存储用量"监控器模板,无需自己抓 kubelet、写 PromQL。

常见问题(FAQ)

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

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

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台