[CKA] etcd 스냅샷 백업과 복구
etcd endpoint와 인증서 경로를 확인하고 스냅샷을 저장·검증·복구하는 흐름을 정리합니다.
kubeadm 클러스터에서는 etcd static Pod manifest나 Pod 상세 정보에서 endpoint, 인증서, 데이터 디렉터리를 확인할 수 있습니다. 경로를 외워 입력하기보다 현재 클러스터 설정을 먼저 읽는 것이 안전합니다.
kubectl describe pod -n kube-system <etcd-pod>
sudo grep -E -- '--(listen-client-urls|trusted-ca-file|cert-file|key-file|data-dir)' \
/etc/kubernetes/manifests/etcd.yaml
스냅샷 저장
sudo ETCDCTL_API=3 etcdctl snapshot save /opt/etcd-backup.db \
--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
저장 후 스냅샷 상태를 확인합니다.
sudo ETCDCTL_API=3 etcdctl snapshot status /opt/etcd-backup.db --write-out=table
새 데이터 디렉터리로 복구
복구는 기존 데이터 디렉터리를 덮어쓰기보다 새 경로에 스냅샷을 풀고 etcd static Pod가 새 경로를 사용하게 하는 흐름으로 진행할 수 있습니다.
sudo ETCDCTL_API=3 etcdctl snapshot restore /opt/etcd-backup.db \
--data-dir=/var/lib/etcd-restored
/etc/kubernetes/manifests/etcd.yaml의 etcd data volume hostPath.path를 새 디렉터리로 바꿉니다. kubelet은 manifest 변경을 감지해 etcd static Pod를 다시 생성합니다.
volumes:
- hostPath:
path: /var/lib/etcd-restored
type: DirectoryOrCreate
name: etcd-data
복구 후에는 etcd와 API server가 정상화됐는지 확인합니다.
kubectl get pods -n kube-system
kubectl get nodes
etcd 인증서와 개인키는 민감한 자격 정보입니다. 명령에는 파일 경로만 기록하고 파일 내용을 복사하지 않습니다.