Kubernetes PVC Stuck in Pending — Every Cause and Fix (2026)
Your PersistentVolumeClaim is stuck in Pending and your pod won't start. Here's every reason this happens and exactly how to fix it.
Your pod won't start. You run kubectl get pvc and see Pending — no volume, no pod. Here's every reason a PVC gets stuck in Pending and exactly how to fix each one.
Quick Diagnosis Checklist
# Check PVC status
kubectl get pvc -n <namespace>
# Describe the PVC — the Events section is the key
kubectl describe pvc <pvc-name> -n <namespace>
# Check available StorageClasses
kubectl get storageclass
# Check existing PVs
kubectl get pvThe Events section in kubectl describe pvc will almost always tell you the exact cause.
Cause 1: No Default StorageClass
Symptom:
Events:
Warning ProvisioningFailed no persistent volumes available for this claim and no storage class is set
Why: Your PVC has no storageClassName and no default StorageClass exists in the cluster.
Fix — check default StorageClass:
kubectl get storageclass
# Look for (default) annotationFix — set a default StorageClass:
kubectl patch storageclass gp2 -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'Fix — specify StorageClass in PVC:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
storageClassName: gp2 # ← explicit
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10GiCause 2: StorageClass Provisioner Not Installed
Symptom:
Events:
Warning ProvisioningFailed storageclass.storage.k8s.io "gp3-csi" not found
or provisioner just never responds.
Why: The CSI driver for your StorageClass isn't installed or its pods are crashing.
Fix — check EBS CSI driver on EKS:
kubectl get pods -n kube-system | grep ebs
# Should see: ebs-csi-controller, ebs-csi-node
# If missing, install:
eksctl create addon --name aws-ebs-csi-driver --cluster <cluster-name>Fix — check generic CSI driver:
kubectl get csidrivers
kubectl get pods -n kube-system | grep csiCause 3: No Matching PV (Static Provisioning)
Symptom:
Events:
Normal FailedBinding no persistent volumes available for this claim and no storage class is set
Why: You're using static provisioning (pre-created PVs) but no PV matches the PVC's requirements.
PV matching rules:
accessModesmust matchstoragesize: PV must be >= PVC requeststorageClassNamemust match exactlyselectorlabels must match (if set)
Fix — check PV vs PVC:
kubectl get pv
kubectl describe pv <pv-name>
kubectl describe pvc <pvc-name>Common mismatch — PVC wants ReadWriteMany but PV only supports ReadWriteOnce:
# PVC
accessModes:
- ReadWriteMany
# PV (EBS only supports RWO)
accessModes:
- ReadWriteOnce # ← mismatch!Fix: Use EFS (AWS) or NFS for ReadWriteMany, not EBS.
Cause 4: Wrong or Missing storageClassName
Symptom: PVC stuck Pending with no events at all.
Why: storageClassName typo — Kubernetes silently waits for a PV with that exact class name.
Fix:
# List real StorageClass names
kubectl get storageclass
# Fix PVC (delete and recreate — storageClassName is immutable)
kubectl delete pvc <pvc-name>
# Edit YAML to fix storageClassName
kubectl apply -f pvc.yamlCause 5: VolumeBindingMode is WaitForFirstConsumer
Symptom: PVC stays Pending until a pod actually schedules.
Why: StorageClass has volumeBindingMode: WaitForFirstConsumer. This is intentional — the volume is provisioned in the same AZ as the pod.
Check:
kubectl describe storageclass gp3
# Look for: VolumeBindingMode: WaitForFirstConsumerThis is NOT a bug. The PVC will become Bound once a pod using it gets scheduled.
If pod is also Pending (chicken-and-egg), check pod events:
kubectl describe pod <pod-name> -n <namespace>Cause 6: Insufficient Capacity in the Cloud Provider
Symptom:
Events:
Warning ProvisioningFailed failed to provision volume: InvalidParameterValue:
The requested AZ us-east-1a does not have enough capacity
Fix — try different AZ:
# Use topology constraints in StorageClass
allowedTopologies:
- matchLabelExpressions:
- key: topology.kubernetes.io/zone
values:
- us-east-1b
- us-east-1cOr delete and retry — capacity is usually restored quickly.
Cause 7: IAM Permissions Missing (EKS + EBS CSI)
Symptom:
Warning ProvisioningFailed failed to provision volume: UnauthorizedOperation:
You are not authorized to perform this operation.
Fix — EKS: attach IAM policy to node role:
# Check EBS CSI driver addon
eksctl get addon --cluster <cluster> --name aws-ebs-csi-driver
# Ensure the service account has the right role
kubectl describe sa ebs-csi-controller-sa -n kube-systemMinimum IAM permissions needed:
{
"Action": [
"ec2:CreateVolume",
"ec2:DeleteVolume",
"ec2:AttachVolume",
"ec2:DetachVolume",
"ec2:DescribeVolumes",
"ec2:DescribeInstances"
]
}Cause 8: PVC Requested Size Too Small
Some StorageClasses have a minimum size. EBS gp3, for example, minimum is 1 GiB but some enterprise storage systems have higher minimums.
Fix: Increase storage request:
resources:
requests:
storage: 5Gi # bump it upCause 9: ResourceQuota Blocking the PVC
Symptom:
Events:
Warning ProvisioningFailed exceeded quota: requests.storage=50Gi
Fix:
kubectl describe resourcequota -n <namespace>
# Check storage limits
# If legitimate, increase quota:
kubectl edit resourcequota <quota-name> -n <namespace>Full Debug Workflow
# Step 1: PVC status
kubectl get pvc -n <namespace>
# Step 2: Describe PVC (read Events section carefully)
kubectl describe pvc <pvc-name> -n <namespace>
# Step 3: Check StorageClass
kubectl get storageclass
kubectl describe storageclass <classname>
# Step 4: Check CSI driver pods
kubectl get pods -n kube-system | grep -E "csi|ebs|efs"
# Step 5: Check provisioner logs
kubectl logs -n kube-system -l app=ebs-csi-controller -c csi-provisioner --tail=50Quick Reference Table
| Event Message | Cause | Fix |
|---|---|---|
no storage class is set | No default StorageClass | Set default or specify storageClassName |
provisioner not found | CSI driver missing | Install CSI addon |
no persistent volumes available | No matching PV | Create PV or check static provisioning |
UnauthorizedOperation | IAM missing | Attach EBS CSI IAM policy |
exceeded quota | ResourceQuota | Increase quota |
| No events, stays Pending | Wrong storageClassName | Check for typo |
Related Tools
- DigitalOcean Managed Kubernetes — CSI volumes work out of the box, no IAM setup needed. $200 free credit
- Linux Foundation Kubernetes Course (LFS258) — covers storage in depth
PVC issues are almost always one of these 9 causes. The kubectl describe pvc Events section will point you to the exact one.
Stay ahead of the curve
Get the latest DevOps, Kubernetes, AWS, and AI/ML guides delivered straight to your inbox. No spam — just practical engineering content.
Related Articles
AWS EKS Pods Stuck in Pending State: Causes and Fixes
Pods stuck in Pending on EKS are caused by a handful of known issues — insufficient node capacity, taint mismatches, PVC problems, and more. Here's how to diagnose and fix each one.
cert-manager Certificate Not Ready: Causes and Fixes
cert-manager Certificate stuck in a non-Ready state is a common Kubernetes TLS issue. This guide covers every root cause — DNS challenges, RBAC, rate limits, and issuer problems — with step-by-step fixes.
CI/CD Pipeline Is Broken: How to Debug and Fix GitHub Actions, Jenkins & ArgoCD Failures (2026)
Your CI/CD pipeline failed and you don't know why. This complete debugging guide covers GitHub Actions, Jenkins, and ArgoCD failures with real error messages and step-by-step fixes.