バックアップの実行
IBM Bob データベースの PostgreSQL バックアップを自動化するための設定と、バックアップジョブが正常に実行されていることの確認方法。
この手順を使用して、IBM Bob データベースの PostgreSQL バックアップを自動化するための設定を行います。バックアップが設定されると、オペレーターはスケジュールされたバックアップジョブを自動的に作成および管理します。
始める前に
バックアップを設定する前に、以下の前提条件を確認してください。
- サポートされているストレージクラスがクラスターで利用可能であること。
- データベースクレデンシャル Secret が存在すること。
- 十分なストレージ容量が割り当てられていること。
- PostgreSQL クラスターが実行中で正常であること。
バックアップの設定と有効化
バックアップスケジュール、保持ポリシー、ストレージ設定、ターゲットデータベースクラスターを定義するバックアップ ConfigMap を作成します。
オペレーターは以下のラベルが付いた 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-appConfigMap を適用します。
oc apply -f backup-config.yamlBob カスタムリソースでバックアップ管理を有効にします。
apiVersion: bob.ibm.com/v1beta1
kind: Bob
metadata:
name: bob-instance
namespace: <bob-instance-namespace>
spec:
postgresBackup:
enabled: true
suspend: falseこの設定により、オペレーターがバックアップリソースを自動的に作成および管理するよう指示します。
更新したカスタムリソースを適用します。
oc apply -f bob-cr.yamlオペレーターがスケジュールされたバックアップインフラを正常に作成したことを確認します。
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> 1mPVC を確認します。
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 から 1 回限りのバックアップジョブを作成します。
# 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 |