티스토리 뷰
쿠버네티스 실습: Velero로 클러스터 백업 및 복구 자동화하기
앞선 글에서는 Prometheus Alertmanager와 Slack을 연동하여 SLA 기반 알림 시스템을 구축했습니다.
이번 글에서는 운영 환경에서 반드시 고려해야 할 클러스터 백업과 복구 전략을 다룹니다.
특히, 오픈소스 툴 Velero를 이용하여 쿠버네티스의 모든 리소스와 Persistent Volume(PV) 데이터를 자동으로 백업 및 복원하는 과정을 실습합니다.
1) Velero란?
Velero는 VMware에서 개발한 쿠버네티스 백업·복구 도구로, 다음 기능을 제공합니다.
- 클러스터 상태(Deployment, Service, ConfigMap, Secret, PVC 등) 백업
- Persistent Volume 스냅샷 백업
- 특정 네임스페이스/리소스 단위 복원
- 클라우드 스토리지(S3, GCS 등)에 원격 백업 저장
- 자동 스케줄링 및 증분 백업 지원
운영 중 장애나 노드 손실, 잘못된 배포로 인한 리소스 손실에 대비할 수 있습니다.
2) Velero 설치
2-1. CLI 설치 (macOS)
brew install velero
velero version
출력 예시:
Client:
Version: v1.14.0
Server: <not installed>
2-2. MinIO를 이용한 로컬 S3 스토리지 준비
Velero는 S3 호환 저장소를 필요로 합니다.
MinIO를 쿠버네티스 클러스터 내에 설치해 로컬 스토리지로 사용합니다.
helm repo add minio https://charts.min.io/
helm repo update
helm install minio minio/minio --set rootUser=admin,rootPassword=minio123 --namespace velero --create-namespace
접속 확인:
kubectl get svc -n velero
→ NodePort로 노출된 MinIO 웹 콘솔에서 admin / minio123으로 로그인.
2-3. Velero 서버 설치
credentials-velero 파일 생성:
[default]
aws_access_key_id = admin
aws_secret_access_key = minio123
설치 명령:
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.8.0 \
--bucket velero-backup \
--secret-file ./credentials-velero \
--use-volume-snapshots=false \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio.velero.svc.cluster.local:9000 \
--namespace velero
설치 확인:
kubectl get pods -n velero
출력 예시:
NAME READY STATUS AGE
velero-xxxxxx 1/1 Running 1m
3) 클러스터 백업
3-1. 전체 백업
velero backup create full-backup --include-namespaces default,team-a
백업 상태 확인:
velero backup get
3-2. 특정 리소스만 백업
velero backup create backend-only --include-resources deployments,services,secrets
3-3. 자동 백업 스케줄링
velero schedule create daily-backup --schedule="0 3 * * *"
→ 매일 새벽 3시에 자동 백업 수행.
4) 복구(restore)
4-1. 전체 복원
velero restore create --from-backup full-backup
4-2. 특정 네임스페이스만 복원
velero restore create team-a-restore --from-backup full-backup --include-namespaces team-a
4-3. 복구 확인
kubectl get all -n team-a
→ 삭제했던 리소스들이 정상적으로 복원된 것을 확인.
5) 실제 운영 환경 적용 전략
항목 권장 설정 설명
| 백업 주기 | 1일 1회 (증분 백업) | 주기적 자동화 |
| 보존 기간 | 7일 ~ 14일 | S3 저장 용량 절감 |
| 대상 | 전체 클러스터 + 주요 네임스페이스 | 장애 대비 |
| 백업 저장소 | AWS S3, GCP Storage, MinIO | 환경별 선택 |
| 테스트 복구 | 주 1회 | 백업 유효성 검증 |
6) Helm Chart에 통합하기
Helm Chart 배포 파이프라인에 Velero 백업 단계를 추가합니다.
.github/workflows/deploy.yaml
- name: Backup Before Deployment
run: |
velero backup create pre-deploy-$(date +%Y%m%d%H%M)
→ 배포 전 자동 백업 후 새로운 버전 배포를 진행하도록 설정하면, 롤백 안정성이 극적으로 향상됩니다.
7) 정리
- Velero는 쿠버네티스 리소스 및 볼륨을 통째로 백업/복구 가능
- MinIO나 S3를 통해 백업 데이터를 안전하게 저장
- Helm과 CI/CD 파이프라인에 통합하면 배포 안정성과 데이터 복원력을 동시에 확보
- 실제 운영 환경에서는 SLA, RTO, RPO 기준에 따라 백업 주기 설계 필요
다음 글에서는 GitOps(ArgoCD) 기반으로 쿠버네티스 배포를 자동화하고,
지속적인 배포(Continuous Delivery) 파이프라인을 완성하는 방법을 실습하겠습니다.
쿠버네티스,Velero,백업,복구,MinIO,S3,DevOps,데이터보호,클러스터관리,K8s실습
쿠버네티스 실습: Velero로 클러스터 백업 및 복구 자동화하기
앞선 글에서 SLA 기반 알림 시스템까지 구축했으니, 이번엔 운영 안정성을 완성하는 백업 & 복구 전략을 다룹니다.
여기서는 오픈소스 도구 Velero를 사용해 쿠버네티스 리소스 + PV 데이터를 안전하게 백업하고, 필요 시 복구하는 과정을 실습합니다.
1) Velero란? & 주요 기능
- Velero는 쿠버네티스 리소스(Deployment, Service, ConfigMap, Secret, PVC 등)와 Persistent Volume 데이터를 백업/복구할 수 있는 오픈소스 도구입니다. (velero.io)
- 주요 기능:
- 전체 클러스터 혹은 일부 네임스페이스/리소스 단위 백업
- 스케줄 기반 백업
- 증분 백업 및 보존 정책
- 복원 시 네임스페이스 변환(mapping), 부분 복원 가능 (velero.io)
- 클라우드 제공 스토리지(S3, GCS 등) 또는 S3 호환 스토리지(Minio 등) 연동 가능 (DigitalOcean)
2) Velero 설치 및 설정
2-1. CLI 설치
macOS에서는 Homebrew로 설치:
brew install velero
velero version
이때 Server 부분이 <not installed>로 나올 수 있는데, 이는 아직 클러스터에 Velero 서버가 설치되지 않았기 때문입니다.
2-2. 스토리지 준비 (MinIO / S3 등)
Velero는 백업 데이터를 저장할 외부 객체 스토리지(예: S3)를 필요로 합니다.
로컬/테스트 환경에서는 MinIO를 클러스터 내부 혹은 외부에서 S3 호환 스토리지로 사용하면 좋습니다.
helm repo add minio https://charts.min.io/
helm repo update
helm install minio minio/minio --set rootUser=admin,rootPassword=minio123 --namespace velero --create-namespace
MinIO 서비스가 클러스터 내 접근 가능해야 하며, minio.velero.svc.cluster.local:9000 식의 내부 URL을 사용할 수 있습니다.
2-3. Velero 서버 설치
Velero 설치 시, 백업 대상 스토리지(Bucket), 인증 정보, 스냅샷 옵션 등을 지정해야 합니다.
예제:
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.8.0 \
--bucket velero-backup \
--secret-file ./credentials-velero \
--use-volume-snapshots=false \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio.velero.svc.cluster.local:9000 \
--namespace velero
- --use-volume-snapshots=false 옵션은 스냅샷 기능을 비활성화하는 예시입니다.
- credentials-velero 파일은 S3 / MinIO 접근 키를 담고 있어야 합니다.
- Velero는 설치 후 Backup/Restore CRD 리소스를 사용하여 동작하게 됩니다. (velero.io)
설치 후:
kubectl get pods -n velero
정상적으로 velero Pod가 Running 상태여야 합니다.
3) 백업 수행
3-1. 전체 백업
velero backup create full-backup --include-namespaces default,team-a
이 명령은 지정된 네임스페이스의 모든 리소스 및 PV 데이터를 포함해 백업을 생성합니다.
velero backup get
를 통해 백업 상태를 확인할 수 있습니다.
3-2. 특정 리소스만 백업
velero backup create backend-only --include-resources deployments,services,secrets
이렇게 하면 PV 등은 제외하고 리소스 메타데이터만 백업이 가능합니다.
3-3. 자동 스케줄 백업
velero schedule create daily-backup --schedule="0 3 * * *"
매일 새벽 3시에 백업이 자동 실행되도록 설정할 수 있습니다.
또한, 백업에 TTL(보존 기간)을 설정해 오래된 백업은 자동으로 삭제되도록 할 수 있습니다. (velero.io)
4) 복구(restore)
4-1. 전체 복원
velero restore create --from-backup full-backup
이 명령은 백업된 리소스와 PV 데이터를 모두 복원합니다.
4-2. 부분 복원 (네임스페이스 단위)
velero restore create team-a-restore --from-backup full-backup --include-namespaces team-a
특정 네임스페이스만 복원할 수 있습니다.
4-3. 복구 리소스 확인
kubectl get all -n team-a
삭제했던 Deployment, Service 등 리소스가 복원된 것을 확인할 수 있습니다.
Velero는 복원 시 기본적으로 비파괴(non-destructive) 모드를 사용합니다. 즉, 대상 클러스터에 이미 존재하는 리소스는 건드리지 않고 넘어갑니다. 필요시 --existing-resource-policy=update 옵션을 통해 기존 리소스를 덮어쓰는 동작을 할 수 있습니다. (velero.io)
5) 운영 환경 고려사항 & 팁
항목 주의/권장 내용
| 대용량/파일 수 많은 PV | filesystem 기반 백업(restic 또는 kopia)은 파일 수가 많거나 크면 압박이 큽니다. 특히 작은 파일이 많은 경우 비효율적일 수 있음. Reddit 사용자들도 “data size or many small files” 경우 주의하라는 경험담 표기됨. (Reddit) |
| 스냅샷 기반 백업 가능 여부 | 스토리지 제공자가 CSI 스냅샷을 지원하면 Velero가 이를 활용해 더 효율적인 백업을 할 수 있음. (Reddit) |
| 백업 보존 정책 설정 | TTL 설정을 통해 오래된 백업 자동 삭제 설정이 가능하며, 백업 리소스 및 해당 스냅샷이 정리됩니다. (velero.io) |
| RBAC 설정 | Velero가 필요한 리소스(CRD, PVC, PV, Secrets 등)를 백업/복원할 수 있는 권한을 갖도록 Role/ClusterRole을 설정해야 합니다. 참고로 Velero 문서에서 권한 관련 설정 예시가 제공됩니다. (Searce) |
| 복구 테스트 주기 | 정기적으로 복구 테스트를 수행해 백업이 제대로 작동하는지 검증해야 함 |
| 스토리지 비용 & 보안 | 백업 데이터가 저장되는 객체 스토리지 비용과 암호화/액세스 제어도 고려해야 함 |
6) Helm/CI 파이프라인 통합
Helm 차트나 CI/CD 파이프라인에 Velero 백업 단계를 넣으면 배포 안정성이 높아집니다. 예:
- name: Backup Before Deployment
run: |
velero backup create pre-deploy-$(date +%Y%m%d%H%M)
배포 전에 현재 상태를 보존해 두면, 문제가 생겼을 때 복원 기반이 확보됩니다.
7) 보강 및 추가 참고 자료
- DigitalOcean 튜토리얼: Velero를 사용해 쿠버네티스 클러스터 백업/복구 과정 예시 (DigitalOcean)
- Devtron 블로그: Velero 사용법 + Best Practices 설명 (devtron.ai)
- Velero 공식 동작 방식 설명: 백업/복구 workflow, TTL, 리소스 처리 방식 등 (velero.io)
'project > 맥미니로 시작하는 쿠버네티스' 카테고리의 다른 글
| 쿠버네티스 실습: GitOps + Velero + Prometheus로 재해복구(Disaster Recovery, DR) 시스템 구축하기 (0) | 2025.10.20 |
|---|---|
| 쿠버네티스 실습: GitOps 기반 배포 자동화 (Argo CD 완전 가이드) (0) | 2025.10.16 |
| 쿠버네티스 실습: SLA 기반 알림 시스템 구축 (Prometheus Alertmanager + Slack 연동) (0) | 2025.10.14 |
| 쿠버네티스 실습: Prometheus + Grafana + Kiali + Jaeger로 완전한 Observability 구축하기 (0) | 2025.10.13 |
| 쿠버네티스 실습: Istio로 서비스 메시(Service Mesh) 구축하기 (0) | 2025.10.10 |
- Total
- Today
- Yesterday
- NestJS
- rag
- Prisma
- 쿠버네티스
- Redis
- Python
- node.js
- JWT
- kotlin
- 생성형AI
- PostgreSQL
- SEO최적화
- nextJS
- REACT
- Next.js
- 백엔드개발
- seo 최적화 10개
- flax
- DevOps
- 딥러닝
- ai철학
- JAX
- fastapi
- 개발블로그
- CI/CD
- LangChain
- llm
- Express
- Docker
- 웹개발
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |

