1️⃣ 개요
StatefulSet을 운영할 때 스토리지 장애, 클러스터 장애, 데이터 손실 등의 위험에 대비하는 Disaster Recovery(재해 복구) 전략이 필수적입니다.
특히, StatefulSet은 데이터 정합성이 중요하므로 백업과 복구 절차를 사전에 마련해 두어야 안정적인 운영이 가능합니다.
이번 글에서는 StatefulSet에서 발생할 수 있는 장애 유형과, 이를 대비한 백업 및 복구 전략을 설명하겠습니다. 🚀
2️⃣ StatefulSet 운영 중 발생할 수 있는 장애 유형
📌 StatefulSet 환경에서 주로 발생하는 장애 유형
장애 유형 | 설명 | 대응 방법 |
Pod 장애 | 특정 Pod가 다운되거나 응답하지 않음 | Liveness Probe 및 Auto Healing 활용 |
스토리지 장애 | PVC/PV가 손실되거나 스토리지 백엔드 문제 발생 | 스토리지 백업 및 복구 절차 마련 |
클러스터 장애 | 전체 Kubernetes 클러스터 장애 | 멀티 클러스터 DR(Disaster Recovery) 전략 적용 |
데이터 손실 | 실수로 데이터 삭제 또는 손상 발생 | 정기적인 Snapshot 및 백업 수행 |
✅ 각 장애 유형별로 사전 대응 전략이 필요합니다.
3️⃣ StatefulSet의 백업 전략
✅ 1. Persistent Volume Snapshot을 활용한 백업
Kubernetes는 VolumeSnapshot을 활용하여 StatefulSet 데이터를 백업할 수 있습니다.
📌 (1) Snapshot을 지원하는 스토리지 클래스 확인
kubectl get volumesnapshotclass
출력 예시:
NAME DRIVER DELETIONPOLICY
csi-aws-ebs ebs.csi.aws.com Delete
csi-azure-disk disk.csi.azure.com Retain
📌 (2) Volume Snapshot 생성
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: mysql-snapshot
spec:
volumeSnapshotClassName: csi-aws-ebs
source:
persistentVolumeClaimName: mysql-data-mysql-0
📌 (3) Snapshot 생성 명령어 실행
kubectl apply -f mysql-snapshot.yaml
kubectl get volumesnapshot
출력 예시:
NAME READY SOURCEPVC CREATIONTIME
mysql-snapshot true mysql-data-mysql-0 2024-03-12
✅ 이제 mysql-snapshot을 활용하여 복구할 수 있습니다.
✅ 2. Velero를 활용한 전체 백업 및 복구
Velero는 Kubernetes 리소스와 스토리지를 통합적으로 백업하는 도구입니다.
📌 (1) Velero 설치 (AWS 예제)
velero install --provider aws --bucket my-velero-backup --backup-location-config region=us-west-2
📌 (2) StatefulSet 및 PVC 백업 실행
velero backup create mysql-backup --include-namespaces=default
📌 (3) 백업 상태 확인
velero backup get
📌 (4) 백업에서 복구 실행
velero restore create --from-backup mysql-backup
✅ Velero를 활용하면 전체 StatefulSet과 데이터를 쉽게 복구할 수 있습니다.
4️⃣ StatefulSet의 Disaster Recovery 전략
✅ 1. Multi-Cluster Disaster Recovery (다중 클러스터 DR 전략)
📌 다른 클러스터로 데이터를 복제하는 방법
• Cross-Cluster Volume Replication (Ceph, Portworx 활용)
• 스토리지 백엔드 간 복제 설정 (AWS S3, GCP Filestore, NFS)
• GitOps(ArgoCD) + 백업 도구(Velero) 조합 활용
📌 Ceph RBD 기반 다중 클러스터 복제 설정 예제
apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata:
name: replicated-pool
spec:
failureDomain: osd
replicated:
size: 3
mirroring:
enabled: true
mode: image
✅ 멀티 클러스터 DR을 적용하면 장애 발생 시 즉시 복구가 가능합니다.
✅ 2. StatefulSet을 다른 클러스터로 복제하여 즉시 복구하는 방법
📌 (1) StatefulSet 및 PVC 백업
kubectl get statefulset -n default -o yaml > statefulset-backup.yaml
kubectl get pvc -n default -o yaml > pvc-backup.yaml
📌 (2) 새로운 클러스터에 StatefulSet 배포
kubectl apply -f statefulset-backup.yaml
📌 (3) 스토리지 동기화 수행
rsync -avz /mnt/data/ mysql-user@new-cluster:/mnt/data/
✅ 스토리지를 다른 클러스터로 동기화하면 장애 발생 시 빠르게 복구할 수 있습니다.
5️⃣ StatefulSet 재해 복구 테스트 및 모니터링
✅ 1. DR(Disaster Recovery) 복구 테스트
📌 복구 테스트 체크리스트
• ✅ 최신 백업에서 복구가 정상적으로 수행되는지 확인
• ✅ StatefulSet Pod가 올바르게 실행되는지 검증
• ✅ 데이터 정합성 검증 (데이터 손실 여부 확인)
📌 복구 후 Pod 상태 확인
kubectl get pods -o wide
✅ 정기적인 복구 테스트를 통해 장애 발생 시 신속한 대응이 가능해야 합니다.
✅ 2. StatefulSet 백업 및 DR 상태 모니터링
📌 Prometheus를 활용한 StatefulSet 및 스토리지 모니터링
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: statefulset-monitor
spec:
selector:
matchLabels:
app: mysql
endpoints:
- port: metrics
interval: 30s
📌 Grafana에서 StatefulSet 백업 및 PVC 상태 대시보드 구축
• PVC 사용량 및 가용량 그래프 추가
• Velero 백업 성공률 모니터링 대시보드 설정
• 스토리지 장애 발생 시 알람 설정
✅ 모니터링을 활용하면 DR 전략이 정상적으로 작동하는지 지속적으로 확인할 수 있습니다.
🔥 6️⃣ 결론
✔ StatefulSet의 데이터는 중요하므로, 백업 및 재해 복구 전략을 반드시 수립해야 함
✔ VolumeSnapshot을 활용하여 특정 시점의 PVC 상태를 저장하고 복구할 수 있음
✔ Velero를 활용하면 전체 StatefulSet과 데이터를 통합적으로 백업 및 복구 가능
✔ 멀티 클러스터 DR(Disaster Recovery) 전략을 적용하면 장애 발생 시 즉시 복구 가능
✔ StatefulSet 재해 복구 테스트 및 모니터링을 통해 안정적인 운영을 보장해야 함