상세 컨텐츠

본문 제목

etcd Backup & Restore

⚙️ Kubernetes

by chnh 2023. 2. 13. 16:44

본문

반응형

etcd


etcd라는 이름은 유닉스 "/etc" 폴더와 “d"istributed systems 이라는 두 가지 아이디어에서 유래 되었다. /etc 폴더가 단일 시스템에 대한 구성 데이터를 저장하는 저장소라면 etcd는 ‘분산된’ etc, 즉 대규모 분산 시스템에 대한 구성 정보를 저장하는 저장소라는 뜻이다.

 

물론 이런 기능을 수행할 수 있는 서비스가 etcd만 존재하는 것은 아니다. etcd와 같이 여러 컴포넌트가 정상적으로 상호작용할 수 있도록 데이터를 조정하는 역할을 하는 도구를 분산 코디네이터라고 하는데, 분산 코디네이터에는 etcd 외에도 zookeeper, consul 등이 있다. etcd가 아닌 다른 key-value스토어에 대한 내용은 다음 링크에서 확인할 수 있다. etcd versus other key-value stores

 

쿠버네티스는 etcd를 backing storage로 사용하고 있으며 모든 구성 데이터를 key:value형태로 etcd에 저장한다.

 

Desired status가 etcd에 저장돼 있고 controller가 api 서버의 watch api를 통해 etcd에 저장된 상태 데이터를 받아와 동작을 수행한다. 쉽게 말하면 클러스터가 어떤 노드를 갖고있는지, 이 파드는 어떤 노드에 생성되어야 하는 지 등의 정보가 담긴 스토리지라고 할 수 있다. 따라서 etcd가 다운되면 클러스터가 정상적으로 작동할 수 없게 된다. etcd의 안정성은 클러스터 운영에 매우 중요한 부분이고, 백업 역시 그러하다.

 

Backup & Restore


이 글에서는 내장된 스냅샷 기능을 사용하여 Backup 단일 노드 etcd 클러스터 백업 및 복원에 대해 다룬다. 

Backup

먼저 etcd backup을 위한 명령어를 살펴보자. 참고:  Backing up an etcd cluster

ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=<trusted-ca-file> --cert=<cert-file> --key=<key-file> \
snapshot save <backup-file-location>

여기서 --cacert, --cert, --key 는 필수이며 etcd와 동일한 서버에서 명령을 실행할 때는 --endpoints 옵션은 지정하지 않아도 된다. etcd는 pod 형태로 kube-system 네임스페이스에 배포되어 있고, kubectl describe 명령어를 통해 etcd backup에 필요한 정보들을 확인할 수 있다.

kubectl describe pod etcd-controlplane -n kube-system | grep -i etcd
Name: etcd-controlplane
Labels: component=etcd
Annotations: kubeadm.kubernetes.io/etcd.advertise-client-urls: https://172.28.192.5:2379
etcd:
Image: k8s.gcr.io/etcd:3.5.1-0
Image ID: docker-pullable://k8s.gcr.io/etcd@sha256:64b9ea357325d5db9f8a723dcf503b5a449177b17ac87d69481e126bb724c263
etcd
--cert-file=/etc/kubernetes/pki/etcd/server.crt # Path to the client server TLS cert file
--data-dir=/var/lib/etcd # Path to the data directory
--key-file=/etc/kubernetes/pki/etcd/server.key # Path to the client server TLS key file
--peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
--peer-key-file=/etc/kubernetes/pki/etcd/peer.key
--peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
--trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt # Path to the client server TLS trusted CA cert file
/etc/kubernetes/pki/etcd from etcd-certs (rw)
/var/lib/etcd from etcd-data (rw)
etcd-certs:
Path: /etc/kubernetes/pki/etcd
etcd-data:
Path: /var/lib/etcd

위 정보를 토대로 구성한 명령은 다음과 같다.

ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save /opt/etcd-backup.db

etcd는 /opt/etcd-backup.db에 백업 되었다.

 

Restore

/opt/etcd-backup.db 에 저장된 스냅샷을 복원해본다.

여기서 --data-dir은 스냅샷이 복원될 디렉토리를 의미한다. /opt/etcd-backup.db--data-dir의 경로로 복원해주겠다는 의미이다.

ETCDCTL_API=3 etcdctl --data-dir=/var/lib/from-backup snapshot restore /opt/etcd-backup.db

 

이제 /var/lib/from-backup 경로에 etcd의 파일이 위치하게 된다.

/etc/kubernetes/manifests/etcd.yaml 파일에서 spec.volumes.hostPathpath를 새로운 경로로 변경한 뒤 저장한다. 

volumes:
- hostPath:
path: /var/lib/etcd-from-backup
type: DirectoryOrCreate
name: etcd-data

 

manifest 파일 수정이 완료되면 자동으로 재시작되며 백업한 리소스들로 복원된다.

 

 


내장된 스냅샷 기능으로 간단하게 백업과 복원이 가능하다. 하지만 실제로 프로덕션 환경에서 etcd를 단일 노드 클러스터로 사용하는 것은 매우 위험하기 때문에 다음 글에서는 다중 노드 클러스터일 때 백업과 복원을 하는 방법에 대해 살펴보겠다. 

 

반응형

'⚙️ Kubernetes' 카테고리의 다른 글

관련글 더보기

댓글 영역