백업 수행
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-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에서 일회성 백업 작업을 생성합니다:
# 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 Gi | 7 |
| 1–5 GB | 10 Gi | 7 |
| 5–20 GB | 50 Gi | 7 |
| 20–50 GB | 100 Gi | 5 |
| 50 GB 초과 | 사용자 정의 | 3–5 |
이 주제는 어떤가요?