1. Kubernetes 백업 및 복구 개요
Kubernetes 환경에서 데이터 손실이나 시스템 장애 발생 시 신속하게 복구할 수 있도록
백업 및 복구 전략을 수립하는 것이 중요하다.
🔹 ETCD 백업 및 복구 → 클러스터 상태 및 설정 데이터 보호
🔹 Persistent Volume(PV) Snapshot → 애플리케이션 데이터를 보호
🔹 Disaster Recovery(재해 복구) 계획 → 대규모 장애 시 클러스터 복구
2. ETCD 백업 및 복구
1) ETCD 개요
ETCD는 Kubernetes의 모든 상태 정보를 저장하는 Key-Value Store이다.
클러스터 구성을 보존하려면 ETCD 데이터를 주기적으로 백업해야 한다.
📌 ETCD에서 관리하는 주요 데이터
- 클러스터 노드 정보
- 네임스페이스, 서비스, ConfigMap, Secret
- Pod 및 Deployment 정보
2) ETCD 백업 방법
🔹 백업 실행
ETCD 데이터를 백업하려면 etcdctl
명령어를 사용한다.
ETCDCTL_API=3 etcdctl snapshot save /backup/etcd-snapshot.db \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key
ls -lh /backup/
📌 실행 결과:
/backup/etcd-snapshot.db
파일이 생성됨
3) ETCD 복구 방법
🔹 복구 실행
ETCD가 손상되었을 때 기존 백업 파일을 이용해 복원할 수 있다.
ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-snapshot.db \
--data-dir=/var/lib/etcd-new
🔹 ETCD 데이터 디렉토리 변경 후 클러스터 재시작
mv /var/lib/etcd /var/lib/etcd-old
mv /var/lib/etcd-new /var/lib/etcd
systemctl restart kube-apiserver
systemctl restart etcd
📌 실행 결과:
ETCD가 백업 시점으로 복구됨
3. Persistent Volume(PV) Snapshot
1) PV Snapshot 개요
Kubernetes에서 Persistent Volume(PV)의 데이터를 보호하기 위해 스냅샷을 생성할 수 있다.
스냅샷은 스토리지 레벨에서 볼륨의 특정 시점을 저장하는 방식이다.
📌 지원되는 스냅샷 기능
- VolumeSnapshotClass → 스냅샷 저장 방식 정의
- VolumeSnapshot → 특정 볼륨의 스냅샷 생성
- VolumeSnapshotContent → 스냅샷의 실제 데이터 저장
2) PV Snapshot 생성
🔹 VolumeSnapshotClass 정의
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: snapshot-class
driver: ebs.csi.aws.com # 사용하는 스토리지 드라이버 지정
deletionPolicy: Delete
kubectl apply -f snapshot-class.yaml
🔹 VolumeSnapshot 생성
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: my-volume-snapshot
spec:
volumeSnapshotClassName: snapshot-class
source:
persistentVolumeClaimName: my-pvc # 기존 PVC 지정
kubectl apply -f volume-snapshot.yaml
📌 실행 결과:
my-pvc
의 데이터를 스냅샷으로 저장
3) PV Snapshot 복원
🔹 VolumeSnapshot을 새로운 PVC로 복원
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: restored-pvc
spec:
dataSource:
name: my-volume-snapshot
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
kubectl apply -f restored-pvc.yaml
📌 실행 결과:
기존 볼륨 데이터가restored-pvc
로 복원됨
4. Disaster Recovery(재해 복구) 계획
1) 재해 복구 전략 수립
대규모 장애 발생 시 클러스터를 신속하게 복구할 수 있도록 사전에 준비해야 한다.
📌 재해 복구 구성 요소
전략 | 설명 |
---|---|
ETCD 백업 | 클러스터 상태 데이터 보호 |
PV Snapshot | 애플리케이션 데이터 보호 |
Multi-Cluster 설정 | 여러 리전에서 클러스터 운영 |
GitOps 방식 배포 | 코드 기반 복구 (예: ArgoCD, Flux) |
RTO/RPO 목표 설정 | 복구 시간 및 데이터 유실 목표 정의 |
2) Multi-Cluster(다중 클러스터) 구성
재해 복구를 강화하려면 다중 클러스터 환경을 구축하고, 트래픽을 분산시켜야 한다.
🔹 Primary Cluster → 메인 클러스터 운영
🔹 Secondary Cluster → 백업 클러스터 운영
🔹 Global Load Balancer → 장애 발생 시 트래픽을 다른 클러스터로 전환
🔹 Multi-Cluster 예제: 클러스터 간 동기화 (ArgoCD 활용)
argocd app create my-app --repo https://github.com/myrepo.git \
--path my-app \
--dest-server https://secondary-cluster-api-server \
--dest-namespace default
5. 장애 대응 및 복구 최적화 전략
✅ ETCD 정기 백업 수행 → 클러스터 상태를 보호
✅ PV Snapshot을 활용하여 애플리케이션 데이터 보호
✅ Multi-Cluster 구성으로 대규모 장애 대응
✅ GitOps 방식(ArgoCD, Flux)으로 코드 기반 복구
✅ 재해 복구 목표(RTO/RPO)를 명확하게 설정
6. 결론
✅ Kubernetes에서는 ETCD 백업을 통해 클러스터 상태를 보호
✅ PV Snapshot을 활용하여 애플리케이션 데이터를 손실 없이 복원 가능
✅ Multi-Cluster 및 Disaster Recovery 계획을 통해 대규모 장애에 대비
✅ GitOps 방식으로 빠르고 자동화된 복구 가능