Kubernetes의 ETCD를 백업하고 복원해보자.
ETCD 백업 및 복원 전 현재 상태를 확인하면
NAME READY STATUS RESTARTS AGE
gateway-deployment-78bd54f4bb-mscdc 0/1 ImagePullBackOff 0 20d
test-deployment-555d5bfb6d-8trkb 1/1 Running 0 20d
test-deployment-555d5bfb6d-kpxbs 1/1 Running 0 20d
deployment로 배포된 파드 하나는 error가 나있고 다른 두 개는 Running 상태이다. 그럼 ETCD를 백업하고 Deployment를 모두 삭제한 뒤, 백업한 ETCD를 복원했을 때 다시 파드 하나 error, 다른 두 개 Running 상태로 돌아오는지 확인해보자.
ETCD 백업
공식문서에 따르면 위 명령어로 ETCD 백업 할 수 있고 세부 파일 위치는 etcd 파드를 describe 하라고 나와있다.
etcdctl CLI를 쓸 수 있는 패키지를 설치한다.
etcd 파드를 describe 하여 certs 파일들의 경로를 확인한다.
kubectl describe pod < ETCD 파드명 > -n kube-system
--trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
--cert-file=/etc/kubernetes/pki/etcd/server.crt
--key-file=/etc/kubernetes/pki/etcd/server.key
etcd 명령어를 만든다. snapshot 저장위치는 /tmp/etcd-snapshot.db 이다.
ETCDCTL_API=3 etcdctl --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 \
snapshot save /tmp/etcd-snapshot.db
명령어가 성공하면 /tmp/etcd-snapshot.db가 생성된다.
그럼 deployment를 모두 삭제해보자.
root@kind-control-plane:/tmp# kubectl delete deploy gateway-deployment
deployment.apps "gateway-deployment" deleted
root@kind-control-plane:/tmp# kubectl delete deploy test-deployment
deployment.apps "test-deployment" deleted
이제 다시 복원했을때 삭제된 파드들이 원래대로 돌아올까?
ETCD 복원
ETCDCTL_API=3 etcdctl \
--data-dir /var/lib/etcd-new \
snapshot restore /tmp/etcd-snapshot.db
/tmp/etcd-snapshot.db 스냅샷을 /var/lib/etcd-new 디렉토리에 풀어 놓는다는 의미이다.
현재 실행중인 ETCD는 /var/lib/etcd 를 보고 있다. 이것을 /var/lib/etcd-new를 보게 설정을 변경해주어야 한다.
etcd 파드는 Staticd Pod로, kubelet이 바라보는 staticdPodPath 경로에 etcd 메니페스트 파일이 존재한다. 정확한 Staticd Pod의 위치를 확인하고 싶으면 /var/lib/kubelet/config.yaml 파일을 열어서 staticdPodPath에 설정된 경로를 확인하면 된다. 보통은 /etc/kubernetes/manifests 이므로, 해당 경로를 가면 된다.
/etc/kubernetes/manifests/etcd.yaml
volumes:
- hostPath:
path: /etc/kubernetes/pki/etcd
type: DirectoryOrCreate
name: etcd-certs
- hostPath:
path: /var/lib/etcd-new # etcd -> etcd-new
type: DirectoryOrCreate
name: etcd-data
volumes 설정에 보면 /var/lib/etcd 로 설정되어 있는데 /var/lib/etcd-new 로 변경하면 된다. Static Pod 이므로 kubelet이 알아서 변경된 설정으로 etcd를 실행한다. 그러면 아래와 같이, 삭제했던 파드들이 다시 복구 되었음을 확인할 수 있다.
root@kind-control-plane:/etc/kubernetes/manifests# kubectl get pods
NAME READY STATUS RESTARTS AGE
gateway-deployment-78bd54f4bb-mscdc 0/1 ImagePullBackOff 0 20d
test-deployment-555d5bfb6d-8trkb 1/1 Running 0 20d
test-deployment-555d5bfb6d-kpxbs 1/1 Running 0 20d
'DevOps > K8S' 카테고리의 다른 글
Kubernetes 네트워크 동작원리 (0) | 2025.06.18 |
---|---|
[K8S] Containerd에 Registry 설정하기 ( with Harbor ) (1) | 2025.06.04 |
kubectl alias 및 자동완성 설정하기 (0) | 2025.05.20 |
[K8S] Kubernetes 동작원리 (0) | 2024.02.25 |
[Kubernetes] NFS 서버에 PV 만들어 접근하기 ( 우분투 환경 ) (0) | 2023.10.16 |