Search
Duplicate

BackUp & Restore

생성일
2021/05/04 20:41
태그

Backup and Restore Methods

쿠버네티스에 있는 모든 리소스 데이터를 백업하는 가장 간단한 방법은 아래 명령어를 이용해서 한꺼번에 YAML 파일로 만드는 것이다.
$ kubectl get all --all-namespaces -o yaml > all-deploy-services.yaml
Plain Text
복사

ETCD 백업 & 복구

쿠버네티스 공식 사이트에는 ETCD를 백업하고 복구하는 방법이 자세하게 나와있지 않다. 따라서 아래 명령어의 암기 필요
Backup - ETCD
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/snapshot-pre-boot.db
Plain Text
복사
Restore - ETCD Snapshot
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 \\ --name=master \\ --data-dir /var/lib/etcd-from-backup \\ --initial-cluster-token=etcd-cluster-1 \\ --initial-cluster=master=https://127.0.0.1:2380 \\ --initial-advertise-peer-urls=https://127.0.0.1:2380 \\ snapshot restore /tmp/snapshot-pre-boot.db
Plain Text
복사
ETCD POD 재시작 kubeadm으로 클러스터를 구성하는 경우 기본적으로 ETCD가 Static POD로 실행된다.
따라서 /etc/kubernetes/manifests/etcd.yaml 파일에 ETCD POD 명세가 존재한다.
위 복구 과정에서 추가한 옵션 중 --data-dir과 --initial-cluster-token을 etcd 컨테이너 command 옵션에 추가 또는 수정해줘야 한다. 그리고 --data-dir이 변경되었기 때문에 해당 폴더에 대한 volumes와 volumeMounts 부분도 수정해야 한다. (사실 volumeMounts의 hostPath.path만 수정하면 된다)

Backup Candidates

Resource Configuration

Declarative Way (Preferred approach)
apiVersion: v1 kind: Pod metadata: name: myapp-pod labels: app: myapp type: front-end spec: containers: - name: nginx-container image: nginx
Plain Text
복사
좋은 방법은 github와 같은 소스 코드 저장소에 리소스 구성을 저장하는 것입니다.

Backup - Resource Configs

$ kubectl get all --all-namespaces -o yaml > all-deploy-services.yaml (only for few resource groups)
Plain Text
복사

Backup - ETCD

리소스를 백업하는 대신 ETCD 클러스터 자체를 백업하도록 선택할 수 있습니다.
쿠버네티스의 모든 리소스는 ETCD에 저장된다. 주기적으로 ETCD를 백업하는 프로세스를 둔다면 장애 상황에 더 쉽게 대응할 수 있을 것이다.
etcdctl 유틸리티 스냅 샷 저장 명령을 사용하여 etcd 데이터베이스의 스냅 샷을 만들 수 있습니다.
$ ETCDCTL_API=3 etcdctl snapshot save snapshot.db
Plain Text
복사
$ ETCDCTL_API=3 etcdctl snapshot status snapshot.db
Plain Text
복사

Restore - ETCD

나중에 etcd의 백업에서 데이터를 복구하기 위해서, 먼저 kubet-apiserver 서비스를 중단해야 합니다.
$ service kube-apiserver stop
Plain Text
복사
Run the etcdctl snapshot restore command
Update the etcd service
Reload system configs
$ systemctl daemon-reload
Plain Text
복사
Restart etcd
$ service etcd restart
Plain Text
복사
Start the kube-apiserver
$ service kube-apiserver start
Plain Text
복사

모든 etcdctl commands 를 사용하여 인증을 위한 cert,key,cacert and endpoint를 지정합니다..

$ ETCDCTL_API=3 etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt \\ --cert=/etc/kubernetes/pki/etcd/etcd-server.crt \\ --key=/etc/kubernetes/pki/etcd/etcd-server.key snapshot save /tmp/snapshot.db
Plain Text
복사

K8s Reference Docs