[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 인증서와 개인키는 민감한 자격 정보입니다. 명령에는 파일 경로만 기록하고 파일 내용을 복사하지 않습니다.