Skip to content

Kubernetes Persistent Volumes and Claims

In Kubernetes, storage management is decoupled from compute resources through the use of Persistent Volumes (PV) and Persistent Volume Claims (PVC).^[400-devops-06-kubernetes-k8s-paas-kubernetes-yaml.md]

Core Concepts

Persistent Volume (PV)

A Persistent Volume represents a piece of storage in the cluster that has been provisioned by an administrator or dynamically provisioned using Storage Classes.^[400-devops-06-kubernetes-k8s-paas-kubernetes-yaml.md] It is a resource in the cluster, independent of the lifecycle of any individual Pod that uses it.^[400-devops-06-kubernetes-k8s-paas-kubernetes-yaml.md]

Persistent Volume Claim (PVC)

A Persistent Volume Claim is a request for storage by a user.^[400-devops-06-kubernetes-k8s-paas-kubernetes-yaml.md] It specifies the desired attributes of the storage, such as size and access modes.^[400-devops-06-kubernetes-k8s-paas-kubernetes-yaml.md]

Binding Mechanism

For a PVC to be used by a Pod, it must be bound to a Persistent Volume.^[400-devops-06-kubernetes-k8s-paas-kubernetes-yaml.md] This binding is based on two conditions^[400-devops-06-kubernetes-k8s-paas-kubernetes-yaml.md]:

  1. Spec Matching: The PV must meet the requirements specified in the PVC's spec (e.g., storage size).
  2. Storage Class Matching: The storageClassName fields of the PV and PVC must be identical.^[400-devops-06-kubernetes-k8s-paas-kubernetes-yaml.md]

Dynamic Provisioning

In a large-scale cluster, manually creating thousands of PVs is impractical.^[400-devops-06-kubernetes-k8s-paas-kubernetes-yaml.md] Kubernetes solves this through Dynamic Provisioning, which automatically creates PVs based on PVCs.^[400-devops-06-kubernetes-k8s-paas-kubernetes-yaml.md]

This mechanism relies on the StorageClass API object^[400-devops-06-kubernetes-k8s-paas-kubernetes-yaml.md]:

  • Definition: A StorageClass acts as a template for creating PVs^[400-devops-06-kubernetes-k8s-paas-kubernetes-yaml.md].
  • Properties: It defines PV attributes (e.g., volume size) and the storage plugin (provisioner) required to create the volume^[400-devops-06-kubernetes-k8s-paas-kubernetes-yaml.md].

When a user creates a PVC specifying a storageClassName, Kubernetes uses the corresponding StorageClass to automatically provision a new PV^[400-devops-06-kubernetes-k8s-paas-kubernetes-yaml.md].

Roles and Responsibilities

This storage architecture separates responsibilities between different roles^[400-devops-06-kubernetes-k8s-paas-kubernetes-yaml.md]:

  • PV: Defines the actual volume (e.g., NFS mount).^[400-devops-06-kubernetes-k8s-paas-kubernetes-yaml.md]
  • PVC: Defines the storage requirements desired by the application (e.g., size).^[400-devops-06-kubernetes-k8s-paas-kubernetes-yaml.md]
  • StorageClass: Defines the templates and plugins used to bridge the two.^[400-devops-06-kubernetes-k8s-paas-kubernetes-yaml.md]

Sources

^[400-devops-06-kubernetes-k8s-paas-kubernetes-yaml.md]