IT/CKA

CKA 준비과정 - Cluster Maintenance (3) / 백업과 복구

Primes 2023. 6. 13. 16:09
728x90

쿼리를 통한 백업과 복원

이제까지 리소스를 생성할 때, 정의 파일을 생성하여 리소스를 정의하여 생성하는 방식을 주로 사용하였다.

일반적으로 명령어를 사용하여 생성하는 것보다는 정의 파일을 이용하여 리소스를 생성하는 것이 권장된다. 정의 파일은 백업도 가능하고, 타인과 공유도 가능하기 때문이다.

정의 파일은 git과 같은 코드 리포지토리를 통해 버전 관리를 하기에도 용이하다.

 

만일 정의 파일을 이용하지 않고 리소스를 생성하였는데 백업 및 복원이 필요할 경우에는 어떻게 해야 하는가?

이러한 경우에는 kube-apiserver를 쿼리하는 것이 가장 좋다.

 

kubectl 을 활용하여 kube-apiserver에 접근하여 클러스터 내 리소스 구성 정보를 복제하여 저장할 수 있다.

kubectl get all --all-namespaces -o yaml > all-deploy-services.yaml

일반적으로 위 명령어를 이용하여 Namespaces에 존재하는 모든 파드, 배포, 서비스를 가져와 yaml 파일에 저장할 수 있다.

 

또한, 외부 프로그램을 이용하여 백업할 수 있다. VELERO와 같은 백업 도구를 활용할 수 있다.

 

 

Backup - ETCD

ETCD는 클러스터의 상태에 대한 정보를 저장한다. 내부 리소스에 대한 정보, 클러스터 자체의 정보가 모두 저장되는 장소이다. 따라서 ETCD를 백업할 때는 일부 리소스를 백업하는 것이 아닌, ETCD 서버 전체를 백업하는 것이 권장된다.

 

ETCD 서버는 마스터 노드에 올라간다. 상기 이미지의 data-dir 폴더는 모든 데이터가 저장되는 경로이다.

 

ETCD는 스냅샷을 통한 백업 및 복구를 지원한다.

etcdctl snapshot save
etcdctl snapshot status
etcdctl snapshot restore

위 명령어를 통해 클러스터 데이터의 백업, 상태확인, 복구까지 진행할 수 있다.

복원을 진행할 때는 kube-apiserver 서비스가 중단된다. ETCD 클러스터의 복원을 위해서는 재시작이 필요한데, kube-apiserver가 ETCD 클러스터의 데이터를 기반으로 동작하기 때문에 유의할 필요가 있다.

 

복원 명령어를 사용할 때, 특정 경로를 지정하면 해당 경로에 데이터베이스 파일이 생성된다.

 

위와같은 스냅샷 백업 및 복구 절차 뒤에는 daemon 서비스 재시작, kube-apiserver 재시작까지 진행해주어야 클러스터가 완전히 복구되어 복원된 상태로 서비스를 지속할 수 있다.

 

복원과정

 

반응형