Realizar una copia de seguridad
Configura copias de seguridad automáticas de PostgreSQL para las bases de datos de IBM Bob y verifica que los trabajos de backup se estén ejecutando correctamente.
Usa este procedimiento para configurar copias de seguridad automáticas de PostgreSQL para las bases de datos de IBM Bob. Una vez configurados los backups, el operador crea y gestiona automáticamente los trabajos de backup programados.
Antes de empezar
Antes de configurar los backups, verifica los siguientes requisitos previos:
- Hay una clase de almacenamiento compatible disponible en el clúster.
- Existen los secrets con las credenciales de la base de datos.
- Se ha asignado capacidad de almacenamiento suficiente.
- Los clústeres PostgreSQL están en ejecución y son saludables.
Configurar y habilitar los backups
Crea un ConfigMap de backup que defina el programa de backup, la política de retención, la configuración de almacenamiento y los clústeres de base de datos de destino.
El operador descubre automáticamente cualquier ConfigMap etiquetado con:
bob.ibm.com/backup-config: "true"Crea el archivo de configuración:
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-appAplica el ConfigMap:
oc apply -f backup-config.yamlHabilita la gestión de backups en el recurso personalizado de Bob:
apiVersion: bob.ibm.com/v1beta1
kind: Bob
metadata:
name: bob-instance
namespace: <bob-instance-namespace>
spec:
postgresBackup:
enabled: true
suspend: falseEsta configuración indica al operador que cree y gestione los recursos de backup automáticamente.
Aplica el recurso personalizado actualizado:
oc apply -f bob-cr.yamlVerifica que el operador haya creado correctamente la infraestructura de backup programado.
Comprueba los CronJobs:
oc get cronjobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backupSalida esperada:
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> 1mComprueba los PVCs:
oc get pvc -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backupComprueba el ConfigMap del script de backup:
oc get configmap postgres-backup-script -n <bob-instance-namespace>Comprueba los eventos del CR de Bob:
oc describe bob bob-instance -n <bob-instance-namespace>IBM recomienda ejecutar un backup manual después de la configuración inicial. Un backup de prueba valida la conectividad, los permisos, la configuración de almacenamiento y la ejecución del backup antes de confiar en los backups programados.
Crea un trabajo de backup puntual a partir del CronJob generado:
# 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>Una vez finalizado el backup, valida que los archivos de backup se hayan creado correctamente.
Verifica lo siguiente:
- El trabajo se completó correctamente.
- El archivo de backup existe.
- El archivo de metadatos existe.
- El tamaño del backup parece razonable.
- No aparecen errores en los logs del trabajo.
# 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 exitoso produce una salida similar a la siguiente:
==========================================
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
==========================================Parámetros de configuración
| Parámetro | Requerido | Predeterminado | Descripción |
|---|---|---|---|
schedule | Sí | — | Expresión de programación cron (zona horaria UTC). |
backupStorageClass | Sí | — | Clase de almacenamiento para los PVCs de backup. |
retention | No | 7 | Número de backups a retener por clúster. |
pvcSize | No | 10Gi | Tamaño del PVC por clúster. |
postgresImage | No | Detección automática | Imagen PostgreSQL para los trabajos de backup. |
clusters | No | Clústeres predeterminados | Lista de clústeres a respaldar. |
Guía de dimensionamiento del almacenamiento
Para calcular el almacenamiento requerido por clúster:
Tamaño requerido = (tamaño de la base de datos × 0.3) × retención × 1.5
Ejemplo:
- Base de datos: 5 GB
- Compresión: 0.3 (70% de compresión)
- Retención: 7 backups
- Factor de seguridad: 1.5
Requerido: 5 × 0.3 × 7 × 1.5 = 15.75 GB ≈ 20 GB| Tamaño de la base de datos | PVC recomendado | Retención |
|---|---|---|
| Menos de 1 GB | 5 Gi | 7 |
| 1–5 GB | 10 Gi | 7 |
| 5–20 GB | 50 Gi | 7 |
| 20–50 GB | 100 Gi | 5 |
| Más de 50 GB | Personalizado | 3–5 |