master 다중화가 되어 있는 kubernetes cluster의 etcd cluster save 및 restore 방법
etcd pod에 직접 exec하여 실행할 수 있지만, kubectl cp가 불가능 한 경우 snapshot 파일을 사용할 수 없습니다.
따라서 etcdctl binary 파일이 필요합니다.
ETCD_VER=v3.4.13
curl https://storage.googleapis.com/etcd/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz
tar xzvf etcd-${ETCD_VER}-linux-amd64.tar.gz
mv etcd-${ETCD_VER}-linux-amd64/etcdctl /usr/local/bin/etcdctl
etcdctl --version
etcdctl은 etcd 인증서를 참조하여 etcd와 통신하여 명령어를 실행합니다.
실행할 때마다 작성하면 번거로우니 alias로 등록해줍시다.
$ alias etcdctl='ETCDCTL_API=3 etcdctl \
--endpoints=https://노드IP:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key'
$ etcdctl snapshot save /경로/파일명.db
$ etcdctl snapshot status /경로/파일명.db -w="table"
+----------+----------+------------+------------+
| HASH | REVISION | TOTAL KEYS | TOTAL SIZE |
+----------+----------+------------+------------+
| b01bf247 | 35127127 | 10759 | 53 MB |
+----------+----------+------------+------------+
마스터노드에서 각각 진행합니다.
$ etcdctl snapshot restore /경로/파일명.db \
--data-dir /var/lib/etcd \
--name [m1-name] \
--initial-cluster "[m1-name]=https://[m1_IP]:2380,[m2-name]=https://[m2_IP]:2380,[m3-name]=https://[m3_IP]:2380" \
--initial-advertise-peer-urls https://[master1_IP]:2380 \
--initial-cluster-token="etcd-cluster-1" \
--skip-hash-check=true
$ etcdctl snapshot restore /경로/파일명.db \
--data-dir /var/lib/etcd \
--name [m2-name] \
--initial-cluster "[m1-name]=https://[m1_IP]:2380,[m2-name]=https://[m2_IP]:2380,[m3-name]=https://[m3_IP]:2380" \
--initial-advertise-peer-urls https://[master2_IP]:2380 \
--initial-cluster-token="etcd-cluster-1" \
--skip-hash-check=true
$ etcdctl snapshot restore /경로/파일명.db \
--data-dir /var/lib/etcd \
--name [m3-name] \
--initial-cluster "[m1-name]=https://[m1_IP]:2380,[m2-name]=https://[m2_IP]:2380,[m3-name]=https://[m3_IP]:2380" \
--initial-advertise-peer-urls https://[master3_IP]:2380 \
--initial-cluster-token="etcd-cluster-1" \
--skip-hash-check=true