본문 바로가기
Kubernetes

K8S 클러스터 백업 방법 (Velero, etcd)

by 권세희 2026. 1. 10.

 

  • Velero: Kubernetes 리소스 + PV 데이터를 백업/복구하는 오픈소스 도구
  • etcd: Kubernetes 컨트롤 플레인의 etcd 키-값 저장소를 직접 스냅샷 백업

복구 목적

운영환경에서 둘다 백업하는것이 BEST

Velero: 특정 네임스페이스, 앱 복구 가능하며, 실수로 리소스를 삭제하거나 했을 때 복구

etcd: 전체 클러스터 장애 복구

 

구분 etcd 백업 (etcdctl snapshot) Velero 백업
백업 대상 클러스터의 모든 상태 데이터 (DB 스냅샷) k8s API 오브젝트 (YAML) + Persistent Volume (PV)
작동 방식 etcd DB 자체를 파일로 덤프 k8s API를 통해 리소스를 쿼리하여 S3 등에 저장
복구 범위 클러스터 전체 복구만 가능 특정 네임스페이스, 레이블, 리소스 단위 선택적 복구
PV 백업 불가능 (Config만 저장됨) 가능 (Snapshot 또는 Restic/Kopia 활용)
난이도/환경 마스터 노드 접근 권한 필요 (관리형은 불가) 클러스터 내 Pod로 설치, 관리형(EKS, GKE) 지원
주요 용도 컨트롤 플레인 장애 대응, 업그레이드 전 백업 재해 복구(DR), 클러스터 마이그레이션, 실수로 삭제한 리소스 복구

 

백업 방법

 

Velero는 POD로 설치해서 백업

1. Velero 클라이언트 설치

2. Velero 서버 설치

3. Velero POD 확인

4. Velero 백업 및 복구

 

etcd는 etcdctl 명령어로 shell 파일을 만들어서 crontab으로 백업

shell 파일 예시

# 1. 설정 변수
BACKUP_DIR="/data/etcd-backups"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/etcd-snapshot-$DATE.db"
LOG_FILE="$BACKUP_DIR/backup.log"

# 2. 백업 디렉토리 생성
mkdir -p $BACKUP_DIR

# 3. etcd 백업 실행
export ETCDCTL_API=3
etcdctl \
  --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 \
  snapshot save $BACKUP_FILE >> $LOG_FILE 2>&1

# 4. 결과 확인 및 로그 남기기
if [ $? -eq 0 ]; then
    echo "[$DATE] 백업 성공: $BACKUP_FILE" >> $LOG_FILE
else
    echo "[$DATE] 백업 실패!" >> $LOG_FILE
    exit 1
fi

# 5. 오래된 백업 삭제 (7일 경과된 파일)
find $BACKUP_DIR -name "*.db" -mtime +7 -exec rm -f {} \;
echo "[$DATE] 7일 지난 백업 정리 완료" >> $LOG_FILE