[주의] 개인 공부를 위해 쓴 글이기 때문에 주관적인 내용은 물론, 쓰여진 정보가 틀린 것일 수도 있습니다!
피드백 부탁드립니다. (- -)(_ _) 꾸벅
[ etcd란? ]
클러스터의 설정 공유, 서비스 검색 및 스케줄러 조정을 위한 오픈소스 분산 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 명령 사용 가능
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 백업/복구 ]
(※주의 클러스터 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 파일로 정의 되어있다.)
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를 복구한 폴더로 바꿔주면 된다.
참고 할만한 좋은 글
https://zgundam.tistory.com/197
'클라우드 > 쿠버네티스' 카테고리의 다른 글
[Kubernetes] 12. 쿠버네티스 리소스 오브젝트들 및 생성 방법 (0) | 2023.01.05 |
---|---|
[kubernetes] 쿠버네티스 클러스터 깔끔하게 초기화 및 오류조치 (0) | 2023.01.04 |
[Kubernetes] 10. 쿠버네티스 패키지 매니저 helm (0) | 2021.08.01 |
[Kubernetes] 9. 쿠버네티스 kubeadm을 이용한 클러스터 구성 (0) | 2021.07.18 |
[Kubernetes] 8. 쿠버네티스 config와 kubectl의 context (0) | 2021.06.17 |