Configuration and StorageLesson 4.3
Kubernetes PersistentVolumes: how pods get durable storage
ephemeral storage problem, PersistentVolume resource, PersistentVolumeClaim, StorageClass, dynamic provisioning, static provisioning, access modes, reclaim policies, volume lifecycle
Container Filesystems Are Ephemeral
When a container restarts, its filesystem is wiped. For databases, file uploads, and any stateful data, you need storage that outlives the Pod. Kubernetes uses a three-layer abstraction: StorageClass → PersistentVolume (PV) → PersistentVolumeClaim (PVC).
Dynamic Provisioning with a PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: database-pvc
spec:
accessModes:
- ReadWriteOnce # RWO: one node read/write
resources:
requests:
storage: 10Gi
storageClassName: standard # triggers dynamic provisioningcontainers:
- name: postgres
image: postgres:15
volumeMounts:
- name: db-data
mountPath: /var/lib/postgresql/data
volumes:
- name: db-data
persistentVolumeClaim:
claimName: database-pvcAccess Modes
ReadWriteOnce (RWO) — one node can mount read/write. Suitable for databases. ReadOnlyMany (ROX) — many nodes read-only. ReadWriteMany (RWX) — many nodes read/write simultaneously. Requires NFS or cloud file storage. Most block storage (AWS EBS, GCP PD) only supports RWO.
