티스토리 뷰

반응형

쿠버네티스 실습: 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)

 

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
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
글 보관함
반응형