PVC waiting for storage class to provision a volume
Production Risk
Pods referencing the PVC cannot start; stateful workloads are unavailable.
A PersistentVolumeClaim in Pending state means no PersistentVolume has been bound to it yet. With dynamic provisioning, the StorageClass provisioner should create a PV automatically; if the PVC stays Pending, provisioning has failed or the StorageClass is misconfigured. Without dynamic provisioning, no matching static PV exists.
- 1StorageClass provisioner pod is not running or has errors
- 2Cloud provider storage quota exceeded (e.g., AWS EBS volume limit)
- 3Requested storage size exceeds what the provisioner can allocate
- 4No static PV with matching storageClassName, access modes, and capacity exists
- 5volumeBindingMode is WaitForFirstConsumer — PVC binds only when a pod is scheduled
PVC remains in Pending state; pods that reference it are stuck in ContainerCreating.
kubectl get pvc # NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE # my-pvc Pending standard 5m kubectl describe pvc my-pvc | grep -A 10 "Events:"
expected output
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE my-pvc Pending standard 5m
Fix 1
Check PVC events for provisioning failure reason
WHEN PVC is Pending with dynamic provisioning
kubectl describe pvc my-pvc kubectl get events --field-selector involvedObject.name=my-pvc
Why this works
Events from the provisioner explain why volume creation failed.
Fix 2
Verify the StorageClass and provisioner are healthy
WHEN Dynamic provisioning is expected
kubectl get storageclass kubectl get pods -n kube-system | grep -E "csi|provisioner|storage"
Why this works
The provisioner pod must be Running to respond to PVC creation requests.
Kubernetes Documentation
Content generated with AI assistance and reviewed for accuracy. Found an error? hello@errcodes.dev