DevOps/K8S

ETCD BackUp / Restore ( ETCD 백업 및 복원 )

IT록흐 2025. 6. 22. 22:27
반응형

 

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 백업

 

https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-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

 

 

반응형