如何查询K8s集群中Pod关联PVC的已用及空闲容量占比
Kubernetes查询PVC已用/空闲容量占比的可行方法
以下方案按实现复杂度从低到高排列:
方案1:直接进入绑定PVC的Pod内部查询
这是最准确、无需额外组件的方案,适合单PVC临时查询:
- 第一步:确认PVC绑定的Pod,以及PVC在Pod内的挂载路径,执行命令:
kubectl describe pod <pod-name> -n <namespace> | grep -A5 Mounts
返回结果中标记了对应PVC的挂载路径,例如/data。 - 第二步:进入Pod执行磁盘查询命令,即可看到该PVC的已用、可用、使用率:
kubectl exec -it <pod-name> -n <namespace> -- df -h <挂载路径>
注意:如果多个Pod共享挂载同一个PVC,任意一个Pod内查询到的用量都是整个PVC的总用量
方案2:通过kubectl直接查询(需集群支持CSI容量查询特性)
如果你的Kubernetes集群版本≥1.21,且启用了CSIVolumeCapacity feature gate,同时所用存储的CSI驱动支持容量查询,可以直接通过kubectl命令批量获取PVC使用率,无需进入Pod:
- 执行命令查询指定Namespace下所有PVC的容量信息:
kubectl get pvc -n <namespace> -o custom-columns="PVC名称:.metadata.name,总容量:.status.capacity.storage,已用容量:.status.capacity.used,可用容量:.status.capacity.available,使用率:.status.capacity.usedPercentage"
方案3:通过监控指标批量查询(适合长期监控/批量查询场景)
如果集群部署了Prometheus、kube-state-metrics、kubelet内置的volume metrics采集,可直接通过PromQL计算PVC使用率:
- 单PVC使用率查询PromQL:
100 * kubelet_volume_stats_used_bytes{namespace="<你的Namespace名称>",persistentvolumeclaim="<PVC名称>"} / kubelet_volume_stats_capacity_bytes{namespace="<你的Namespace名称>",persistentvolumeclaim="<PVC名称>"} - 批量查询指定Namespace下所有PVC的使用率PromQL:
100 * kubelet_volume_stats_used_bytes{namespace="<你的Namespace名称>"} / kubelet_volume_stats_capacity_bytes{namespace="<你的Namespace名称>"}
注意:如果存储采用精简制备(Thin Provisioning),指标返回的总容量可能包含后端存储的超售容量,实际可用容量以存储后端实际剩余为准
内容的提问来源于stack exchange,提问作者Giuseppe Percuoco
相关产品推荐
相关产品推荐

