← Projecten

PostgreSQL in Kubernetes met high availability en point-in-time recovery

Een PostgreSQL 17-cluster met CloudNativePG: drie instances over drie zones, continue WAL-archivering naar S3, dagelijkse base backups en een geteste hersteltest naar een willekeurig tijdstip, alles uitgerold door Flux.

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

OnderdeelKeuze
OperatorCloudNativePG via Helm, in een eigen Flux-Kustomization
ClusterPostgreSQL 17, 3 instances (1 primary, 2 replica's)
SpreidingPod anti-affinity over drie zones
OpslagBlock storage met een Retain-policy
VerbindenService -rw (altijd de primary) en -ro (replica's), plus TCP via de interne Istio-gateway
CredentialsInfisical, via een InfisicalSecret
MonitoringPodMonitor 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:

  1. een testtabel met rijen vóór de backup;
  2. een base backup maken;
  3. rijen ná de backup toevoegen, en het doeltijdstip noteren;
  4. dataverlies simuleren;
  5. een herstelcluster maken dat herstelt tot het doeltijdstip;
  6. verifiëren dat de data van vóór het doeltijdstip terug is en het verlies niet;
  7. 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.