Doel
Een PostgreSQL-voorziening in Kubernetes waar applicaties op kunnen bouwen, met twee eisen: het cluster overleeft het verlies van een node of een zone, en je kunt terug naar elk willekeurig moment, niet alleen naar de laatste backup.
Opzet
| Onderdeel | Keuze |
|---|---|
| Operator | CloudNativePG via Helm, in een eigen Flux-Kustomization |
| Cluster | PostgreSQL 17, 3 instances (1 primary, 2 replica's) |
| Spreiding | Pod anti-affinity over drie zones |
| Opslag | Block storage met een Retain-policy |
| Verbinden | Service -rw (altijd de primary) en -ro (replica's), plus TCP via de interne Istio-gateway |
| Credentials | Infisical, via een InfisicalSecret |
| Monitoring | PodMonitor voor de CNPG-metrics |
Waarom de operator apart
De Cluster-resources zijn pas te valideren als de CRD's van de operator bestaan. Zet je operator en cluster in één Kustomization, dan loopt de eerste uitrol vast. Twee Kustomizations, met de clusterresources afhankelijk van de operator, lossen dat op.
Point-in-time recovery
- Barman (ingebouwd in CloudNativePG) archiveert de WAL continu naar S3.
- Elke nacht een base backup, plus direct een eerste bij het aanmaken.
- Retentie 30 dagen, met compressie.
Herstellen is een nieuw cluster
Bij CloudNativePG herstel je niet "in place". Je maakt een nieuw cluster dat opstart vanaf een base backup en daarna de WAL afspeelt tot het doeltijdstip. Het bronnencluster blijft gewoon draaien. Zo kun je herstellen zonder de productie aan te raken, en vergelijken voordat je omschakelt.
De hersteltest
Een backup bestaat pas als je hem hebt teruggezet. De test staat als stappenplan in de repository:
- een testtabel met rijen vóór de backup;
- een base backup maken;
- rijen ná de backup toevoegen, en het doeltijdstip noteren;
- dataverlies simuleren;
- een herstelcluster maken dat herstelt tot het doeltijdstip;
- verifiëren dat de data van vóór het doeltijdstip terug is en het verlies niet;
- het herstelcluster opruimen.
Wat het oplevert
Applicaties krijgen een database met automatische failover en een herstelmogelijkheid tot op de seconde, zonder dat een team zelf PostgreSQL hoeft te beheren. En de hersteltest maakt de vraag "kunnen we terug?" van een aanname tot een bewezen procedure.