如何获取Kubernetes本地持久化卷(Local PV)的监控指标?
监控Kubernetes本地持久化卷的实际使用量
要监控本地PV的实际磁盘使用量,仅靠默认的kube_persistentvolumeclaim_resource_requests_storage_bytes(仅记录申请容量)是不够的,你可以通过以下几种方式实现:
方法1:利用Node Exporter采集挂载点指标
Node Exporter默认会采集节点上所有文件系统的磁盘指标,只要本地PV对应的挂载路径被正确采集,就能直接获取使用量数据:
- 确认Node Exporter已部署在集群所有节点上,若启动参数里的
--collector.filesystem.ignored-mount-points排除了本地PV的挂载目录,需调整参数移除对应规则。 - 定位本地PV的节点挂载路径:执行
kubectl describe pv <你的PV名称>,在Spec字段下查看Local或HostPath对应的路径,同时通过NodeAffinity确认绑定的目标节点。 - 在Prometheus中编写查询获取使用量:
- 已使用空间:
node_filesystem_size_bytes{mountpoint="/path/to/your/local/pv", instance="目标节点IP"} - node_filesystem_avail_bytes{mountpoint="/path/to/your/local/pv", instance="目标节点IP"} - 使用率:
100 - (node_filesystem_avail_bytes{mountpoint="/path/to/your/local/pv", instance="目标节点IP"} / node_filesystem_size_bytes{mountpoint="/path/to/your/local/pv", instance="目标节点IP"} * 100)
- 已使用空间:
方法2:通过Node Exporter的Textfile Collector自定义PV关联指标
如果需要直接将指标与PV名称绑定(方便和PVC联动查询),可以用自定义脚本采集后,通过Node Exporter的textfile功能暴露指标:
- 在每个节点上创建采集脚本,示例如下:
#!/bin/bash TEXTFILE_DIR="/var/lib/node_exporter/textfile_collector" PV_CONFIGS="/etc/local-pv-mappings.conf" # 配置文件,每行格式:PV_NAME 挂载路径 mkdir -p $TEXTFILE_DIR rm -f $TEXTFILE_DIR/local_pv_metrics.prom while read -r pv_name path; do if [ -d "$path" ]; then size=$(df -B1 "$path" | awk 'NR==2 {print $2}') used=$(df -B1 "$path" | awk 'NR==2 {print $3}') echo "local_pv_size_bytes{pv_name=\"$pv_name\",path=\"$path\"} $size" >> $TEXTFILE_DIR/local_pv_metrics.prom echo "local_pv_used_bytes{pv_name=\"$pv_name\",path=\"$path\"} $used" >> $TEXTFILE_DIR/local_pv_metrics.prom fi done < $PV_CONFIGS - 修改Node Exporter启动参数,添加
--collector.textfile.directory=/var/lib/node_exporter/textfile_collector,让它读取该目录下的指标文件。 - 给脚本添加执行权限,并用
cron设置定时任务定期执行,确保指标实时更新。 - 之后在Prometheus中可直接通过
local_pv_used_bytes{pv_name="你的PV名称"}获取对应PV的使用量。
注意事项
- 本地PV是节点级资源,查询指标时必须结合
instance标签(对应绑定节点),避免跨节点查询错误。 - 若使用Prometheus Operator管理采集,需确保Node Exporter的ServiceMonitor配置包含相关指标的采集规则。
内容的提问来源于stack exchange,提问作者MelanieOL
相关产品推荐
相关产品推荐

