要检查 kubernetes 中 pv 的实际占用空间,需通过监控指标、节点侧验证和容器内检查三类方式交叉确认:一是查询 kubelet 暴露的 prometheus 指标(如 kubelet_volume_stats_used_bytes);二是登录 pod 执行 df -h 查看挂载点真实使用情况;三是登录宿主机对 hostpath/nfs 等类型直接运行 du 和 df;aks 用户还可利用 container insights 工作簿获取聚合指标。

要检查 Kubernetes 中持久化卷(PV)的实际占用空间,不能只看 PVC 声明的容量,因为已用空间取决于底层存储的真实使用情况。K8s 本身不直接暴露文件系统级的 df 结果,但可通过监控指标、节点侧验证和容器内检查三类方式交叉确认。
通过 kubelet 暴露的监控指标查已用/可用字节
Kubelet 会定期采集挂载卷的使用数据,并以 Prometheus 指标形式暴露:
- kubelet_volume_stats_used_bytes:PVC 对应卷已使用的字节数(含缓存、元数据等)
- kubelet_volume_stats_available_bytes:当前剩余可用字节数
-
kubelet_volume_stats_capacity_bytes:卷总容量(即 PVC 的
resources.requests.storage)
在 Prometheus 或 Grafana 中直接查询即可,例如:
kubelet_volume_stats_used_bytes{persistentvolumeclaim="mysql-pv-claim", namespace="default"}注意:该指标仅对 hostPath、NFS、RBD、CSI 驱动等支持 volume stats 的类型有效;azureblob-* 类型的 PV 不支持(受 cAdvisor 限制)。
登录 Pod 查看挂载点实际使用(最直观)
如果 Pod 正常运行且有 shell 权限,可直接进入容器执行 df -h:
- 先确认 PVC 挂载路径:
kubectl get pod <pod-name> -o yaml | grep -A5 volumes</pod-name> - 进入容器:
kubectl exec -it <pod-name> -- sh</pod-name> - 执行:
df -h /mnt/data(假设挂载到/mnt/data)
输出中 Use% 和 Available 即为当前文件系统真实状态,不受 PVC 声明值干扰。
在宿主机上验证底层存储(适用于 hostPath/NFS 等)
若 PV 类型是 hostPath 或本地 NFS 导出目录,可在对应 Node 上检查物理路径:
- 查 Pod 调度节点:
kubectl get pod <pod-name> -o wide</pod-name> - 登录该 Node,定位挂载源(如 hostPath.path 或 NFS server export path)
- 执行:
du -sh /path/to/pv/data/+df -h /path/to/pv/data
这对排查“PVC 显示已满但 df 还有空间”或“日志/临时文件未清理”类问题非常关键。
结合容器洞察(Azure AKS 场景)
在启用 Container Insights 的 AKS 集群中,可直接使用预置工作簿:
- 打开 AKS → “见解” → “工作簿” → 选择“永久性卷详细信息”
- 查看
pvUsedBytes指标图表,它已按pvcName、podName等维度聚合 - 数据来自
InsightsMetrics表,采集间隔为 60 秒,带capacityBytes标记便于对比
该方式无需手动部署 Prometheus,适合运维平台化管理场景。











