etcdをバックアップし復旧計画を立てる
한국어 원문으로 표시합니다.
목표
etcd 스냅샷을 실제로 뜨고 검증하고, 스냅샷이 담는 시점의 의미를 리소스 대조로 확인하고, 복구 절차를 문서로 남깁니다.
왜 중요한가
CKA 실기에서 etcd 백업은 거의 매번 나옵니다. 그런데 명령을 외우는 것만으로는 부족합니다. 이 실습이 강조하는 것은 스냅샷이 시점을 담는다는 사실입니다. 스냅샷을 뜬 뒤에 만든 리소스는 그 파일 안에 없고, 복구하면 사라집니다. 이 감각이 없으면 복구 후 "왜 어제 만든 게 없죠" 라는 사고가 납니다.
복구 계획을 글로 쓰게 하는 이유도 있습니다. 복구는 명령 한 줄이 아니라 순서입니다. 컨트롤 플레인을 내리고, 새 data-dir 에 풀고, 멤버 구성과 peer URL 을 맞추고, 다시 띄웁니다. 이 순서를 미리 써 두지 않으면 장애 한복판에서 만들게 되고, 그때 판단은 대체로 틀립니다.
이 환경의 etcd 는 127.0.0.1:2379 에서 돌고 있습니다. 실제 kubeadm 클러스터라면 여기에 --cacert, --cert, --key 세 옵션이 더 붙습니다.
단계
/root/cka-etcd/env.sh를 만들어ETCDCTL_API=3과ETCDCTL_ENDPOINTS=127.0.0.1:2379를 자식 프로세스에 전달되도록 내보낸다.- etcd 엔드포인트 상태(또는 헬스) 출력을
/root/cka-etcd/status.txt에 저장한다. 파일에 엔드포인트 주소가 보여야 한다. - 네임스페이스
cka-etcd를 만들고 ConfigMappre-backup을 만든다. 데이터는stage=before. 그 다음cka-etcd의 컨피그맵 목록을/root/cka-etcd/before.txt에 저장한다. - etcd 스냅샷을
/root/cka-etcd/snap.db에 저장한다. - 그 스냅샷의 상태(메타데이터) 출력을
/root/cka-etcd/snap-status.txt에 저장한다. - 스냅샷을 뜬 뒤에 ConfigMap
post-backup(데이터stage=after)을cka-etcd에 만들고, 컨피그맵 목록을/root/cka-etcd/after.txt에 저장한다.before.txt에는post-backup이 없고after.txt에는 둘 다 있어야 한다. /root/cka-etcd/restore-plan.md에 복구 절차를 다섯 줄 이상, 200 바이트 이상으로 적는다.snapshot restore,--data-dir,--initial-cluster, peer 포트2380,apiserver라는 단어가 모두 들어가야 하고, 복구 중 컨트롤 플레인을 잠시 멈춘다는 내용도 있어야 한다.
참고
etcdctl snapshot status가 없다면etcdutl snapshot status를 써 보세요. 최신 etcd 는 오프라인 작업을 etcdutl 로 옮겼습니다.- 스냅샷 파일은 bbolt 데이터베이스라 텍스트로 열어 봐도 의미가 없습니다. 크기와 status 출력으로 확인합니다.
- 흔한 실수 1: 6단계를 4단계보다 먼저 하는 것. 그러면 대조가 성립하지 않습니다.
- 흔한 실수 2: 복구 계획에 apiserver 를 멈추는 단계를 빠뜨리는 것. 살아 있는 apiserver 가 계속 쓰면 복구본과 어긋납니다.
etcdctl 환경변수 정리하기
/root/cka-etcd/env.sh 를 만들어 ETCDCTL_API=3 과 ETCDCTL_ENDPOINTS=127.0.0.1:2379 를 자식 프로세스에 전달되도록 내보낸다.
etcdctl 은 v2 와 v3 API 가 갈립니다. 환경변수는 자식 프로세스에 전달되어야 하므로 그냥 대입만 해서는 부족합니다.
엔드포인트 상태 확인하기
etcd 엔드포인트 상태(또는 헬스) 출력을 /root/cka-etcd/status.txt 에 저장한다. 파일에 엔드포인트 주소가 보여야 한다.
endpoint status 와 endpoint health 둘 다 씁니다. 출력이 표준에러로 나가는 경우가 있으니 리다이렉트에 주의하세요.
백업 기준점 만들기
네임스페이스 cka-etcd 를 만들고 ConfigMap pre-backup 을 만든다. 데이터는 stage=before. 그 다음 cka-etcd 의 컨피그맵 목록을 /root/cka-etcd/before.txt 에 저장한다.
스냅샷이 어느 시점을 담는지 나중에 대조하려면 지금 상태를 파일로 남겨야 합니다. 이 파일에는 아직 없는 것이 있어야 뒤 단계가 성립합니다.
스냅샷 저장하기
etcd 스냅샷을 /root/cka-etcd/snap.db 에 저장한다.
snapshot save 는 파일 경로를 인자로 받습니다. 디렉터리가 없으면 실패하니 먼저 만들어 두세요.
스냅샷 메타데이터 확인하기
그 스냅샷의 상태(메타데이터) 출력을 /root/cka-etcd/snap-status.txt 에 저장한다.
status 는 해시, 리비전, 키 개수, 크기를 보여 줍니다. 최신 etcd 는 이 하위 명령을 별도 도구로 옮겼으니 없다면 그쪽을 써 보세요.
백업 이후 리소스와 대조하기
스냅샷을 뜬 뒤에 ConfigMap post-backup (데이터 stage=after)을 cka-etcd 에 만들고, 컨피그맵 목록을 /root/cka-etcd/after.txt 에 저장한다. before.txt 에는 post-backup 이 없고 after.txt 에는 둘 다 있어야 한다.
스냅샷을 뜬 다음에 만든 리소스는 그 스냅샷 안에 없습니다. 그 사실을 두 파일의 차이로 증명하는 단계입니다.
종합: 복구 절차 문서로 남기기
/root/cka-etcd/restore-plan.md 에 복구 절차를 다섯 줄 이상, 200 바이트 이상으로 적는다. snapshot restore, --data-dir, --initial-cluster, peer 포트 2380, apiserver 라는 단어가 모두 들어가야 하고, 복구 중 컨트롤 플레인을 잠시 멈춘다는 내용도 있어야 한다.
복구는 명령 한 줄이 아니라 순서입니다. 무엇을 먼저 멈추고, 어디에 풀고, 어떤 값을 맞춰야 다시 뜨는지를 적으세요.