Cloud/k8s-CKA

[CKA] 22. k8s cluster backup 방법

jinkwon.kim 2023. 5. 7. 15:34
728x90
반응형

개요

k8s cluster의 설정을 backup 하는 방법을 알아보겠습니다

backup의 대상 

1. Resource Configuration 

2. ETCD Cluster

3. Persistent Volumes

Resource Configuration  backup 방법

1. Imperative (명령어 방식)

방식

일일이 수행한 명령어는 저장하는 방식

장점

없는 거 같음..

단점

어떻게 생성했는지 까먹으면 골치가 아픕니다.

2. Declarative (선언적 방식)

방식

yaml file을 저장하는 방식

장점

github 같은 저장소에 보관해서 팀 내에서 공유하기 편합니다. 

단점

Imperative로 만든 object는 관리가 안됩니다.

3. Resource configs backup

방식 

kube-apiserver를 이용하여 현재 resouce configuration을 모두 yaml 파일로 저장하는 방식

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

장점

Imperative 방식으로 생성한 obejct까지 모두 backup이 가능합니다. 

단점

추후에 수정이 어려움

관련 tools

VELERO

ETCD Cluster backup 방법

ETCD Cluster는 cluster의 상태를 저장하고 있습니다.

cluster의 모든 것을 저장하고 있습니다. 그래서 이것만 backup을 잘해놓으면 k8s를 다시 복구하기 수월 합니다. 

etcdctl 설치

etcdctl은 k8s 설치 시 기본 설치가 되지 않기 때문에 github에서 code를 다운로드한 후 build 해주어야 합니다. 

golang으로 programming 되어있기 때문에 golang 설치가 필요합니다.

golang 설치

https://go.dev/doc/install

etcdctl 설치

git https://github.com/etcd-io/etcd clone

cd etcdctl

go build

etcdctl 사용법

etcdctl을 사용하기 위해서 우선 etcd certificate 정보 및 접속 url을 알아야 합니다. 

모든 정보는 /etc/kubernetes/manifests/etcd.yaml에 존재합니다.

버전 확인

kubectl describe pod etcd-controlplane -n kube-system에서 나온 image이름을 봐서 확인합니다. 

접속 URL 확인

control plane에서 접근 가능한 etcd의 url을 확인

 

--listen-client-urls=https://127.0.0.1:2379,https://192.8.70.6:2379

etcd server certificate file 확인

--cert-file=/etc/kubernetes/pki/etcd/server.crt

etcd server private key 확인

--key-file=/etc/kubernetes/pki/etcd/server.key

etcd의 CA Certificate file 확인

--peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt

CS상식

Certificate

인증서(Certificate)는 공개키 암호화 방식에서 사용되는 디지털 인증서로, 서버와 클라이언트 간의 통신에 사용됩니다. 인증서에는 인증서의 발급자, 유효 기간, 서버 또는 클라이언트의 정보, 그리고 서버 또는 클라이언트의 공개키가 포함됩니다.

 

Certificate file

Certificate file은 서버 또는 클라이언트가 다른 시스템과 통신하는 데 사용되는 인증서를 저장하는 파일입니다. 일반적으로 PEM, DER 또는 PKCS#12와 같은 형식으로 저장됩니다.

 

Certificate key

Certificate key는 서버 또는 클라이언트의 개인키(Private Key)를 가리킵니다. 인증서와 함께 사용되며, 공개키 암호화 방식에서 데이터를 안전하게 암호화하고 복호화하는 데 사용됩니다.

 

CA(Certificate Authority) (=인증 기관)

공인된 제3자 기관으로, 인증서를 발급하고 관리합니다. CA는 공개키 인프라(PKI)에서 중요한 역할을 합니다. 인증서를 발급받기 위해서는 해당 CA의 인증을 받아야 하며, CA가 발급한 인증서는 신뢰할 수 있는 것으로 간주됩니다. 브라우저 또는 운영 체제는 미리 설정된 신뢰할 수 있는 CA 목록을 가지고 있으며, 이 목록에 있는 CA가 발급한 인증서는 자동으로 신뢰할 수 있는 것으로 간주됩니다.

 

따라서 Certificate file은 서버 또는 클라이언트의 인증서를 저장하는 파일, CA는 인증서를 발급하고 관리하는 공인된 제3자 기관, 그리고 Certificate key는 서버 또는 클라이언트의 개인키를 가리킵니다. 이 세 가지는 서버와 클라이언트 간의 안전한 통신을 보장하는 데 중요한 역할을 합니다.

backup 명령어

backup

 /opt/snaphost-pre-boot.db 파일로 backup 합니다.

ETCDCTL_API=3 etcdctl --endpoints 127.0.0.1:2379   \
--cert=/etc/kubernetes/pki/etcd/server.crt  \
--key=/etc/kubernetes/pki/etcd/server.key \
--cacert=/etc/kubernetes/pki/etcd/ca.crt  \
snapshot save /opt/snaphost-pre-boot.db

확인

ETCDCTL_API=3 ./etcdctl snapshot status snapshot.db

backup 복구 순서

kube-apiserver 종료

kube-apiserver가 etcd에 의존하기 때에 먼저 종료 하니다

service kube-apiserver stop

etcd 복구

etcd가 백업에서 복원될 때, 새 클러스터 구성을 초기화하고 etcd의 멤버를 새 클러스터의 새 멤버로 구성합니다.

이때 새 멤버가 기존 클러스터에 실수로 가입하는 것을 방지하기 위해서--data-dir를 새로 지정합니다.

ETCDCTL_API=3 ./etcdctl snapshot restore snapshot.db --data-dir /var/lib/etc-from-backup

daemon 재시작 or manifests 수정

daemon 재시작

etcd를 따로 사용하는 경우)

systemctl daemon-reload

service etcd restart

service kube-apiserver start

manifests 수정

/etc/kubernetes/manifests/etcd.yaml의 etcd-data의 hostPath를 수정합니다.

그러면 알아서 k8s가 etcd를 재구동 합니다. 만약 실패할 경우 pod를 삭제하면 자동으로 재 생성이 됩니다.

정리 

k8s의 backup 대상의 크기 2가지가 존재합니다. 

resouce backup 과 etcd backup 

1. resource backup의

- 현재의 resource를 모두 yaml 파일로 만들어서 backup 하는 방법

- yaml로 관리되는 파일을 github에 backup 하는 방법

2. etcd backup 

- k8s cluster의 모든 것을 backup 하고 싶을 때 사용합니다. 

- etcdctl tool을 이용하여 backup을 할 수 있습니다.

Next Post

[CKA] 23. k8s cluster 관리

728x90
반응형

'Cloud > k8s-CKA' 카테고리의 다른 글

[CKA] 24. k8s network를 위한 기초  (0) 2023.06.29
[CKA] 23. k8s cluster 관리  (0) 2023.05.07
[CKA] 21. k8s cluster upgrade  (0) 2023.05.05
[CKA] 20. node operating system update  (0) 2023.04.24
[CKA] 19. multi container pods  (0) 2023.04.20