MinIO R2 백업 DR
조사된 증거에는 단일 중단 기록이 아닌 2026년 4월 15일의 설계 수정 순서가 나와 있습니다. 최종 상태는 MinIO 버킷에 대한 변경이 불가능하고 타임스탬프가 지정된 R2 스냅샷 흐름과 별도로 예약된 infra-db에 대한 CNPG 기본 백업입니다.
소스 경로
lumie-infra/bootstrap/minio/manifests/r2-snapshot-cronjob.yamllumie-infra/bootstrap/minio/manifests/r2-barman-vss.yamllumie-infra/storage/infra-db/manifests/scheduled-backup.yamllumie-infra/storage/infra-db/manifests/r2-barman-vss.yamllumie-infra/observability/prometheus/helm-values.yaml
달라진 점
| 커밋 | 변경 | 최종 디자인으로 남지 않은 이유 |
|---|---|---|
a920ac08 | R2에 대한 MinIO 서버 측 복제 | R2는 MinIO가 기대하는 전체 S3 복제 계약을 충족하지 못했습니다. |
112bf594 | 복제를 위한 버킷별 R2 대상 | 접두사 대상이 지원되지 않았으며 복제 경로가 여전히 R2 의미 체계에 의해 차단되었습니다 |
e2e842ea | mc mirror 15분마다 CronJob | 복제보다 낫지만 여전히 변경 가능한 경로에 다시 기록됨 |
3385be4e | vault 제거, zot 유지, 메모리 증가 | zot 목록은 비용이 많이 들었고 vault에는 다른 내구성 의미가 필요했습니다. |
851e2e6f | zot 제거, vault 유지, 메모리 감소 | 비용과 복원 가치의 균형이 다시 변경되었습니다 |
06253107 | 미러 범위에서 vault를 제거했습니다. | Vault는 정상 작동 중에 규정 준수 잠금 |
945cd24a | 타임스탬프가 있는 스냅샷으로 전환 및 04:00 KST 백업 의도 정렬 | 현재 저장소와 일치하는 모양입니다 |
34d35077 | CNPG CRON_TZ를 일반 UTC로 변환 | CNPG 입학은 시간대가 앞에 붙은 일정을 거부 |
최종 repo 관리 계약
현재 MinIO DR 경로는 minio-r2-snapshot라는 CronJob입니다.
spec:
timeZone: "Asia/Seoul"
schedule: "0 4,16 * * *"
...
BUCKETS="lumie lumie-dev vault"
...
TARGET="r2/lumie-dr/snapshots/$b/$TS/"
mc mirror --quiet "local/$b" "$TARGET"
출처: lumie-infra/bootstrap/minio/manifests/r2-snapshot-cronjob.yaml
이 디자인은 기존 R2 객체를 덮어쓰는 것을 방지합니다. 모든 실행은 Vault와 같은 변경 가능한 저장소에서도 규정 준수 잠금과 호환되는 새로운 타임스탬프 접두사를 작성합 니다.
infra-db 측은 별도이며 의도적으로 CNPG ScheduledBackup를 사용합니다.
spec:
# 04:00 KST = 19:00 UTC (CNPG ScheduledBackup does not accept CRON_TZ prefix)
schedule: "0 0 19 * * *"
출처: lumie-infra/storage/infra-db/manifests/scheduled-backup.yaml
두 경로 모두 동일한 Vault 경로에 의존하며 네임스페이스 로컬 r2-barman-creds 비밀로 렌더링됩니다.
destination:
create: true
name: r2-barman-creds
출처: lumie-infra/storage/infra-db/manifests/r2-barman-vss.yaml
현재 저장소에 남아 있는 교훈
- 여기에서는 Cloudflare R2를 드롭인 MinIO 복제 피어가 아닌 변경 불가능한 스냅샷 대상으로 취급합니다.
- 덮어쓰기 기반 미러 설계에서 Vault 객체 스토리지를 유지합니다. 타임스탬프가 있는 스냅샷은 체크인된 매니페스트에서 호환되는 패턴입니다.
- CNPG
ScheduledBackup에는 일반 UTC cron 표현식이 필요합니다. 체크인된 KST 의도는 댓글에만 존재합니다. - MinIO 버킷 및 PostgreSQL에 대한 백업은 하나의 공유 컨트롤러가 아닌 병렬 DR 표면입니다.
염두에 두어야 할 관측 가능성 드리프트
현재 Prometheus 규칙은 여전히 이전 디자인을 설명합니다.
- name: minio-replication.rules
...
- alert: MinIOReplicationLag
...
- alert: MinIOReplicationFailed
출처: lumie-infra/observability/prometheus/helm-values.yaml
이는 더 이상 활성 minio-r2-snapshot CronJob과 일치하지 않습니다. 백업 메커니즘이 이제 r2-barman-creds를 사용하여 타임스탬프가 지정된 스냅샷이더라도 검사된 저장소는 여전히 복제 지향 규칙 이름과 설명을 전달합니다.
확인
kubectl get cronjob -n minio minio-r2-snapshot
kubectl get jobs -n minio | rg minio-r2-snapshot
kubectl get scheduledbackup.postgresql.cnpg.io -n infra-db infra-db-daily -o yaml
kubectl get secret -n minio r2-barman-creds
kubectl get secret -n infra-db r2-barman-creds
성공은 스냅샷 CronJob이 존재하고, 최근 작업이 존재하며, infra-db-daily가 UTC 19:00 일정을 렌더링하고, 이를 사용하는 네임스페이스에 공유 R2 자격 증명 비밀이 존재함을 의미합니다.
관련 페이지
- MinIO 작업 참조
- 인프라 DB 운영 참고서
- 프로메테우스 작전 참조