You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用CoreOS Kube Prometheus监控K8s v1.13.4持久化卷磁盘使用量

解决Kubernetes 1.13.4中用Kube Prometheus监控PV磁盘使用的问题

我完全懂你现在的困扰——K8s 1.12之后旧的kubelet_volume_stats_capacity_bytes指标被移除,现有的指标要么只显示申请量要么不够精准,要监控hostPath PV的实际使用情况确实得换个思路。下面是针对你的环境(CoreOS Kube Prometheus + K8s 1.13.4 + hostpath-provisioner)的具体解决方案:

1. 先确认kubelet是否正确采集了PV统计指标

K8s 1.12之后,官方把PV相关的统计指标迁移到了新命名下,但需要kubelet正确开启采集。你可以登录任意节点,访问kubelet的安全端口metrics端点(比如curl -k https://<节点IP>:10250/metrics),搜索以下指标:

  • kubelet_volume_stats_used_bytes:PV已用存储量
  • kubelet_volume_stats_capacity_bytes:PV总容量
  • kubelet_volume_stats_available_bytes:PV剩余可用容量

这些指标会带有persistentvolumeclaim(PVC名称)、namespace(PVC所属命名空间)和volume_name(PV名称)标签,用来关联到具体的PV/PVC。如果没找到这些指标,需要检查kubelet的启动参数:

  • 确保--enable-controller-attach-detach=true(K8s 1.13默认开启)
  • 确保--volume-stats-aggregator=true(该参数负责聚合PV统计数据,1.13默认开启,若被手动关闭需要重新开启)

2. 确保Prometheus正确抓取kubelet的metrics

CoreOS Kube Prometheus默认应该配置了kubelet的抓取任务,但需要确认是否抓取了安全端口的metrics(PV统计指标只在安全端口暴露)。检查Prometheus的配置中是否有类似以下的job:

- 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
  relabel_configs:
  - action: labelmap
    regex: __meta_kubernetes_node_label_(.+)
  - target_label: __address__
    replacement: kubernetes.default.svc:443
  - source_labels: [__meta_kubernetes_node_name]
    regex: (.+)
    target_label: __metrics_path__
    replacement: /api/v1/nodes/${1}/proxy/metrics

如果没有这个job,或者metrics路径不对,需要调整Kube Prometheus的ServiceMonitor配置,确保kubelet的安全端口metrics被正确抓取。

3. 构建精准的PromQL查询

有了正确的指标后,就可以构建查询来展示每个PV的使用情况:

查看每个PV的已用存储量

kubelet_volume_stats_used_bytes{job="kubelet"}

这个查询会返回所有PV的已用存储,通过volume_name标签可以直接对应到PV名称,persistentvolumeclaim标签对应关联的PVC。

计算PV的使用率

(kubelet_volume_stats_used_bytes{job="kubelet"} / kubelet_volume_stats_capacity_bytes{job="kubelet"}) * 100

这个查询会输出每个PV的使用率百分比,方便在仪表盘里设置告警或可视化。

关联PVC和PV的详细信息

如果需要把PV和PVC的元数据(比如命名空间、PVC名称)结合起来,可以用kube_persistentvolumeclaim_info指标做关联:

kubelet_volume_stats_used_bytes
* on(namespace, persistentvolumeclaim) group_left(persistentvolume)
kube_persistentvolumeclaim_info

这样查询结果会同时包含PV名称、PVC名称和命名空间,更便于定位问题。

4. 为什么container_fs_usage_bytes不够用?

container_fs_usage_bytes统计的是容器根文件系统或挂载的所有文件系统的使用量,但它无法精准关联到单个PV:

  • 一个PV可能被多个容器挂载,该指标会把所有容器的使用量混在一起
  • 容器的根文件系统和PV是分开的,无法区分哪些是PV的使用量
  • 没有直接关联到PV/PVC的标签,无法精准定位到某个存储卷

而kubelet提供的kubelet_volume_stats_*指标是专门针对PV的统计,直接关联到PV/PVC,数据更精准。

5. 配置Grafana仪表盘

在你的Kube Prometheus Grafana里新建面板,使用上面的PromQL查询,按persistentvolume或persistentvolumeclaim分组,选择合适的图表类型(比如条形图展示使用率,数值面板展示已用/剩余容量),就能实现PV磁盘使用情况的监控。

内容的提问来源于stack exchange,提问作者Cemal Unal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:37:47