해당 내용은 Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의를 공부한 내용입니다. 내용을 그대로 번역하기보다는, 제가 이해하기 쉬운 대로 수정한 부분들이 있습니다.
⚠️ 영어 독해가 많이 부족합니다. 틀린 내용이 있으면 알려주시면 감사하겠습니다.
이 강의에서는 다양한 백업 및 복원 방법에 대해 살펴보겠습니다.
Backup Candidates
Kubernetes 클러스터에서 백업을 고려해야 하는 항목부터 살펴보겠습니다. 지금까지 이 과정에서 배포, 파드 및 서비스 definition 파일을 사용하여 Kubernetes 클러스터에 다양한 애플리케이션을 배포했습니다. 우리는 etcd 클러스터가 모든 클러스터 관련 정보가 저장되는 곳이며 애플리케이션이 영구 스토리지로 구성된 경우, 이것 또한 백업을 위한 또 다른 후보라는 것을 알고 있습니다.
Resource Configuration
Imperative way
클러스터에서 생성한 리소스와 관련하여, 때때로 커맨드형 방법을 사용합니다. 네임스페이스, secret 또는 config map을 생성하거나 또는 애플리케이션 expose를 할 때 커맨드를 실행하여 오브젝트를 생성하는 방법이지요.
Declarative way (preferred approach)
때로는 먼저 definition 파일을 만든 다음 해당 파일에서 kubectl apply 커맨드를 실행하는 선언적 접근 방식을 사용했습니다. definition 파일에 애플리케이션에 필요한 모든 오브젝트가 있으므로 선호되는 접근 방식입니다. 이는 나중에 쉽게 재사용하거나 다른 사람과 공유할 수 있습니다. 물론 이러한 파일의 복사본을 항상 저장해야 합니다. 팀에서 유지 관리할 수 있도록 소스 코드 리포지토리에 저장하는 것이 좋습니다.
소스 코드 리포지토리는 올바른 백업 솔루션으로 구성해야 합니다. GitHub와 같은 관리형 또는 공용 소스 코드 리포지토리를 사용하면 이에 대해 걱정할 필요가 없습니다. 이를 통해 전체 클러스터가 손실된 경우에도 이러한 configuration 파일을 클러스터에 적용하기만 하면 클러스터에 애플리케이션을 재배포할 수 있습니다.
Backup - Resource Configs
선언적 접근 방식이 선호되는 접근 방식이지만 모든 팀원이 이러한 표준을 고수할 필요는 없습니다. 누군가 해당 정보를 어디에도 문서화하지 않고 커맨드형 방식으로 오브젝트를 생성했다면 어떻게 될까요?
따라서 리소스 구성을 백업하는 더 나은 접근 방식은 Kube API 서버를 쿼리하는 것입니다. kubectl을 사용하거나 API 서버에 직접 액세스하여 Kube API 서버를 쿼리하고 클러스터에서 생성된 모든 개체에 대한 모든 리소스 configuration을 복사본으로 저장합니다.
예를 들어 백업 스크립트에서 사용할 수 있는 커맨드 중 하나는 kubectl 유틸리티의 get all 커맨드를 사용하여 모든 네임스페이스의 모든 파드, 배포 및 서비스를 가져오고 출력을 YAML 형식으로 추출한 다음 해당 파일을 저장하는 것입니다.
$ kubectl get all --all-namespaces -o yaml > all-deploy-services.yaml
그러나 이는 일부 리소스 그룹에만 적용됩니다. 고려해야 할 다른 많은 리소스 그룹이 있습니다.
물론 해당 솔루션을 직접 개발할 필요는 없습니다. Ark, Heptio의 Velero tool 이 작업을 수행할 수 있습니다. tool에서 제공하는 Kubernetes API를 사용하여 Kubernetes 클러스터를 백업하는 데 도움이 될 수 있습니다.
Backup - ETCD
이제 etcd로 이동하겠습니다. etcd 클러스터는 클러스터 상태에 대한 정보를 저장합니다. 따라서 클러스터 자체, 클러스터 내에서 생성된 노드 및 기타 모든 리소스에 대한 정보가 여기에 저장됩니다. 따라서 이전처럼 리소스를 백업하는 대신 etcd 서버 자체를 백업하도록 선택할 수 있습니다.
살펴본 바와 같이 etcd 클러스터는 마스터 노드에서 호스팅됩니다. etcd를 구성하는 동안 모든 데이터가 저장될 위치인 데이터 디렉토리를 지정했습니다. 백업 툴로 백업하도록 구성할 수 있는 디렉토리입니다.
Etcd에는 builtin 스냅샷 솔루션도 함께 제공됩니다. etcdctl snapshot save 커맨드를 사용하여 etcd 데이터베이스의 스냅샷을 생성할 수 있습니다.
$ ETCDCTL_API=3 etcdctl snapshot save snapshot.db
스냅 샷 이름을 snapshot.db로 지정했습니다. 커맨드를 실행하면 현재 디렉토리의 지정한 이름으로 스냅샷 파일이 생성됩니다. 다른 위치에 생성하려면 전체 경로를 지정하면 됩니다. snapshot status 커맨드를 사용하여 백업 상태를 볼 수 있습니다.
$ ETCDCTL_API=3 etcdctl snapshot status snapshot.db
Restore - ETCD
나중에 이 백업에서 클러스터를 복원하려면 먼저 Kube API 서버 서비스를 중지합니다. 복원 프로세스에서 etcd 클러스터를 다시 시작해야 하기 때문입니다.
$ service kube-apiserver stop
그런 다음, 경로가 스냅샷 백업 파일의 경로로 설정된 상태에서 etcdctl snapshot restore 커맨드를 실행하세요. etcd가 복원할 때 새 클러스터 configuration을 초기화하고 etcd의 멤버를 새 클러스터의 새 멤버로 구성합니다. 이는 새 멤버가 실수로 기존 클러스터에 가입하는 것을 방지하기 위한 것입니다. 이 커맨드를 실행하면 새 데이터 디렉토리가 생성됩니다. 이 예에서는 var/lib/etcd-from-backup 입니다. 그런 다음 새 데이터 디렉터리를 사용하도록 etcd configuration 파일을 구성합니다.
그런 다음 서비스 데몬을 다시 로드하고 etcd 서비스를 다시 시작합니다.
$ systemctl daemon-reload
$ service etcd restart
마지막으로 Kube API 서버 서비스를 시작합니다. 이제 클러스터가 원래 상태로 돌아와야 합니다.
$ service kube-apiserver start
cert,key,cacert and endpoint 지정
모든 etcdctl 커맨드를 사용할 때는, 인증을 위한 certificate 파일을 지정하고 etcd 클러스터에 대한 엔드포인트와 CS certificate, etcd 서버 certificate를 지정해야 합니다.
$ 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
'MLOps > Doker & Kubernetes' 카테고리의 다른 글
Udemy CKA 강의 정리 134: Certification Exam Tip! (0) | 2023.01.16 |
---|---|
Udemy CKA 강의 정리 130: Working with ETCDCTL (0) | 2023.01.16 |
Udemy CKA 강의 정리 128: Solution - Cluster Upgrade (0) | 2023.01.14 |
Udemy CKA 강의 정리 127: Practice Test - Cluster Upgrade (0) | 2023.01.14 |
Udemy CKA 강의 정리 126: Demo - Cluster Upgrade (0) | 2023.01.14 |
댓글