Skip to Content
Last repository update 9/10/2025 🎉
DocsKubernetesPersistent Volume and Claim

Persistent Volume and Persistent Volume Claim

Concept and Usage of Persistent Volume and Persistent Volume Claim

Refer here  for more references.

Persistent volume (PV) is a storage resource in the cluster that has been provisioned by an administrator or dynamically provisioned using Storage Classes. PV has its own lifecycle, that means it does not tied to any pods.

If you want to use a PV in your pod, you need to create a Persistent Volume Claim (PVC) that requests (claims as volumes) a PV with specific storage requirements. The PVC will be bound to a PV that meets the requirements. Remember, PV and PVC are bound together, meaning one PV can only be bound to one PVC. There is one-to-one relationship between PV and PVC, so no other PVC can use the same PV (remaining capacity in the volume).

Create a PV

pv.yaml
apiVersion: v1 kind: PersistentVolume metadata: name: pv-example labels: type: fast-storage # label for PV (optional) spec: capacity: storage: 1Gi # reserve 1Gi storage accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain hostPath: path: /data
Access ModeDescription
ReadWriteOnceThe volume can be mounted as read-write by a single node. ReadWriteOnce access mode still can allow multiple pods to access (read from or write to) that volume when the pods are running on the same node.
ReadOnlyManyThe volume can be mounted as read-only by many nodes.
ReadWriteManyThe volume can be mounted as read-write by many nodes.
ReadWriteOncePodThe volume can be mounted as read-write by a single Pod. Use ReadWriteOncePod access mode if you want to ensure that only one pod across the whole cluster cna read that PVC or write to it.
Reclaim PolicyDescription
RetainRemain the volume unless it is manually deleted.
DeleteDelete the volume when the PVC is deleted .

When you delete a PV, remember to delete the associated PVC first, otherwise, the PV will not be deleted.

Create a PVC

When you create a PVC, Kubernetes will bind the PVC to a PV that meets the requirements. If there is no PV that meets the requirements, the PVC status will remain unbound else it will be bound to a PV.

pvc.yaml
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-example spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi selector: # (optional) matchLabels: type: fast-storage # label for PV
  • selector is optional, if you want to bind the PVC to a specific PV, you can use the selector field.

Use PVC in Pod

pod.yaml
apiVersion: v1 kind: Pod metadata: name: pod-example spec: containers: - name: nginx image: nginx volumeMounts: - name: my-pvc-example # volume name mountPath: /usr/share/nginx/html volumes: - name: my-pvc-example persistentVolumeClaim: claimName: pvc-example
Last updated on