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]:
- Spec Matching: The PV must meet the requirements specified in the PVC's
spec(e.g., storage size). - Storage Class Matching: The
storageClassNamefields 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]