백업 수행

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"  # 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-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에서 일회성 백업 작업을 생성합니다:

# 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"
        }
      }]
    }
  }'

# 파드 내부:
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
이 주제는 어떤가요?