Programar copias de seguridad

Configura y gestiona programas automáticos de backup de PostgreSQL para IBM Bob, incluidas expresiones cron, políticas de retención, suspensión y reanudación, y monitorización.

Los backups programados automatizan la protección de la base de datos y reducen el riesgo de pérdida de datos. IBM Bob utiliza Kubernetes CronJobs para ejecutar los backups según el programa definido en la configuración de backup.

Nota:

De forma predeterminada, los backups se ejecutan usando la Hora Universal Coordinada (UTC).

Configurar programas de backup

Configura un programa de backup actualizando el campo schedule en el ConfigMap de configuración de backup. El valor utiliza la sintaxis cron estándar y determina con qué frecuencia se ejecutan los trabajos de backup.

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

    # ... other configuration ...

Entender la sintaxis cron

Los programas cron constan de cinco campos que definen la frecuencia de ejecución.

CampoValoresCaracteres especiales
Minuto0–59*, ,, -, /
Hora0–23*, ,, -, /
Día1–31*, ,, -, /
Mes1–12*, ,, -, /
Día de la semana0–7 (0 y 7 representan el domingo)*, ,, -, /

Elige un programa que se ajuste a tus objetivos de punto de recuperación (RPO) y requisitos empresariales.

Consideraciones de programación

Zona horaria (UTC)

Todos los programas se ejecutan en zona horaria UTC. Planifica los programas según la hora UTC, no según tu hora local. Por ejemplo:

  • 0 2 * * * = 2:00 AM UTC = 4:00 AM CEST (verano) o 3:00 AM CET (invierno)

Backups concurrentes

Todos los clústeres configurados realizan backup simultáneamente en el mismo programa. Esto multiplica la carga de E/S de almacenamiento y comparte el ancho de banda de red entre todos los backups. Para escalonar los backups en entornos con recursos limitados, crea múltiples ConfigMaps con diferentes programas:

# ConfigMap 1: bob-db at 2 AM
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: bob-db-backup-config
  labels:
    bob.ibm.com/backup-config: "true"
data:
  config.yaml: |
    schedule: "0 2 * * *"
    clusters:
      - name: bob-db
        database: bob
        secretName: bob-db-app
---
# ConfigMap 2: keycloak-db at 3 AM
apiVersion: v1
kind: ConfigMap
metadata:
  name: keycloak-db-backup-config
  labels:
    bob.ibm.com/backup-config: "true"
data:
  config.yaml: |
    schedule: "0 3 * * *"
    clusters:
      - name: bob-keycloak-db
        database: app
        secretName: bob-keycloak-db-app

Duración del backup

Ten en cuenta el tamaño de la base de datos al programar para evitar solapamientos entre ejecuciones de backup.

Tamaño de la base de datosDuración esperada
Menos de 1 GB1–5 minutos
1–5 GB5–15 minutos
5–20 GB15–45 minutos
20–50 GB45–120 minutos
Más de 50 GB2+ horas

Horas de baja actividad

Programa los backups durante los períodos de bajo uso. Evita las horas pico de actividad empresarial y supervisa el rendimiento de la base de datos durante los backups.

Cambiar el programa

Para actualizar el programa de backup, edita el ConfigMap de backup:

oc edit configmap bob-postgres-backup-config -n <bob-instance-namespace>

Actualiza el campo schedule y guarda. El controlador detecta automáticamente el cambio y actualiza los CronJobs.

Verifica el programa actualizado:

oc get cronjob bob-db-backup-cronjob -n <bob-instance-namespace> -o jsonpath='{.spec.schedule}'

Suspender y reanudar los backups

Si necesitas pausar los backups durante el mantenimiento sin eliminar la configuración de backup, suspende los backups en el recurso personalizado de Bob:

oc patch bob bob-instance -n <bob-instance-namespace> --type=merge \
  -p '{"spec":{"postgresBackup":{"suspend":true}}}'

Suspender los backups preserva todos los recursos de backup existentes mientras evita que se ejecuten nuevos trabajos.

Verifica que los CronJobs están suspendidos:

oc get cronjobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup
# The SUSPEND column should show "True"

Reanuda los backups una vez completado el mantenimiento:

oc patch bob bob-instance -n <bob-instance-namespace> --type=merge \
  -p '{"spec":{"postgresBackup":{"suspend":false}}}'

Monitorizar la actividad de backup

La monitorización regular ayuda a garantizar que los trabajos de backup continúen ejecutándose correctamente y que se puedan cumplir los objetivos de recuperación.

# List recent backup jobs
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup \
  --sort-by=.metadata.creationTimestamp

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

# View last scheduled time
oc get cronjob bob-db-backup-cronjob -n <bob-instance-namespace> \
  -o jsonpath='{.status.lastScheduleTime}'

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

Investiga los fallos rápidamente para evitar vacíos en la cobertura de backup.

Gestionar la retención de backups

Las políticas de retención determinan cuántas copias de backup se almacenan antes de que los backups más antiguos sean eliminados automáticamente.

data:
  config.yaml: |
    # Number of backups to retain per cluster
    retention: 7  # Keep last 7 backups

Los valores de retención más altos mejoran la flexibilidad de recuperación pero requieren almacenamiento adicional.

Comportamiento de la retención:

  • Los backups más antiguos se eliminan automáticamente después de cada backup exitoso.
  • La retención es por clúster — cada clúster mantiene su propio contador.
  • La limpieza ocurre inmediatamente después de la creación del backup.

Por ejemplo, con retention: 7:

  • Días 1–7: Se acumulan 7 backups.
  • Día 8: Se crea un nuevo backup y se elimina el backup del día 1.
  • Día 9: Se crea un nuevo backup y se elimina el backup del día 2.

Activar un backup manual

Para activar manualmente un backup fuera del programa:

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

Buenas prácticas

  • Programa los backups durante las horas de baja actividad (normalmente de 2–4 AM, hora local).
  • Usa un programa consistente para facilitar la previsibilidad.
  • Recuerda la zona horaria UTC al configurar los programas.
  • Escala los backups si los recursos son limitados.
  • Supervisa el éxito de los backups regularmente.
  • Prueba los procedimientos de restauración mensualmente.
  • Documenta el programa y la justificación.
  • Configura alertas para los fallos de backup.
¿Cómo es este tema?