CloudNativePG Backups

Zweck

CloudNativePG (CNPG) sichert PostgreSQL Datenbanken automatisch in externes Object Storage.

Dadurch bleiben Datenbank-Backups unabhängig vom Kubernetes Cluster erhalten und können auch nach einem vollständigen Clusterverlust wiederhergestellt werden.

Ziele

  • Automatisierte Datenbank-Backups

  • Offsite-Sicherung

  • Clusterunabhängige Wiederherstellung

  • GitOps-kompatible Konfiguration

  • PostgreSQL-native Recovery

Architektur

PostgreSQL
      |
      v
CloudNativePG
      |
      v
Barman Cloud
      |
      v
Hetzner Object Storage

CNPG verwendet Barman Cloud zur Erstellung und Verwaltung der Datenbank-Backups.

Backup Ziel

Alle Backups werden in Hetzner Object Storage gespeichert.

Vorteile:

  • Offsite Speicherung

  • Clusterunabhängige Wiederherstellung

  • S3-kompatible Schnittstelle

  • Hohe Verfügbarkeit

Sicherungsumfang

CNPG sichert:

  • Datenbanken

  • Tabellen

  • Indizes

  • Rollen

  • Konfigurationen

  • WAL Archive

Dadurch sind Point-in-Time-Recoveries möglich.

Backup Modell

Die Sicherung erfolgt direkt aus PostgreSQL.

Es werden keine VolumeSnapshots verwendet.

Es werden keine Velero Backups verwendet.

CNPG verwaltet den vollständigen Backup- und Recovery-Prozess eigenständig.

Recovery

Eine Wiederherstellung erfolgt direkt aus dem Object Storage.

Mögliche Szenarien:

  • Wiederherstellung einzelner Cluster

  • Migration auf neue Cluster

  • Disaster Recovery

  • Point-in-Time Recovery

Vorteile

  • PostgreSQL-native Backups

  • Unabhängig vom Storage Backend

  • Unabhängig von Kubernetes Snapshots

  • Offsite Speicherung

  • Unterstützung für Point-in-Time Recovery

Einschränkungen

  • Restore benötigt Zugriff auf das Object Storage

  • Datenbankgröße beeinflusst Wiederherstellungsdauer

  • Kein lokales Backup innerhalb des Clusters

Betrieb

Cluster anzeigen

kubectl get clusters -A

Backups anzeigen

kubectl get backups -A

Backup Status prüfen

kubectl describe backup <name>

Logs anzeigen

kubectl logs \
  -n <namespace> \
  <cluster-name>-1