ETCD에 대해 알아보고 ETCD를 백업 및 복구하는 방법에 대해 알아보겠습니다.
ETCD는 쿠버네티스의 기본 데이터 저장소이며 key-value
형태로 모든 쿠버네티스 클러스터 상태를 저장하고 복제합니다. 쿠버네티스 클러스터를 구성하는 필수 요소이므로 ETCD에 문제가 발생하여 클러스터 내 모든 정보가 사라져도 백업본이 있다면 restore 하여 복구가 가능합니다.
$ kubectl -n kube-system logs etcd-controlplane | grep -i 'etcd-version'
또는
$ kubectl -n kube-system describe pod etcd-controlplane | grep -i 'image'
$ kubectl -n kube-system describe pod etcd-controlplane | grep '\--listen-client-urls'
$ kubectl -n kube-system describe pod etcd-controlplane | grep -e '.crt' -e '.key'
$ ETCDCTL_API=3 etcdctl --endpoints=<etcd-endpoint-address> \
--cacert=<trusted-ca-file> \
--cert=<cert-file> \
--key=<key-file> \
snapshot save <backup-file-location>
$ ETCDCTL_API=3 etcdctl snapshot restore --data-dir <data-dir-location> snapshotdb
그런 다음, /etc/kubernetes/manifests/etcd.yaml 파일의 spec.containers.volumeMounts.mountPath
(name=etcd-data) 값을 snapshot 생성한 경로로 변경합니다.
$ vi /etc/kubernetes/manifests/etcd.yaml
# 수정
volumes:
- hostPath:
path: /etc/kubernetes/pki/etcd
type: DirectoryOrCreate
name: etcd-certs
- hostPath:
path: /var/lib/etcd # -> /var/lib/etcd-from-backup로 변경
type: DirectoryOrCreate
name: etcd-data
수행 결과, 모든 리소스가 backup 했을 때의 상태로 돌아온 것을 확인할 수 있습니다.
개인적으로 공부하며 작성한 글로, 내용에 오류가 있을 수 있습니다.