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

Aplica el ConfigMap:

oc apply -f backup-config.yaml

Habilita 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: false

Esta 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.yaml

Verifica 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-backup

Salida 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>          1m

Comprueba los PVCs:

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

Comprueba 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.meta

Un 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ámetroRequeridoPredeterminadoDescripción
scheduleSí—Expresión de programación cron (zona horaria UTC).
backupStorageClassSí—Clase de almacenamiento para los PVCs de backup.
retentionNo7Número de backups a retener por clúster.
pvcSizeNo10GiTamaño del PVC por clúster.
postgresImageNoDetección automáticaImagen PostgreSQL para los trabajos de backup.
clustersNoClústeres predeterminadosLista 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 datosPVC recomendadoRetención
Menos de 1 GB5 Gi7
1–5 GB10 Gi7
5–20 GB50 Gi7
20–50 GB100 Gi5
Más de 50 GBPersonalizado3–5
¿Cómo es este tema?