存储排障
有状态应用的存储问题往往更复杂且风险更高。
PVC Pending
现象: PVC 处于 Pending 状态,Pod 无法启动。
常见原因
- StorageClass 不存在
- 存储后端(CSI)不可用
- 存储配额不足
- 动态供给场景下无匹配 PV(静态供给)
- accessModes 不匹配
排障步骤
# 查看 PVC 事件(直接揭示原因)
kubectl describe pvc <pvc-name> -n <namespace>
# 检查 StorageClass
kubectl get storageclass
# 检查 CSI 驱动
kubectl get pods -n kube-system | grep -E "csi|storage"
kubectl get csidriver
# 检查 accessModes
kubectl get pvc <name> -n <ns> -o jsonpath='{.spec.accessModes}'
修复方案
- StorageClass 不存在: 创建 StorageClass 或设置默认
- 安装 CSI 驱动: 检查云厂商 CSI 插件
- WaitForFirstConsumer: 需要调度 Pod 触发绑定
- accessModes 不匹配: ReadWriteOnce / ReadOnlyMany / ReadWriteMany
挂载失败
现象: Pod 处于 ContainerCreating,describe 显示卷挂载失败。
排障
# 在节点上检查
mount | grep pvc
journalctl -u kubelet --no-pager | grep -E "MountVolume|FailedMount" | tail -50
# 检查文件系统
lsblk
fdisk -l
df -h
# 检查 CSI 日志
kubectl logs -n kube-system <csi-node-pod-name> --tail=100
修复
- 存储后端健康检查
- 重新格式化存储卷(数据会丢失,谨慎)
- 检查 CSI 插件状态
关键注意事项
- 强制删除 Terminating Pod 前 必须确认数据已备份
- 对于有状态应用,优先调查挂载问题而非直接强制删除
- 建议 limits.memory 设为 requests.memory 的 1.5-2 倍(MySQL/Java 等)
关联页面
| 页面 | 关联点 |
|---|---|
| k8s-persistent-storage-guide | K8s 持久化存储:PV/PVC/StorageClass 生产实战(存储排障的体系基础) |
| pod-troubleshooting | Pod 排障:CrashLoopBackOff/OOM/探针/8 步排查法(存储挂载失败导致的 Pod 异常) |
| k8s-pod-pending-troubleshooting-guide | Pod Pending 排障指南 — 7 个排查方向(资源不足/污点/亲和性/存储/配额/选择器/端 |
| linux-nfs-mount-parameters-guide | NFS 挂载参数全解析(PVC 挂载 NFS 失败的参数排查) |