Les conteneurs sont éphémères — leurs données disparaissent avec eux. Pour les bases de données, les queues et tout service avec état, Kubernetes offre un système de stockage persistant découplé du cycle de vie des pods.
Les trois abstractions
PersistentVolume (PV) — un morceau de stockage provisionné dans le cluster (EBS, GCE Disk, NFS…). C’est la ressource physique.
PersistentVolumeClaim (PVC) — une demande de stockage par un pod. Le pod ne connaît pas le PV sous-jacent.
StorageClass — définit comment les PVs sont créés dynamiquement à la demande.
Provisionnement dynamique avec StorageClass
# StorageClass pour AWS EBS
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: ebs.csi.aws.com
parameters:
type: gp3
iops: "3000"
throughput: "125"
reclaimPolicy: Retain # Retain = garder le volume même si le PVC est supprimé
volumeBindingMode: WaitForFirstConsumer
PVC dans un déploiement
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: database-data
spec:
accessModes: [ReadWriteOnce]
storageClassName: fast-ssd
resources:
requests:
storage: 50Gi
---
apiVersion: apps/v1
kind: Deployment
spec:
template:
spec:
volumes:
- name: data
persistentVolumeClaim:
claimName: database-data
containers:
- name: postgres
image: postgres:16
volumeMounts:
- name: data
mountPath: /var/lib/postgresql/data
StatefulSets : le stockage pour les applications avec état
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgres
spec:
replicas: 3
volumeClaimTemplates: # PVC créé automatiquement pour chaque replica
- metadata:
name: data
spec:
accessModes: [ReadWriteOnce]
storageClassName: fast-ssd
resources:
requests:
storage: 50Gi
Avec un StatefulSet, postgres-0, postgres-1 et postgres-2 ont chacun leur propre PVC (data-postgres-0, etc.). Les pods ont des identités stables et du stockage attaché individuellement.
Notre formation Kubernetes couvre le stockage persistant avec des ateliers sur des clusters cloud réels.