Kubernetes Persistent Volumes: Storage Made Simple
Containers are ephemeral, but data often needs to persist. Kubernetes provides a robust storage abstraction through Persistent Volumes (PV) and Persistent Volume Claims (PVC).
Storage Concepts
| Concept | Description |
|---|---|
| Volume | Directory accessible to containers in a pod |
| PersistentVolume (PV) | Cluster-wide storage resource |
| PersistentVolumeClaim (PVC) | Request for storage by user |
| StorageClass | Defines storage provisioner and parameters |
Creating a PersistentVolume
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /data/pvAccess Modes
- ReadWriteOnce (RWO) - Single node read-write
- ReadOnlyMany (ROX) - Multiple nodes read-only
- ReadWriteMany (RWX) - Multiple nodes read-write
Reclaim Policies
- Retain - Keep data after PVC deletion
- Delete - Delete storage after PVC deletion
- Recycle - Basic scrub (deprecated)
Creating a PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5GiUsing PVC in Pods
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: app
image: nginx
volumeMounts:
- name: data
mountPath: /usr/share/nginx/html
volumes:
- name: data
persistentVolumeClaim:
claimName: my-pvcDynamic Provisioning with StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
fsType: ext4Using StorageClass in PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: dynamic-pvc
spec:
storageClassName: fast
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20GiCommon Volume Types
# EmptyDir - Temporary storage
volumes:
- name: cache
emptyDir: {}
# HostPath - Node filesystem
volumes:
- name: data
hostPath:
path: /data
# ConfigMap as volume
volumes:
- name: config
configMap:
name: my-configDebugging Storage
# Check PV status
kubectl get pv
# Check PVC status
kubectl get pvc
# Describe for events
kubectl describe pvc my-pvcPractice Storage
Storage questions appear in CKA exams. Practice at Sailor.sh.