Script Valley
Kubernetes: From Containers to Clusters
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

Kubernetes PersistentVolume provisioning flow diagram

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 provisioning
containers:
- name: postgres
  image: postgres:15
  volumeMounts:
  - name: db-data
    mountPath: /var/lib/postgresql/data
volumes:
- name: db-data
  persistentVolumeClaim:
    claimName: database-pvc

Access 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.

Up next

Kubernetes StatefulSets: deploying databases and stateful applications

Sign in to track progress

Kubernetes PersistentVolumes: how pods get durable storage โ€” Configuration and Storage โ€” Kubernetes: From Containers to Clusters โ€” Script Valley โ€” Script Valley