Velero 복구(Restore) 전략
1️⃣ Velero Restore 개념 및 동작 방식
Velero의 복구(Restore)는 백업된 Kubernetes 리소스 및 Persistent Volume(PV) 데이터를 기존 클러스터 또는 새로운 클러스터로 되돌리는 과정입니다.
📌 Velero의 핵심 복구 개념
Restore
: 백업된 데이터에서 리소스를 복구하는 단위Backup
: 복구할 데이터를 저장하는 백업Restic
: PV 데이터를 파일 단위로 복구하는 옵션Volume Snapshot
: 클라우드 제공업체의 볼륨 스냅샷을 사용한 복구
✅ Velero 백업 리스트 조회
velero backup get
- 현재 사용 가능한 백업 목록을 확인
✅ Velero 복구 가능한 리소스 확인
velero restore get
- 기존에 실행된 복구 목록을 확인
2️⃣ 전체 클러스터 복구 방법
클러스터 전체를 복구하려면 Velero의 restore
기능을 활용하면 됩니다.
1. 기본적인 전체 클러스터 복구
velero restore create full-cluster-restore --from-backup full-cluster-backup
full-cluster-backup
백업에서 전체 클러스터를 복구- 모든 네임스페이스 및 리소스가 포함됨
✅ 복구 진행 상태 확인
velero restore describe full-cluster-restore --details
✅ 복구된 리소스 목록 확인
kubectl get all --all-namespaces
⚠️ 주의:
- 기존 리소스가 존재할 경우 충돌이 발생할 수 있음
- 기존 리소스를 삭제한 후 복구를 수행하는 것이 안전함
3️⃣ 특정 네임스페이스 및 리소스 복구 방법
전체 클러스터가 아닌 특정 네임스페이스 또는 리소스만 복구할 수도 있습니다.
1. 특정 네임스페이스 복구
velero restore create my-namespace-restore --from-backup my-namespace-backup --include-namespaces=my-namespace
my-namespace
네임스페이스만 복구
✅ 복구된 네임스페이스 리소스 확인
kubectl get all -n my-namespace
2. 특정 리소스(Deployment, ConfigMap, Secret 등) 복구
velero restore create my-config-restore --from-backup my-config-backup --include-resources=configmaps,secrets
ConfigMap
및Secret
만 복구
✅ 특정 리소스 복구 결과 확인
kubectl get configmaps,secrets -n my-namespace
✅ 복구 시 기존 리소스를 덮어쓰기 (이미 존재하는 리소스를 덮어씌우려면 --overwrite
옵션 추가)
velero restore create force-restore --from-backup my-backup --overwrite
4️⃣ Volume Snapshot을 활용한 복구
클라우드 환경에서는 볼륨 스냅샷을 사용하여 빠르게 Persistent Volume(PV)을 복구할 수 있습니다.
✅ 볼륨 스냅샷으로 복구하기
velero restore create pv-restore --from-backup pv-snapshot-backup --restore-volumes=true
✅ 복구된 Persistent Volume 확인
kubectl get pv
📌 볼륨 스냅샷을 활용한 복구 특징
- 클라우드 스토리지(S3, GCP, Azure)에서 직접 복구 가능
- 기존 PVC와 연결되며, 데이터 무결성을 유지
✅ PVC를 복구한 후 Pod 재시작
kubectl delete pod -n my-namespace --all
5️⃣ Restic을 이용한 파일 단위 복구
온프레미스 환경 또는 개별 파일 단위 복구가 필요할 때 Restic
을 활용할 수 있습니다.
1. Restic 백업된 볼륨 목록 확인
velero backup describe restic-backup --details
2. Restic을 사용하여 파일 단위로 복구
velero restore create restic-restore --from-backup restic-backup
✅ Restic이 적용된 볼륨 목록 확인
kubectl get pod -n my-namespace -o jsonpath='{.spec.volumes[*].persistentVolumeClaim.claimName}'
✅ Restic을 활용한 특정 PVC 복구 예제
apiVersion: velero.io/v1
kind: Restore
metadata:
name: restore-with-restic
spec:
backupName: restic-backup
includedNamespaces:
- my-app
restorePVs: true
📌 Restic 복구 특징
- 볼륨이 아닌 파일 단위로 복구 가능
- 클라우드 환경뿐만 아니라 온프레미스 환경에서도 유용
6️⃣ 복구 시 발생하는 이슈 및 해결 방법
✅ 문제: 복구된 리소스가 기존 리소스와 충돌하는 경우
🔹 해결 방법:
- 기존 리소스를 삭제하고 다시 복구
kubectl delete namespace my-namespace
velero restore create my-restore --from-backup my-backup
- 또는
--overwrite
옵션을 사용하여 기존 리소스를 덮어쓰기
velero restore create my-restore --from-backup my-backup --overwrite
✅ 문제: PVC가 복구되지 않음
🔹 해결 방법:
- 복구 시
--restore-volumes
옵션을 추가
velero restore create my-restore --from-backup my-backup --restore-volumes=true
- 볼륨이 스냅샷으로 존재하는지 확인
velero backup describe my-backup --details
✅ 문제: 복구가 정상적으로 완료되지 않음
🔹 해결 방법:
- 복구 로그 확인
velero restore describe my-restore --details
- 문제 발생 시
kubectl describe
명령어로 Pod 상태 확인
kubectl describe pod -n my-namespace
7️⃣ 복구 로그 분석 및 트러블슈팅
Velero에서 복구 진행 상태를 분석하려면 restore describe
명령어를 사용하면 됩니다.
✅ 복구 진행 상태 확인
velero restore get
✅ 복구 상세 로그 분석
velero restore describe my-restore --details
✅ 복구 중 발생한 오류 확인
kubectl logs deployment/velero -n velero
✅ 복구 후 리소스 정합성 확인
kubectl get all -n my-namespace
✅ PVC 연결 문제 확인
kubectl get pvc -n my-namespace
⚠️ 복구 후 네트워크 및 인그레스(ingress) 설정 확인 필요
kubectl get ingress -n my-namespace