Realizando um backup

Configure backups automatizados do PostgreSQL para bancos de dados do IBM Bob e verifique se os jobs de backup estão sendo executados corretamente.

Use este procedimento para configurar backups automatizados do PostgreSQL para bancos de dados do IBM Bob. Após a configuração dos backups, o operador cria e gerencia automaticamente os jobs de backup agendados.

Antes de começar

Antes de configurar os backups, verifique os seguintes pré-requisitos:

  • Uma classe de armazenamento compatível está disponível no cluster.
  • Os secrets de credenciais do banco de dados existem.
  • Capacidade de armazenamento suficiente está alocada.
  • Os clusters PostgreSQL estão em execução e saudáveis.

Configurar e habilitar backups

Crie um ConfigMap de backup que defina o agendamento de backup, a política de retenção, a configuração de armazenamento e os clusters de banco de dados de destino.

O operador descobre automaticamente qualquer ConfigMap rotulado com:

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

Crie o arquivo de configuração:

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

Aplique o ConfigMap:

oc apply -f backup-config.yaml

Habilite o gerenciamento de backup no recurso personalizado Bob:

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

Essa configuração instrui o operador a criar e gerenciar os recursos de backup automaticamente.

Aplique o recurso personalizado atualizado:

oc apply -f bob-cr.yaml

Verifique se o operador criou com sucesso a infraestrutura de backup agendado.

Verifique os CronJobs:

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

Saída 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

Verifique os PVCs:

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

Verifique o ConfigMap do script de backup:

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

Verifique os eventos do Bob CR:

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

A IBM recomenda executar um backup manual após a configuração inicial. Um backup de teste valida conectividade, permissões, configuração de armazenamento e execução do backup antes de depender dos backups agendados.

Crie um job de backup único a partir do CronJob gerado:

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

Após a conclusão do backup, valide se os arquivos de backup foram criados com sucesso.

Verifique o seguinte:

  • O job foi concluído com sucesso.
  • O arquivo de backup existe.
  • O arquivo de metadados existe.
  • O tamanho do backup parece razoável.
  • Nenhum erro aparece nos logs do job.
# 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

Um backup bem-sucedido produz uma saída semelhante à seguinte:

==========================================
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 configuração

ParâmetroObrigatórioPadrãoDescrição
scheduleSim—Expressão de agendamento cron (fuso horário UTC).
backupStorageClassSim—Classe de armazenamento para os PVCs de backup.
retentionNão7Número de backups a reter por cluster.
pvcSizeNão10GiTamanho do PVC por cluster.
postgresImageNãoDetecção automáticaImagem PostgreSQL para jobs de backup.
clustersNãoClusters padrãoLista de clusters para backup.

Diretrizes de dimensionamento de armazenamento

Para calcular o armazenamento necessário por cluster:

Tamanho necessário = (tamanho do banco de dados × 0,3) × retenção × 1,5

Exemplo:
- Banco de dados: 5 GB
- Compressão: 0,3 (70% de compressão)
- Retenção: 7 backups
- Fator de segurança: 1,5

Necessário: 5 × 0,3 × 7 × 1,5 = 15,75 GB ≈ 20 GB
Tamanho do banco de dadosPVC recomendadoRetenção
Menos de 1 GB5 Gi7
1–5 GB10 Gi7
5–20 GB50 Gi7
20–50 GB100 Gi5
Mais de 50 GBPersonalizado3–5
Como está este tópico?