클라우드/쿠버네티스

[Kubernetes] 11. 쿠버네티스 etcd 백업/복원

윤창이 2022. 12. 30. 16:13
728x90

[주의] 개인 공부를 위해 쓴 글이기 때문에 주관적인 내용은 물론, 쓰여진 정보가 틀린 것일 수도 있습니다!

피드백 부탁드립니다. (- -)(_ _) 꾸벅

 

 

 


[ etcd란? ] 

 

etcd

A distributed, reliable key-value store for the most critical data of a distributed system

etcd.io

 클러스터의 설정 공유, 서비스 검색 및 스케줄러 조정을 위한 오픈소스 분산 Key-Value 스토리지이다.

컨테이너 오케스트레이션의 사실상 표준 시스템인 쿠버네티스의 기본 데이터 저장소로 쓰이며 클러스터 상태를 저장하고 복제한다. 실제로 etcd는 하나의 Pod 형태로 저장이 되며, 이 pod에 모든 운영 데이터를 저장한다. 예를 들어 어느 노드에 어떤 Pod가 돌고 있는지, 데몬셋 구성은 어떻게 되는지와 같은 상태들을 모두 etcd라는 철판에 적어놓고 그 상태를 유지하기 위해 kube-controller를 작동시키는 것이다.

  • etcd는 파일시스템 var/lib/etcd 에 저장되어 있다.
  • backup과 restore으로 스냅샷을 db파일로 저장 및 복구 가능

 


[ etcdctl 설치 ] 

 etcd는 분산형 합의 기반 시스템이므로 클러스터 설정이 복잡한데, etcd 오퍼레이터를 사용하면 수월하게 수행 가능하다.

 

1. apt로 패키지 설치가 가능

$ sudo apt update
$ sudo apt install etcd-client

2. 깃헙에서 공식적으로 etcd 릴리즈하고 있으며 원하는 버전이 있을 경우 깃헙에서 클론 후 etcdctl 파일을 /usr/local/bin에 옮겨서 etcdctl 명령 사용 가능

 

Releases · etcd-io/etcd

Distributed reliable key-value store for the most critical data of a distributed system - etcd-io/etcd

github.com

 

etcdctl은 API 버전을 명시해야하는데, etcdctl 명령 앞에 "ETCDCTL_API=3"를 붙이면 해당 명령에 변수를 전달하여 사용할 수 있다.

$ ETCDCTL_API=3 etcdctl version
etcdctl version: 3.2.26
API version: 3.2

항상 쓰기 귀찮으니 export 명령으로 환경변수 ETCDCTL_API=3를 추가하여 사용하도 괜찮고, 영구적으로 ~/.bashrc에 환경변수 추가하여 사용하여도 괜찮다. 

 


[ 쿠버네티스 환경에서 etcd 백업/복구 ] 

쿠버네티스 document

(※주의 클러스터 etcd는 /var/lib/etcd 에 저장되어 운용이 되므로 백업/복구는 다른 폴더에 해야함)

 

1. Backup

$ ETCDCTL_API=3 etcdctl \
  --endpoints=https://127.0.0.1:2379 \
  --cacert=<trusted-ca-file> \
  --cert=<cert-file> \
  --key=<key-file> \
  snapshot save <스냅샷 백업할 위치>

 기본적으로 etcd에 대한 접근 권한은 클러스터 루트 권한과 동일하므로 etcdctl 명령으로 해당 클러스터의 etcd를 스냅샷 뜨기 위해서는 클러스터 TLS certificates/key가 필요하다. 해당 key는 /etc/kubernetes/pki/etcd 디렉토리 안에 있는 것이 디폴트이고, 다른 경우 /etc/kubernetes/manifests/etcd.yaml 파일에 spec.containers.command 아래 명시한 것과 같으니 참고하자. (etcd는 하나의 pod 형태로 돌아가다보니 yaml 파일로 정의 되어있다.)

 

etcd.yaml이며 귀여운 무지스티커가 붙은 부분이 해당 경로

 

2. Restore

$ ETCDCTL_API=3 etcdctl snapshot restore --data-dir <복구하여 생성할 etcd 위치> <복구할 스냅샷 위치>
  • <복구하여 생성할 etcd 위치> : 보통 etcd가 /var/lib/ 상에 위치하니 이 폴더 안에 원하는 이름으로 경로를 지정한다. ex) /var/lib/etcd-restore
  • <복구할 스냅샷 위치> : 백업했던 스냅샷 위치를 지정해주면 된다.

복구 후에 /etc/kubernetes/manifests/etcd.yaml에서 hostpath의 etcd path를 복구한 폴더로 바꿔주면 된다.

 

/etc/kubernetes/manifests/etcd.yaml


참고 할만한 좋은 글

https://zgundam.tistory.com/197

 

ETCD Backup과 Restore 정리(CKA 시험 대비용)

CKA 시험에 대비해서 내가 작성한 글들에 보면 ETCD Backup과 Restore에 대해 정리해놓은게 있는데 그게 서로 제각각인 부분이 있어서 이 부분만 아예 따로 하나의 글로 정리했다(혹시나 기존에 내가

zgundam.tistory.com


 

728x90