0
0
KubernetesHow-ToBeginner · 4 min read

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: standard
💻

Example

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: standard
Output
persistentvolumeclaim/my-pvc created
⚠️

Common Pitfalls

  • Not specifying storageClassName can 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 accessModes that 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: standard
📊

Quick Reference

FieldDescriptionExample
apiVersionKubernetes API versionv1
kindResource typePersistentVolumeClaim
metadata.namePVC namemy-pvc
spec.accessModesHow volume is accessedReadWriteOnce
spec.resources.requests.storageRequested storage size1Gi
spec.storageClassNameStorage class to usestandard

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.