Warum PostgreSQL auf Kubernetes?
Datenbanken auf Kubernetes zu betreiben gilt lange als Anti-Pattern – heute ist es dank Kubernetes Operators produktionsreif. Ein Operator kapselt das Wissen eines Datenbankadministrators als Code: Er übernimmt Backup, Failover, Monitoring, Upgrades und Skalierung automatisch.
Für PostgreSQL haben sich zwei Operators als de-facto Standard etabliert: CloudNativePG (von EDB, dem größten PostgreSQL-Contributor) und der Zalando PostgreSQL Operator (von Zalando entwickelt, Open Source). Beide sind produktionsreif, werden aktiv entwickelt und unterscheiden sich in Architektur, Features und Betriebsphilosophie.
CloudNativePG: Der CNCF-Sandbox-Operator
CloudNativePG wurde 2022 von EDB unter Apache 2.0 lizenziert und 2023 in die CNCF Sandbox aufgenommen. Es ist der aktuell am schnellsten wachsende PostgreSQL-Operator – und setzt auf einen direkten Streaming-Replication-Ansatz ohne externe Dependency auf Patroni.
Installation
# CloudNativePG via kubectl
kubectl apply -f \
https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/main/releases/cnpg-latest.yaml
# Oder via Helm
helm repo add cnpg https://cloudnative-pg.github.io/charts
helm install cnpg cnpg/cloudnative-pg -n cnpg-system --create-namespace
Cluster-Konfiguration
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: postgres-cluster
namespace: database
spec:
instances: 3 # 1 Primary + 2 Standby
postgresql:
parameters:
max_connections: "200"
shared_buffers: "256MB"
storage:
size: 20Gi
storageClass: longhorn
backup:
retentionPolicy: "30d"
barmanObjectStore:
destinationPath: "s3://backups.example.com/postgres"
serverName: postgres-cluster
s3Credentials:
accessKeyId:
name: backup-creds
key: ACCESS_KEY_ID
secretAccessKey:
name: backup-creds
key: SECRET_ACCESS_KEY
Key Features von CloudNativePG
- Direkte Streaming Replication ohne externe Tools wie Patroni oder etcd
- Integriertes Backup via Barman (unterstützt S3, Azure Blob, GCS)
- In-Place Major Upgrades (experimentell ab v1.22)
- Declarative Connection Pooling via PgBouncer als Sidecar
- PITR (Point-in-Time Recovery) mit WAL-Archivierung
- Prometheus Metrics out-of-the-box
Zalando PostgreSQL Operator: Bewährt in Production
Der Zalando PostgreSQL Operator läuft seit 2016 in Produktion bei Zalando – auf über 300 Datenbankcluster. Er basiert auf Patroni für High Availability und Spilo als PostgreSQL-Image. Dies bringt Battle-Tested-Reife, aber auch eine höhere Komplexität mit sich.
Installation
# Via Helm
helm repo add postgres-operator-charts \
https://opensource.zalando.com/postgres-operator/charts/postgres-operator
helm install postgres-operator postgres-operator-charts/postgres-operator \
-n postgres-operator --create-namespace
Cluster-Konfiguration
apiVersion: "acid.zalan.do/v1"
kind: postgresql
metadata:
name: app-postgres
namespace: database
spec:
teamId: "myteam"
volume:
size: 20Gi
storageClass: longhorn
numberOfInstances: 3
users:
appuser: []
databases:
appdb: appuser
postgresql:
version: "16"
resources:
requests:
cpu: 100m
memory: 250Mi
limits:
cpu: 500m
memory: 500Mi
Key Features von Zalando PostgreSQL Operator
- Patroni-basiertes HA: Battle-tested Failover in <30 Sekunden
- Automatisches User/DB-Management: Deklarative Datenbanknutzer
- Spilo-Images: Enthält PostgreSQL + Patroni + WAL-E/WAL-G
- Pod Anti-Affinity: Automatische Verteilung auf Nodes
- Clone via S3: Schnelles Erstellen von Staging-Clustern aus Backups
- Logical Backups via pg_dump (täglich)
Direktvergleich: CloudNativePG vs Zalando Operator
| Kriterium | CloudNativePG | Zalando Operator |
|---|---|---|
| HA-Mechanismus | Native Streaming Replication | Patroni + etcd/DCS |
| Komplexität | Geringer | Höher |
| Backup-Integration | Barman (S3/Azure/GCS) | WAL-G + Logical |
| PITR | ✅ Vollständig | ✅ Via WAL-G |
| Major Upgrades | ⚠️ Experimentell | ✅ Via pg_upgrade |
| Connection Pooling | ✅ PgBouncer Sidecar | ❌ Extern |
| Metrics | ✅ Prometheus built-in | ✅ Via Sidecar |
| CNCF Mitglied | ✅ Sandbox | ❌ |
| Lizenz | Apache 2.0 | MIT |
| Primäre Sprache | Go | Python/Go |
| Externe Dependencies | Minimal | Patroni, etcd |
| Enterprise Support | EDB (kostenpflichtig) | Community only |
PITR: Point-in-Time Recovery
Für Produktionsdatenbanken ist PITR essentiell. CloudNativePG hat hier die elegantere Implementierung:
# CloudNativePG: Recovery auf bestimmten Zeitpunkt
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: postgres-recovery
spec:
instances: 1
bootstrap:
recovery:
backup:
name: postgres-cluster-backup
recoveryTarget:
targetTime: "2026-09-09 02:00:00"
storage:
size: 20Gi
Monitoring und Alerting
Beide Operators bieten Prometheus-Metriken. CloudNativePG liefert sie direkt im Primary-Container:
# ServiceMonitor für CloudNativePG
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: cnpg-metrics
spec:
selector:
matchLabels:
cnpg.io/cluster: postgres-cluster
endpoints:
- port: metrics
interval: 30s
Wichtige Metriken:
cnpg_pg_replication_lag– Replikationsverzögerung der Standbyscnpg_backends_waiting_total– Wartende Datenbankverbindungencnpg_pg_database_size_bytes– Datenbankgröße
Wann CloudNativePG, wann Zalando Operator?
CloudNativePG ist die bessere Wahl wenn:
- Ein moderner, wartungsarmer Betrieb gewünscht wird
- CNCF-Alignment und Long-Term-Support wichtig sind
- Connection Pooling über den Operator verwaltet werden soll
- Einfache, deklarative Cluster-Konfiguration bevorzugt wird
- Das Team noch keine Patroni-Erfahrung hat
Zalando Operator ist besser wenn:
- Sehr große Cluster (100+ Datenbanken) verwaltet werden
- Automatisches User- und Datenbankmanagement benötigt wird
- Bestehendes Spilo-Know-how vorhanden ist
- Zalando-spezifische Features wie Team-Integration genutzt werden
Fazit: CloudNativePG für Neuprojekte
Für neue Kubernetes-Projekte ist CloudNativePG klar empfehlenswert: geringere Komplexität, CNCF-Backing, aktive Weiterentwicklung und ein sauberes API-Design. Der Operator hat den Zalando-Operator in GitHub-Stars bereits überholt und ist auf dem Weg zum CNCF-Standard für PostgreSQL auf Kubernetes.
Zalando PostgreSQL Operator bleibt eine exzellente Wahl für Teams mit bestehender Patroni-Expertise oder komplexen User-Management-Anforderungen.
Für beide gilt: Teste PITR regelmäßig – ein Backup das nie geprüft wurde, ist kein Backup.
Weiterführende Artikel
- Neon vs PlanetScale vs Supabase: Serverless PostgreSQL im Vergleich 2026
- Karpenter vs. Cluster Autoscaler: Kubernetes Node Autoscaling im Vergleich 2026
- Longhorn vs Rook-Ceph: Kubernetes Storage im Vergleich 2026
- k3s vs. MicroK8s: Lightweight Kubernetes im Vergleich 2026