k8s-pvc-pending

Kubernetes PVC 一直 Pending 的定位与修复

现象

kubectl get pvc 显示 Pending,依赖它的 Pod 无法启动或一直 ContainerCreating。常见于没有可用 StorageClass、供应器故障或容量/区域不匹配。

快速定位

kubectl get pvc -n <ns>
kubectl describe pvc <pvc> -n <ns>
kubectl get storageclass
kubectl get pv
kubectl get events -n <ns> --sort-by=.lastTimestamp | tail -30
kubectl logs -n <storage-ns> <provisioner-pod> --tail=100

常见根因

  1. 没有默认 StorageClass,PVC 也没指定 storageClassName。
  2. 动态供应器(CSI)未运行或权限不足。
  3. 请求容量、access mode 或卷类型不被支持。
  4. Pod 和 PV 不在同一可用区,或节点亲和性冲突。
  5. 存储配额、云盘配额或账户余额不足。
  6. WaitForFirstConsumer 模式下没有 Pod 使用 PVC。

修复

相关命令

读完自测

合上页面,先回答,再展开对照。

  1. PVC 一直 Pending 时最先看什么?
  2. 没有默认 StorageClass 会怎样,如何修复?
  3. WaitForFirstConsumer 模式下 PVC 为什么可能一直 Pending?
答案
  1. 先看 kubectl describe pvc 的 Events,通常会写明供应失败原因,再查 StorageClass、PV 和供应器日志。
  2. PVC 未指定 storageClassName 且没有默认 StorageClass 时无法动态供应,需创建或显式指定可用的 StorageClass。
  3. 该模式要等 Pod 使用 PVC 才触发供应,需确认有 Pod 引用它,并检查可用区、节点亲和性和配额。