Backup and Restore Methods

Yu Sang Min·2025년 6월 13일

CKA

목록 보기
43/110

📌 Backup Candidates

📣 Imperative

  • 쿠버네티스 리소스를 생성할때 (네임스페이스나 시크릿 configmap 등) 명령적 방법으로 개체 생성

📋 Declarative

$ cat pod-definition.yaml

apiVersion: v1
kind: Pod

metadata:
  name: my-app-pod
  labels:
    app: myapp
    type: front-end
spec:
  containers:
  - name: nginx-container
    image: nginx

$ kubectl apply -f pod-definition.yaml
  • 구성을 저장하고 싶을때 권장되는 방법
  • 모든 단일 응용프로그램에 필요한 개체 정의가 존재
  • 파일형식으로 단일 폴더에 있다
  • 나중에 재사용하거나 타인과 공유 가능
  • GitHub같은 소스 코드 리포지토리에 저장하는것을 권장 (팀과 협업 위해)
  • 소스 코드 리포지토리는 백업 솔루션으로 구성돼야 함
  • 클러스터 전체를 잃어도 이를 통해 복구가 가능

더 나은 백업 방법으로는 kube-apiserver 를 쿼리하는 방법이 있다

  • kubectl 을 통해 kube-apiserver 를 쿼리하거나 API 서버에 직접 액세스함으로써 생성된 모든 개체에 대한 리소스 구성을 복사해 저장 할 수 있음
  • 백업 스크립트 중에 사용되는 명령어중 하나
$ kubectl get all --all-namespaces -o yaml > all-deploy-services.yaml
  • ARK 같은 도구 (VELERO)로 쿠버네티스 API를 이용해 쿠버네티스 클러스터 백업

📍Backup - ETCD

  • 클러스터 상태에 관한 정보 저장

  • 클러스터 자체에 관한 정보와 노드 및 클러스터 내부에서 생성된 모든 리소스가 저장

  • 리소스를 백업하는 대신 etcd 서버 자체를 백업하는걸 선택할 수 있음

  • etcd 클러스터는 마스터노드에 호스트 되어있음

  • 구성하는 동안 모든 데이터가 저장될 장소 명시 (데이터 디렉터리)

  • 그게 백업 도구가 지원할 수 있도록 구성될 수 있는 디렉터리임

  • ETCD는 또한 빌트인 스냅샷 솔루션도 가지고 있다.
$ ETCDCTL_API=3 etcdctl \
         snapshot save snapshot.db
$ ls
   snapshot.db
  • etcdctl 의 유틸리티를 이용해 데이터베이스 스냅샷 가능
  • 스냅샷은 현재 디렉토리의 snapshot.db 이름으로 생성됨
$ ETCDCTL_API=3 etcdctl \
         snapshot status snapshot.db
  • 위 명령어로 백업의 상태 확인 가능
  • 나중에 이 백업에서 클러스터를 복원하려면 먼저 kube-apiserver 서비스 중단하기
  • 복원 프로세스는 etcd 서버 서비스를 중단
  • 클러스터를 재시작 해야하는데 kube-apiserver가 거기 속해있기 때문
  • 그런다음 etcdctl 스냅샷 복원 명령을 실행
  • 백업 파일의 경로로 설정되어 있음
  • etcd가 백업에서 복구할 때 새 클러스터 구성을 초기화하고 etcd를 새 클러스터에 새 멤버로 구성
  • 새 멤버가 실수로 기존의 클러스터에 합류하는걸 막기 위해
  • 이 명령을 실행하면 새 데이터 디렉터리가 생성됨
  • 이 예제에선 /var/lib/etcd-from-backup
  • 이후에 --data-dir=/var/lib/etcd-from-backup 에 경로 설정

Documents

🧩 ETCDCTL & ETCDUTL 사용하기

etcdctl은 etcd를 위한 커맨드라인 클라이언트입니다.
Kubernetes 실습 환경에서는 ETCD 키-값 데이터베이스가 마스터 노드에 static pod로 배포되어 있으며, 사용 버전은 v3입니다.

🔍 etcdctl 버전 확인

백업 같은 작업에 etcdctl을 사용하려면, API 버전이 3.x인지 확인해야 합니다:

$ ectdctl version

controlplane ~ ➜  etcdctl version
etcdctl version: 3.5.16
API version: 3.5

💾 ETCD 백업하기

✅ 1. etcdctl 사용 (스냅샷 기반 백업)

실행 중인 etcd 서버로부터 스냅샷을 저장하려면 다음 명령어를 사용합니다:


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/etcd-snapshot.db

필수 옵션 설명:
• --endpoints : etcd 서버 주소 지정 (기본값: localhost:2379)
• --cacert : CA 인증서 경로
• --cert : 클라이언트 인증서 경로
• --key : 클라이언트 키 경로

✅ 2. etcdutl 사용 (파일 기반 백업)

etcd가 꺼진 상태에서 파일 단위로 백업하려면 다음 명령을 사용합니다:


etcdutl backup \
  --data-dir /var/lib/etcd \
  --backup-dir /backup/etcd-backup

이 명령은 etcd의 백엔드 데이터베이스와 WAL 파일을 대상 경로로 복사합니다.

📊 스냅샷 상태 확인

스냅샷 파일의 메타데이터를 확인하려면 다음을 실행합니다:


etcdctl snapshot status /backup/etcd-snapshot.db \
  --write-out=table

출력에는 크기, 리비전, 해시값, 총 키 개수 등이 포함되어, 복원 전 무결성 확인에 유용합니다.

🔁 ETCD 복원하기

✅ 1. etcdutl을 사용한 복원

스냅샷 파일을 새로운 디렉터리에 복원하려면 다음 명령을 사용합니다:


etcdutl snapshot restore /backup/etcd-snapshot.db \
  --data-dir /var/lib/etcd-restored

✅ 2. etcdutl 백업 파일 복원

etcdutl backup으로 만든 파일을 복원하려면, 백업한 파일을 /var/lib/etcd에 복사하고 etcd를 재시작하면 됩니다.

📝 정리 노트

•	etcdctl snapshot save : 실행 중인 etcd 클러스터로부터 .db 형식의 스냅샷을 생성합니다.
•	etcdctl snapshot status : 스냅샷의 메타데이터를 조회합니다.
•	etcdutl snapshot restore : .db 스냅샷 파일을 복원합니다.
•	etcdutl backup : etcd가 실행 중이지 않아도 데이터 디렉터리와 WAL 파일을 파일 단위로 백업할 수 있습니다.
profile
React, Node.js, AWS, Git, Github, Github Action, Docker, K8S

0개의 댓글