バックアップの実行

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

この設定により、オペレーターがバックアップリソースを自動的に作成および管理するよう指示します。

更新したカスタムリソースを適用します。

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>          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 から 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 Gi7
1〜5 GB10 Gi7
5〜20 GB50 Gi7
20〜50 GB100 Gi5
50 GB 超カスタム3〜5
このトピックはいかがですか?