執行備份
為 IBM Bob 資料庫設定自動 PostgreSQL 備份,並驗證備份工作是否正常運作。
使用此程序為 IBM Bob 資料庫設定自動 PostgreSQL 備份。備份設定完成後,Operator 會自動建立和管理排程備份工作。
開始之前
在設定備份之前,請驗證以下先決條件:
- 叢集中有可用的受支援儲存類別(Storage Class)。
- 資料庫憑證 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 |
這個主題如何?