Introduction

A PersistentVolumeClaim stays Pending when Kubernetes cannot bind it to a matching volume or dynamically provision a new one. The most common reason is that the claim references a StorageClass that does not exist, no longer has a working provisioner, or does not match the storage behavior the cluster can deliver. Pods depending on that PVC then stall in Pending or ContainerCreating.

Symptoms

  • kubectl get pvc shows Pending
  • Pod scheduling fails because the PVC is unbound
  • kubectl describe pvc reports ProvisioningFailed or StorageClass-related events
  • The same manifest works in one cluster but not another

Common Causes

  • The PVC references a StorageClass name that does not exist in the cluster
  • The CSI driver or provisioner behind the StorageClass is missing or unhealthy
  • No default StorageClass exists and the PVC omits storageClassName
  • The requested access mode, size, or topology cannot be satisfied by the provisioner

Step-by-Step Fix

  1. 1.Inspect the PVC events first
  2. 2.The describe output usually tells you whether the failure is a missing StorageClass, a dead provisioner, or an unsupported request.
bash
kubectl describe pvc my-claim
  1. 1.Check the StorageClass definitions in the cluster
  2. 2.Confirm the name exists and that the provisioner matches the storage system you expect.
bash
kubectl get storageclass
  1. 1.Verify the CSI driver or provisioner is healthy
  2. 2.A valid StorageClass still fails if the underlying controller is not running or lacks cloud permissions.
bash
kubectl get pods -n kube-system
  1. 1.Use the correct StorageClass or default behavior intentionally
  2. 2.If the cluster relies on a default class, omit storageClassName. If it needs an explicit class, make sure the claim names the right one.

Prevention

  • Standardize StorageClass names across clusters where manifests are reused
  • Monitor CSI controllers and provisioner health as first-class platform components
  • Document whether applications should rely on a default StorageClass or an explicit one
  • Validate PVC creation in CI or staging before rolling workloads into production