클라우드/DevOps

[CKA] Etcd Backup & Restore 문제 풀이

dayeonsheep 2024. 11. 13. 22:00
예시 문제 :

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로 수정해주기