Coreos가 만든 분산 key:value 형태의 데이터 저장소.
K8s Cluster의 메타데이터를 메모리에 저장해서 사용한다.
etcd에 전달된 데이터는 /var/lib/etcd
경로에 파일로 기록된다.
etcd는 kube-system 네임스페이스에 static pod 형태로 실행되고 있다.
Static Pod는 kubelet에서 직접 관리하며,
/etc/kubernetes/manifests/
경로에 yaml 파일 형태로 저장되어 있다.
주로 etcd, API Server, Controller manager, Scheduler와 같은 K8s Cluster 구성 요소들을 static pod 형태로 실행한다.
etcd 관리 명령은 etcdctl 명령어로 실행한다.
etcdctl의 설치 여부는 다음 명령어로 확인할 수 있다.
etcd --version
etcdctl version
예기치 못한 사고로 인해 etcd DB가 유실될 경우를 대비해 etcd snapshot을 생성할 수 있다.
snapshot을 생성하는 명령어 구조는 다음과 같이 입력한다.
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=<trusted-ca-file> \
--cert=<cert-file> \
--key=<key-file> \
snapshot save <backup-file-location>
옵션에 필요한 trusted-ca-file, cert-file, key-file은 각각 아래 명령어를 통해 확인할 수 있다.
ps -ef | grep kube | grep trusted-ca-file
ps -ef | grep kube | grep cert-file
ps -ef | grep kube | grep key-file
박스 안의 텍스트를 복사해서 각각의 옵션 값으로 전달해주면 된다.
예시로 완성시킨 명령어 구조는 다음과 같다.
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 /tmp/etcd-backup
생성된 스냅샷의 시점으로 K8s Cluster의 상태를 되돌리고 싶을 경우 restore 옵션을 사용해 복원한다.
ETCDCTL_API=3 etcdctl --data-dir <new-db-location> \
snapshot restore <snapshot file>
여기서 주의할 점은, 이렇게 복원된 etcd Database는 복원 이전의 etcd Database 내용을 변경시키지 않고 새로운 etcd Database를 생성하여 기존에 운영되던 Pod 등의 Data Directory를 새로 생성된 etcd Database로 변경하여 대체한다.
그렇기 때문에, 기존의 /var/lib/etcd
경로가 아닌 new database 경로를 지정해줘야한다.
ex) /var/lib/etcd-new
ETCDCTL_API=3 etcdctl --data-dir=/var/lib/etcd-new \
snapshot restore /tmp/etcd-backup
이렇게 생성된 new etcd db를 etcd pod의 data 저장소로 지정해주려면 /etc/kubernetes/manifests/
경로의 etcd manifest 파일의 설정을 변경해주어야한다.
vi /etc/kubernetes/manifests/etcd.yaml
vi 편집기로 etcd.yaml 파일을 불러온 뒤 가장 마지막 줄로 이동한다.(단축키G
)
spec.volumes.hostPath 속성 중 name 옵션의 값이 etcd-data로 지정된 속성의 path 값을 new etcd db 값으로 변경해주자.
etcd pod는 kubelet에서 관리하는 static pod이기 때문에, manifest 파일을 수정할 경우 apply 명령어를 통해 적용시키는 별도의 과정을 거치지 않아도 바로 반영된다.
이제 console 환경으로 돌아온 후 kubectl describe pod etcd-k8s-master -n kube-system
명령어를 실행해보면 아래와 같이 etcd의 etcd-data 영역의 volume path가 수정되어 있는 것을 확인할 수 있다.
관련 kubernetes 공식 문서 링크(1.26버전 기준)
https://v1-26.docs.kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster