How to Create Persistent Volume Claim in Kubernetes
To create a
PersistentVolumeClaim (PVC) in Kubernetes, define a YAML manifest specifying storage size, access modes, and storage class, then apply it with kubectl apply -f. The PVC requests storage from available Persistent Volumes to be used by pods.Syntax
A PersistentVolumeClaim YAML manifest includes apiVersion, kind, metadata, and spec. The spec defines accessModes (how pods can use the volume), resources.requests.storage (size of storage), and optionally storageClassName (type of storage).
yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: standardExample
This example creates a PVC named my-pvc requesting 1Gi of storage with ReadWriteOnce access mode using the standard storage class. After applying, Kubernetes binds it to a matching Persistent Volume.
yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: standardOutput
persistentvolumeclaim/my-pvc created
Common Pitfalls
- Not specifying
storageClassNamecan cause PVC to remain unbound if no default storage class exists. - Requesting storage size larger than available Persistent Volumes causes PVC to stay pending.
- Using incorrect
accessModesthat do not match available volumes leads to binding failure.
yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wrong-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
storageClassName: unknown
# Corrected version:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: correct-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: standardQuick Reference
| Field | Description | Example |
|---|---|---|
| apiVersion | Kubernetes API version | v1 |
| kind | Resource type | PersistentVolumeClaim |
| metadata.name | PVC name | my-pvc |
| spec.accessModes | How volume is accessed | ReadWriteOnce |
| spec.resources.requests.storage | Requested storage size | 1Gi |
| spec.storageClassName | Storage class to use | standard |
Key Takeaways
Define a PersistentVolumeClaim YAML with accessModes, storage size, and storageClassName.
Apply the PVC manifest using kubectl to request storage from Kubernetes.
Ensure storageClassName matches an existing storage class or default is set.
Match accessModes and storage size to available Persistent Volumes to avoid pending state.
Check PVC status with kubectl get pvc to confirm it is bound.