Esecuzione di un backup

Configura i backup PostgreSQL automatici per i database IBM Bob e verifica che i job di backup vengano eseguiti correttamente.

Usa questa procedura per configurare i backup PostgreSQL automatici per i database IBM Bob. Dopo aver configurato i backup, l'operator crea e gestisce automaticamente i job di backup pianificati.

Prima di iniziare

Prima di configurare i backup, verifica i seguenti prerequisiti:

  • Nel cluster è disponibile una storage class supportata.
  • Esistono i secret delle credenziali del database.
  • È allocata una capacità di storage sufficiente.
  • I cluster PostgreSQL sono in esecuzione e funzionanti.

Configurare e abilitare i backup

Crea una ConfigMap di backup che definisca la pianificazione del backup, la policy di retention, la configurazione dello storage e i cluster di database di destinazione.

L'operator individua automaticamente qualsiasi ConfigMap etichettata con:

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

Crea il file di configurazione:

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

Applica la ConfigMap:

oc apply -f backup-config.yaml

Abilita la gestione dei backup nella custom resource Bob:

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

Questa impostazione indica all'operator di creare e gestire automaticamente le risorse di backup.

Applica la custom resource aggiornata:

oc apply -f bob-cr.yaml

Verifica che l'operator abbia creato correttamente l'infrastruttura di backup pianificata.

Verifica i CronJob:

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

Output atteso:

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

Verifica i PVC:

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

Verifica la ConfigMap dello script di backup:

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

Verifica gli eventi della CR Bob:

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

IBM consiglia di eseguire un backup manuale dopo la configurazione iniziale. Un backup di test convalida la connettività, le autorizzazioni, la configurazione dello storage e l'esecuzione del backup prima di fare affidamento sui backup pianificati.

Crea un job di backup una tantum dal CronJob generato:

# 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>

Al termine del backup, verifica che i file di backup siano stati creati correttamente.

Verifica quanto segue:

  • Il job è stato completato correttamente.
  • Il file di backup esiste.
  • Il file di metadati esiste.
  • La dimensione del backup sembra ragionevole.
  • Nei log del job non compaiono errori.
# 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

Un backup riuscito produce un output simile al seguente:

==========================================
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
==========================================

Parametri di configurazione

ParametroObbligatorioValore predefinitoDescrizione
scheduleSì—Espressione di pianificazione cron (fuso orario UTC).
backupStorageClassSì—Storage class per i PVC di backup.
retentionNo7Numero di backup da conservare per cluster.
pvcSizeNo10GiDimensione del PVC per cluster.
postgresImageNoRilevata automaticamenteImmagine PostgreSQL per i job di backup.
clustersNoCluster predefinitiElenco dei cluster di cui eseguire il backup.

Linee guida per il dimensionamento dello storage

Per calcolare lo storage richiesto per cluster:

Dimensione richiesta = (dimensione database × 0.3) × retention × 1.5

Esempio:
- Database: 5 GB
- Compressione: 0.3 (compressione 70%)
- Retention: 7 backup
- Fattore di sicurezza: 1.5

Richiesto: 5 × 0.3 × 7 × 1.5 = 15.75 GB ≈ 20 GB
Dimensione databasePVC consigliatoRetention
Meno di 1 GB5 Gi7
1–5 GB10 Gi7
5–20 GB50 Gi7
20–50 GB100 Gi5
Più di 50 GBPersonalizzato3–5
Come valuti questo argomento?