declarative 방식으로 파일로 관리하는 것이 좋음
클러스터 전체가 망가져도 이 백업 파일이 있으면 복구 가능
kube-apiserver에 쿼리하여 오브젝트를 백업 파일로 받아놓는다.
다만 이 명령어로 모든 오브젝트를 백업할 수 있는 것은 아님
kubectl get all --all-namespaces -o yaml > all-deploy-services.yaml
클러스터에 대한 정보 및 모든 리소스가 이곳에 저장됨
마스터 노드에 위치하며 데이터 경로를 확인하면 이곳에서 파일 백업 가능
--data-dir=/var/lib/etcd
스냅샷 기능도 있음
인증서를 포함하여 백업할 것
ETCDCTL_API=3 etcdctl snapshot save snapshot.db \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/etcd/ca.crt \
--cert=/etc/etcd/etcd-server.crt \
--key=/etc/etcd/etcd-server.key
스냅샷 복구하기
# kube-apiserver 중지시킨 후
service kube-apiserver stop
# 복구
ETCDCTL_API=3 etcdctl snapshot resotre snapshot.db \
--data-dir /var/lib/etcd-from-backup
# 재기동
systemctl daemon-reload
service etcd restart
service kube-apiserver restart
ETCDCTL : etcd를 사용하기 위한 커맨드 라인 클라이언트
# 현재 etcd 버전
export ETCDCTL_API=3
etcd에 TLS 적용되면서 아래처럼 인증서도 함께 백업해야 한다
etcdctl snapshot save {파일이름} \
--cacert= ~~~ \ # verify certificates of TLS-enabled secure servers using this CA bundle
--cert= ~~~ \ # identify secure client using this TLS certificate file
--endpoints= ~~~ \ # This is the default as ETCD is running on master node and exposed on localhost 2379.
--key= ~~~ # identify secure client using this TLS key file
# /var/lib/etcd-from-backup -> 새로운 호스트 경로
etcdctl snapshot restore {파일이름} \
--data-dir /var/lib/etcd-from-backup
etcd.yaml 파일 수정
vi /etc/kubernetes/manifests/etcd.yaml
----------------------------
...
volumes:
...
- hostPath:
path: /var/lib/etcd-from-backup # 새로운 경로로 변경
type: DirectoryOrCreate
name: etcd-data
실습하면서 복구 부분 보완 할 것