„Kubernetes je skvělý pro stateless aplikace.” Slyšeli jsme to mockrát. Ale co databáze, message brokery? PersistentVolumes a StorageClasses posunují Kubernetes do světa stateful workloadů.
PV, PVC, StorageClass — trojice, kterou musíte znát¶
PersistentVolume (PV) je kus storage v clusteru. PersistentVolumeClaim (PVC) je požadavek na storage od aplikace. StorageClass definuje, jak se PV dynamicky vytváří.
Dynamický provisioning je klíč. StorageClass automaticky provisionne nový volume při vytvoření PVC.
Naše setup: Ceph on-premise, EBS v cloudu¶
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ceph-rbd
provisioner: kubernetes.io/rbd
parameters:
monitors: 10.0.0.1:6789,10.0.0.2:6789,10.0.0.3:6789
pool: kube
reclaimPolicy: Retain
StatefulSets + PVC = stateful aplikace¶
StatefulSet garantuje stabilní hostname a persistent storage pro každý pod. Pod postgres-0 vždy dostane PVC data-postgres-0. I po restartu se pod připojí ke stejnému volume.
Provozujeme takto PostgreSQL, Redis a Elasticsearch. Není to bez problémů — node failure s lokálním storage znamená manuální zásah. Ale pro většinu případů to funguje spolehlivě.
Backup strategie¶
- Volume snapshots (Ceph podporuje nativně)
- Aplikační backupy (pg_dump pro PostgreSQL)
- reclaimPolicy: Retain — nikdy Delete pro produkční data
- Testujte restore — backup bez ověřeného restore je iluze
Stateful workloady v Kubernetes jsou realita¶
PersistentVolumes a StatefulSets posouvají Kubernetes za hranice stateless mikroslužeb. S dobrým storage backendem a promyšlenou strategií to funguje i pro databáze.