Kubernetes의 백업 및 복구 전략: ETCD 백업, Volume Snapshot, Disaster Recovery


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 방식으로 빠르고 자동화된 복구 가능

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다