执行备份
为 IBM Bob 数据库配置自动 PostgreSQL 备份,并验证备份任务是否正常运行。
使用此流程为 IBM Bob 数据库配置自动 PostgreSQL 备份。备份配置完成后,Operator 会自动创建和管理计划备份任务。
开始之前
在配置备份之前,请验证以下先决条件:
- 集群中有可用的受支持存储类。
- 数据库凭证 Secret 已存在。
- 已分配足够的存储容量。
- PostgreSQL 集群正在运行且健康。
配置并启用备份
创建一个备份 ConfigMap,用于定义备份计划、保留策略、存储配置和目标数据库集群。
Operator 会自动发现带有以下标签的 ConfigMap:
bob.ibm.com/backup-config: "true"创建配置文件:
apiVersion: v1
kind: ConfigMap
metadata:
name: bob-postgres-backup-config
namespace: <bob-instance-namespace>
labels:
bob.ibm.com/backup-config: "true" # 必填
app.kubernetes.io/name: bob
app.kubernetes.io/component: postgres-backup
data:
config.yaml: |
# 备份计划(cron 格式,UTC 时区)
schedule: "0 2 * * *"
# 备份 PVC 的存储类
backupStorageClass: "nfs-storage"
# 每个集群保留的备份数量(默认:7)
retention: 7
# 每个集群的备份 PVC 大小(默认:10Gi)
pvcSize: "10Gi"
# 可选:PostgreSQL 镜像覆盖
# 如未指定,镜像将从运行中的集群自动检测
# postgresImage: "icr.io/cpopen/ibm-postgresql:16.4"
# 要备份的集群
# 如省略,默认为 bob-db 和 bob-keycloak-db
clusters:
- name: bob-db
database: bob
secretName: bob-db-app
- name: bob-keycloak-db
database: app # 注意:Keycloak 数据库名为 "app"
secretName: bob-keycloak-db-app应用 ConfigMap:
oc apply -f backup-config.yaml在 Bob 自定义资源中启用备份管理:
apiVersion: bob.ibm.com/v1beta1
kind: Bob
metadata:
name: bob-instance
namespace: <bob-instance-namespace>
spec:
postgresBackup:
enabled: true
suspend: false此设置指示 Operator 自动创建和管理备份资源。
应用更新后的自定义资源:
oc apply -f bob-cr.yaml验证 Operator 是否成功创建了计划备份基础设施。
检查 CronJob:
oc get cronjobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup预期输出:
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检查 PVC:
oc get pvc -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup检查备份脚本 ConfigMap:
oc get configmap postgres-backup-script -n <bob-instance-namespace>检查 Bob CR 事件:
oc describe bob bob-instance -n <bob-instance-namespace>IBM 建议在初始配置后运行一次手动备份。测试备份可在依赖计划备份之前验证连接性、权限、存储配置和备份执行。
从已生成的 CronJob 创建一次性备份任务:
# 手动从 CronJob 创建任务
oc create job --from=cronjob/bob-db-backup-cronjob manual-backup-$(date +%s) -n <bob-instance-namespace>
# 监控任务
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup
# 查看任务日志
oc logs -n <bob-instance-namespace> job/manual-backup-<timestamp>备份完成后,验证备份文件是否已成功创建。
请验证以下内容:
- 任务已成功完成。
- 备份文件存在。
- 元数据文件存在。
- 备份大小合理。
- 任务日志中没有错误。
# 检查任务状态
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup
# 查看备份日志
oc logs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup --tail=50
# 访问备份文件
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"
}
}]
}
}'
# 在 pod 内部执行:
ls -lh /backups/bob-db/
cat /backups/bob-db/backup_bob_*.sql.gz.meta成功的备份将产生类似以下内容的输出:
==========================================
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
==========================================配置参数
| 参数 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|
schedule | 是 | — | Cron 计划表达式(UTC 时区)。 |
backupStorageClass | 是 | — | 备份 PVC 的存储类。 |
retention | 否 | 7 | 每个集群保留的备份数量。 |
pvcSize | 否 | 10Gi | 每个集群的 PVC 大小。 |
postgresImage | 否 | 自动检测 | 备份任务使用的 PostgreSQL 镜像。 |
clusters | 否 | 默认集群 | 要备份的集群列表。 |
存储大小指南
计算每个集群所需存储的公式:
所需大小 = (数据库大小 × 0.3)× 保留数量 × 1.5
示例:
- 数据库:5 GB
- 压缩率:0.3(压缩 70%)
- 保留数量:7 个备份
- 安全系数:1.5
所需:5 × 0.3 × 7 × 1.5 = 15.75 GB ≈ 20 GB| 数据库大小 | 推荐 PVC | 保留数量 |
|---|---|---|
| 小于 1 GB | 5 Gi | 7 |
| 1–5 GB | 10 Gi | 7 |
| 5–20 GB | 50 Gi | 7 |
| 20–50 GB | 100 Gi | 5 |
| 大于 50 GB | 自定义 | 3–5 |
这个主题怎么样?