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-appAplique o ConfigMap:
oc apply -f backup-config.yamlHabilite 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: falseEssa configuração instrui o operador a criar e gerenciar os recursos de backup automaticamente.
Aplique o recurso personalizado atualizado:
oc apply -f bob-cr.yamlVerifique 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-backupSaí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> 1mVerifique os PVCs:
oc get pvc -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backupVerifique 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.metaUm 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âmetro | Obrigatório | Padrão | Descrição |
|---|---|---|---|
schedule | Sim | — | Expressão de agendamento cron (fuso horário UTC). |
backupStorageClass | Sim | — | Classe de armazenamento para os PVCs de backup. |
retention | Não | 7 | Número de backups a reter por cluster. |
pvcSize | Não | 10Gi | Tamanho do PVC por cluster. |
postgresImage | Não | Detecção automática | Imagem PostgreSQL para jobs de backup. |
clusters | Não | Clusters padrão | Lista 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 dados | PVC recomendado | Retenção |
|---|---|---|
| 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 |
| Mais de 50 GB | Personalizado | 3–5 |