PV 排错

本章介绍持久化存储异常(PV、PVC、StorageClass等)的排错方法。

一般来说,无论 PV 处于什么异常状态,都可以执行 kubectl describe pv/pvc <pod-name> 命令来查看当前 PV 的事件。这些事件通常都会有助于排查 PV 或 PVC 发生的问题。

kubectl get pv
kubectl get pvc
kubectl get sc

kubectl describe pv <pv-name>
kubectl describe pvc <pvc-name>
kubectl describe sc <storage-class-name>

存储资源泄漏问题(v1.33+)

从 Kubernetes v1.33 开始,系统提供了防止 PersistentVolume 资源泄漏的保护机制。以下是相关的排错方法:

检查 PV Finalizer

如果 PV 删除时卡在 Terminating 状态,检查是否存在防泄漏 finalizer:

kubectl get pv <pv-name> -o yaml | grep finalizers -A 5

正常的 CSI 动态 PV 应该包含:

finalizers:
- kubernetes.io/pv-protection
- external-provisioner.volume.kubernetes.io/finalizer

验证 CSI External-Provisioner 版本

确保 CSI external-provisioner 版本为 v5.0.1 或更高:

kubectl get pods -n kube-system | grep provisioner
kubectl describe pod <csi-provisioner-pod> -n kube-system | grep Image

排查存储后端连接问题

如果 PV 删除挂起,可能是存储后端无法访问:

# 检查 CSI 驱动程序日志
kubectl logs <csi-provisioner-pod> -n kube-system

# 检查存储后端状态
kubectl get volumeattachments
kubectl describe volumeattachment <attachment-name>

强制清理泄漏的 PV

注意:仅在确认存储后端资源已手动清理时使用

# 移除防泄漏 finalizer
kubectl patch pv <pv-name> -p '{"metadata":{"finalizers":null}}'

# 或者编辑 PV 移除特定 finalizer
kubectl edit pv <pv-name>

监控存储资源使用

定期检查是否存在孤立的存储资源:

# 列出所有 PV 及其状态
kubectl get pv -o wide

# 检查未绑定的 PV
kubectl get pv | grep Available

# 查看存储类配置
kubectl get storageclass -o yaml

最后更新于