[CKA] Etcd Backup & Restore 문제 풀이
예시 문제 :
First, Create a snapshot of the existing etcd instance running at https://127.0.0.1:2379 saving the snapshot to /srv/data/etcd-snapshot.db
Next, restore an existing, previous snameshot located at /var/lib/backup/etcd-snapshot-previous.db.
The following TLS certificates/key are supplied for connecting to the server with etcdctl:
CA certificate: /opt/KUIN00601/ca.crt
Client certificate: /opt/KUIN00601/etcd-client.crt
Clientkey:/opt/KUIN00601/etcd-client.key
https://youtu.be/dv_5WCYS5P8?si=6qMw_ZVvL8B7cW9a
[ 이론 이해 ]
etcd backup한다 == etcd snapshot 떴어요 ~ 그래서 file로 남겼어요~
그 file에 /data/etcd-snapshot.db 를 남기기 -> 첫 스텝
이 data 밑에는 이미 data/etcd-snapsho-previous.db라는 file이 이미 있음
이걸 가지고 K8s 환경에 다시 'restore'해라
그 방법?
그 previous 파일을 data 공간에 다시 옮겨줘야됨
주의 : etcd 디렉터리를 쓰면 안됨. 현재 사용되고 있는 공간이므로 overwrite 하면 안 됨.
var/library/etcd-previous-directory (or restore-dir 같은 등등) 이런 식으로 다른 곳에 옮겨줘야됨
그리고 동작 중인 etcd pod에게 너 이제 데이터 저장소 여기야~
하고 data dir 바꿔 주는 작업 -> 두 번째 스텝
etcd pod = static pod 이므로 config 변경만하면 알아서 restart해줌
[ 실습 ]
First, create snapshot
user계정으로는 restore & backup 안됨
whoami 체크하고
sudo 하거나 sudo -i 해서 root 계정으로 변경해서 진행
sudo /var/lib/etcd
/var/lib/etcd -> 여기안에 etcd data가 있다~
backup command -> docs 참조
builtin 기능으로 snapshot 기능 지원 -> etcdctl 사용 (API 버전 3) -> $ etcdctl version으로 확인
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>
주의(리눅스): 백슬래시 뒤에는 블랭크 들어가면 안됨
백업 위해서는 etcdctl
/data/etcd-snapshot.db -> 우리가 스냅샷 뜨고 싶은 파일 => <backup-file-location> 에 채워넣기
CA certi -> <trusted-ca-file>
Client certi -> <cert-file>
Client key -> <key-file>
요렇게 그대로 채워넣기
현재 k8s상태를 사진으로 찍어서 (snapshot) 저장
master에서 sudo 붙이고 shift+insert 붙이기 하면 -> Json 형태 결과
마지막 줄 : /data/etcd-snapshot.db 이런 이름으로 입력 됐어요~
Next, Restore
snapshotdb -> etcd-snapshot-previous-db로 변경
이런 에러가 뜬다면 그 폴더가 있다는 뜻이니까 이름을 바꿀 것
다음은
현재 동작 중인 etcd pod에게 이게 이제 너 data dir이야 하고 알려주기
etcd-k8s-master 파드가 static 형태로 동작 중
$ sudo -i //sudo로 다시 접근
$ cd /etc/kubernetes/manifests/
들어가서
$ etcd.yaml
path를 바꾼 dir로 수정해주기