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-appApplica la ConfigMap:
oc apply -f backup-config.yamlAbilita 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: falseQuesta impostazione indica all'operator di creare e gestire automaticamente le risorse di backup.
Applica la custom resource aggiornata:
oc apply -f bob-cr.yamlVerifica 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-backupOutput 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> 1mVerifica i PVC:
oc get pvc -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backupVerifica 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.metaUn 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
| Parametro | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
schedule | Sì | — | Espressione di pianificazione cron (fuso orario UTC). |
backupStorageClass | Sì | — | Storage class per i PVC di backup. |
retention | No | 7 | Numero di backup da conservare per cluster. |
pvcSize | No | 10Gi | Dimensione del PVC per cluster. |
postgresImage | No | Rilevata automaticamente | Immagine PostgreSQL per i job di backup. |
clusters | No | Cluster predefiniti | Elenco 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 database | PVC consigliato | Retention |
|---|---|---|
| Meno di 1 GB | 5 Gi | 7 |
| 1–5 GB | 10 Gi | 7 |
| 5–20 GB | 50 Gi | 7 |
| 20–50 GB | 100 Gi | 5 |
| Più di 50 GB | Personalizzato | 3–5 |