Backup durchführen

Konfiguriere automatisierte PostgreSQL-Backups für IBM-Bob-Datenbanken und überprüfe, ob Backup-Jobs korrekt ausgeführt werden.

Verwende dieses Verfahren, um automatisierte PostgreSQL-Backups für IBM-Bob-Datenbanken zu konfigurieren. Nachdem Backups konfiguriert sind, erstellt und verwaltet der Operator automatisch geplante Backup-Jobs.

Voraussetzungen

Überprüfe vor der Konfiguration von Backups die folgenden Voraussetzungen:

  • Eine unterstützte Storage-Klasse ist im Cluster verfügbar.
  • Datenbankberechtigungs-Secrets sind vorhanden.
  • Ausreichend Speicherkapazität ist zugewiesen.
  • PostgreSQL-Cluster werden ausgeführt und sind fehlerfrei.

Backups konfigurieren und aktivieren

Erstelle eine Backup-ConfigMap, die den Backup-Zeitplan, die Aufbewahrungsrichtlinie, die Speicherkonfiguration und die Zieldatenbank-Cluster definiert.

Der Operator erkennt automatisch jede ConfigMap mit dem Label:

bob.ibm.com/backup-config: "true"

Erstelle die Konfigurationsdatei:

apiVersion: v1
kind: ConfigMap
metadata:
  name: bob-postgres-backup-config
  namespace: <bob-instance-namespace>
  labels:
    bob.ibm.com/backup-config: "true"  # Required
    app.kubernetes.io/name: bob
    app.kubernetes.io/component: postgres-backup
data:
  config.yaml: |
    # Backup schedule in cron format (UTC timezone)
    schedule: "0 2 * * *"

    # Storage class for backup PVCs
    backupStorageClass: "nfs-storage"

    # Number of backups to retain per cluster (default: 7)
    retention: 7

    # Size of backup PVC per cluster (default: 10Gi)
    pvcSize: "10Gi"

    # Optional: PostgreSQL image override
    # If not specified, image is auto-detected from running clusters
    # postgresImage: "icr.io/cpopen/ibm-postgresql:16.4"

    # Clusters to back up
    # If omitted, defaults to bob-db and bob-keycloak-db
    clusters:
      - name: bob-db
        database: bob
        secretName: bob-db-app
      - name: bob-keycloak-db
        database: app  # Note: Keycloak database is named "app"
        secretName: bob-keycloak-db-app

ConfigMap anwenden:

oc apply -f backup-config.yaml

Backup-Management in der benutzerdefinierten Bob-Ressource aktivieren:

apiVersion: bob.ibm.com/v1beta1
kind: Bob
metadata:
  name: bob-instance
  namespace: <bob-instance-namespace>
spec:
  postgresBackup:
    enabled: true
    suspend: false

Diese Einstellung weist den Operator an, Backup-Ressourcen automatisch zu erstellen und zu verwalten.

Aktualisierte benutzerdefinierte Ressource anwenden:

oc apply -f bob-cr.yaml

Überprüfe, ob der Operator die geplante Backup-Infrastruktur erfolgreich erstellt hat.

CronJobs prüfen:

oc get cronjobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup

Erwartete Ausgabe:

NAME                              SCHEDULE    SUSPEND   ACTIVE   LAST SCHEDULE   AGE
bob-db-backup-cronjob             0 2 * * *   False     0        <none>          1m
bob-keycloak-db-backup-cronjob    0 2 * * *   False     0        <none>          1m

PVCs prüfen:

oc get pvc -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup

Backup-Skript-ConfigMap prüfen:

oc get configmap postgres-backup-script -n <bob-instance-namespace>

Bob-CR-Events prüfen:

oc describe bob bob-instance -n <bob-instance-namespace>

IBM empfiehlt, nach der Erstkonfiguration ein manuelles Backup durchzuführen. Ein Test-Backup validiert die Konnektivität, Berechtigungen, Speicherkonfiguration und Backup-Ausführung, bevor man sich auf geplante Backups verlässt.

Einen einmaligen Backup-Job aus dem generierten CronJob erstellen:

# Manually create a job from the CronJob
oc create job --from=cronjob/bob-db-backup-cronjob manual-backup-$(date +%s) -n <bob-instance-namespace>

# Monitor the job
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup

# View job logs
oc logs -n <bob-instance-namespace> job/manual-backup-<timestamp>

Validiere nach Abschluss des Backups, dass die Backup-Dateien erfolgreich erstellt wurden.

Überprüfe Folgendes:

  • Der Job wurde erfolgreich abgeschlossen.
  • Die Backup-Datei ist vorhanden.
  • Die Metadatendatei ist vorhanden.
  • Die Backup-Größe erscheint plausibel.
  • In den Job-Protokollen erscheinen keine Fehler.
# Check job status
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup

# View backup logs
oc logs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup --tail=50

# Access backup files
oc run backup-check -n <bob-instance-namespace> --image=busybox --rm -it --restart=Never \
  --overrides='{
    "spec": {
      "containers": [{
        "name": "backup-check",
        "image": "busybox",
        "command": ["sh"],
        "stdin": true,
        "tty": true,
        "volumeMounts": [{
          "name": "backup",
          "mountPath": "/backups"
        }]
      }],
      "volumes": [{
        "name": "backup",
        "persistentVolumeClaim": {
          "claimName": "bob-db-backup-pvc"
        }
      }]
    }
  }'

# Inside the pod:
ls -lh /backups/bob-db/
cat /backups/bob-db/backup_bob_*.sql.gz.meta

Ein erfolgreiches Backup erzeugt eine Ausgabe ähnlich der folgenden:

==========================================
PostgreSQL Backup Script
==========================================
Cluster: bob-db
Database: bob
Timestamp: 20260902_020000
Backup file: /backups/bob-db/backup_bob_20260902_020000.sql.gz
Retention: 7 backups
==========================================
Starting pg_dump...
✓ Backup completed successfully
  Size: 1.2G
✓ Metadata file created
Cleaning up old backups...
  Current backup count: 7
✓ Cleanup completed
==========================================
✓ Backup process completed successfully
==========================================

Konfigurationsparameter

ParameterErforderlichStandardBeschreibung
scheduleJa—Cron-Zeitplanausdruck (UTC-Zeitzone).
backupStorageClassJa—Storage-Klasse für Backup-PVCs.
retentionNein7Anzahl der beizubehaltenden Backups pro Cluster.
pvcSizeNein10GiPVC-Größe pro Cluster.
postgresImageNeinAutomatisch erkanntPostgreSQL-Image für Backup-Jobs.
clustersNeinStandard-ClusterListe der zu sichernden Cluster.

Speichergrößenrichtlinien

So berechnest du den erforderlichen Speicher pro Cluster:

Required size = (database size × 0.3) × retention × 1.5

Example:
- Database: 5 GB
- Compression: 0.3 (70% compression)
- Retention: 7 backups
- Safety factor: 1.5

Required: 5 × 0.3 × 7 × 1.5 = 15.75 GB ≈ 20 GB
DatenbankgrößeEmpfohlener PVCAufbewahrung
Weniger als 1 GB5 Gi7
1–5 GB10 Gi7
5–20 GB50 Gi7
20–50 GB100 Gi5
Mehr als 50 GBBenutzerdefiniert3–5
Wie ist dieses Thema?