ETCD는 K8s 클러스터의 모든 데이터가 위치한 저장소로, 주기적으로 백업하여 혹시 모를 재난에 대비할 수 있어야 한다. 다행히 자체적으로 스냅샷과 복원 기능을 제공하기 때문에 어렵지 않게 사용할 수 있다. K8s Master node에서 아래와 같은 작업을 진행한다.
etcdctl
CLI에서 etcd를 관리할 수 있는 툴이다. Ubuntu의 경우, etcd-client 패키지를 설치하면 바로 사용할 수 있다.
apt update -y && apt install -y etcd-client
Snapshot 생성
다음 명령어로 현재 etcd 클러스터의 snapshot을 현재 위치에 'etcd-snapshot.db' 파일로 저장할 수 있다.
ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/apiserver-etcd-client.crt \
--key=/etc/kubernetes/pki/apiserver-etcd-client.key \
snapshot save etcd-snapshot.db
- ETCDCTL_API: 해당 환경변수를 따로 지정하지 않는 경우, etcdctl v2를 사용한다. 우리는 v3 API가 필요하기 때문에 ETCDCTL_API=3를 추가하였다.
- --cacert: etcd 설정시 생성한 Certificate Authority 파일(/etc/kubernetes/pki/etcd/ca.crt)을 지정한다.
- --key, --cert: K8s에서 etcd에 접근할 수 있는 Component는 kube-apiserver 뿐이다. 따라서 해당 Component에서 사용하는 Client 인증서(/etc/kubernetes/pki/apiserver-etcd-client.crt)와 Key(/etc/kubernetes/pki/apiserver-etcd-client.key)를 사용한다.
Snapshot 상태 확인
다음 명령어로 지정된 Snapshot 파일의 상태를 테이블 형식으로 확인 가능하다.
ETCDCTL_API=3 etcdctl snapshot status --write-out=table etcd-snapshot.db
Restore
1. kube-apiserver의 가동을 멈춘다. Static Pod으로 kube-apiserver를 실행중이라면 다음과 같이 Manifest 파일의 이름을 바꿔주는 것만으로 정지 가능하다.
cd /etc/kubernetes/manifests/
mv kube-apiserver.yaml kube-apiserver.yaml.tmp
2. 다음 명령어로 지정된 경로에 etcd 데이터 디렉토리를 생성한다..
ETCDCTL_API=3 etcdctl snapshot restore etcd-snapshot.db --data-dir /var/lib/etcd-backup
3. etcd의 데이터 디렉토리 경로를 변경한다. 예를 들어 Static Pod으로 etcd를 실행 중이라면 아래와 같이 Manifest 파일(/etc/kubernetes/manifests/etcd.yaml)을 수정한다.
#...
spec:
containers:
- command:
- etcd
- --advertise-client-urls=https://172.30.1.42:2379
- --cert-file=/etc/kubernetes/pki/etcd/server.crt
- --client-cert-auth=true
#- --data-dir=/var/lib/etcd
- --data-dir=/var/lib/etcd-backup
#...
4. kube-apiserver를 가동한다. Manifest 파일의 이름을 원래대로 돌려놓는다.
cd /etc/kubernetes/manifests/
mv kube-apiserver.yaml.tmp kube-apiserver.yaml
'Kubernetes' 카테고리의 다른 글
Kubernetes: The Documentary (0) | 2022.02.04 |
---|---|
PodDisruptionBudget을 활용한 Application 보호 (0) | 2021.09.22 |
Open Policy Agent (0) | 2021.05.05 |
ETCD Encryption (0) | 2021.04.21 |
Imperative Vs. Declarative (0) | 2021.04.08 |