💾 Pods Are Ephemeral. Data Shouldn’t Be.
Pod restarts lose data. Persistent Volumes (PV) store data outside pods. Databases, uploads, logs survive restarts.
📝 Persistent Volume Claim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: standard
---
apiVersion: v1
kind: Pod
metadata:
name: postgres
spec:
containers:
- name: postgres
image: postgres:15
volumeMounts:
- name: postgres-storage
mountPath: /var/lib/postgresql/data
volumes:
- name: postgres-storage
persistentVolumeClaim:
claimName: postgres-pvc
🎯 Access Modes
ReadWriteOnce (RWO): - Read and write from single node - Most common for databases ReadOnlyMany (ROX): - Read-only from multiple nodes - For shared config, static assets ReadWriteMany (RWX): - Read and write from multiple nodes - For shared file systems, media uploads ReadWriteOncePod (RWOP): - Read and write from single pod
💡 Commands
- kubectl get pv (Persistent Volumes)
- kubectl get pvc (Persistent Volume Claims)
- kubectl describe pvc postgres-pvc
- Storage classes: AWS EBS, Azure Disk, GCP PD, NFS
- Dynamic provisioning (storage class creates PV automatically)
“Database pod restarted, data lost. Added Persistent Volume. Now data survives restarts. Essential for stateful apps in Kubernetes.”
