Study Memory Work
[K8S/CKA 자격증] ETCD Backup & Restore (문제O) 본문
ETCD
현재 운영되고 있는 k8s의 운영정보가 들어있는 저장소. etcd가 손상되면 모든 어플리케이션 서비스가 중지된다.
그렇기 때문에 동일한 데이터를 가지고 있는 etcd를 여러대 둔다. --> master를 여러대로 분산 운영한다. (고가용성 클러스터 환경)
• Coreos가 만든 분산 key:value형태의 데이터 스토리지
• 쿠버네티스 클러스터의 정보를 저장(memory)해서 사용
• 모든 etcd 데이터는 etcd 데이터베이스 파일에 보관 : /var/lib/etcd
• etcd관리명령: etcdctl
ETCD 동작
하나의 static pod형태로 동작하고 있다. ( yaml file path : /etc/kubernetes/mainifests/stcd.yaml )
# etcd pod로 떠있는 것 확인해보기.
$ kubectl get pod -n kube-system.
# k8s운영에 관련된 api들이 실행되는 공간 kube-system.
# k8s가 실제 동작하는 데에 필요한 것들이 운영되고 있는 nameSpace이다.
ETCD 관리
# ETCD를 호스팅 할 시스템에 ssh 로그인
$ ssh {severName}
# 동작중인 etcd 버전과 etcdctl 툴이 설치여부 확인
$ etcd --version
$ etcdctl version
ETCD Backup (snapshot) / Restore
- backup

# snapshot 뜨기.
$ etcdctl snapshot save {filename}
- Restore
• Snapshot으로 저장한 database파일을 동작중인 etcd에 적용하여 snapshot 생성 시점으로 되돌리기
• 단계
(1) snapshot 파일을 데이터베이스 파일로 복원
(2) 동작 중인 etcd Pod의 구성 정보를 복원된 데이터베이스 위치로 수정 적용

$ etcdctl snapshot restore {snapshot filenam}
ETCD Backup/Restore 관련 Documents
Operating etcd clusters for Kubernetes
etcd is a consistent and highly-available key value store used as Kubernetes' backing store for all cluster data. If your Kubernetes cluster uses etcd as its backing store, make sure you have a back up plan for those data. You can find in-depth information
kubernetes.io
Backup & Restore 실습
- Backup : /var/lib/etcd에 있는 데이터베이스를 /tmp/etcd-backup 으로 snapshot 뜨기.
시나리오 :
1) Kubernets Documents에서 Backup 명령어 가져오기
2) ETCD Backup할 Master node로 접속
3) Docs에서 가져온 명령어 빈칸 채우기 (버전, trusted-ca-file, cert-file, key-file, backup파일 path)
4) 관리자 권한으로 명령어 실행
5) Backup 여부 확인
# 1. ETCD Backup할 Mater node로 접속
$ ssh {node명}
# 2. etcdctl 버전 확인
$ etcdctl version
# 3. Docs에서 가져온 명령어에 빈칸 채우기 (각각 ps로 검색하면 경로가 나옴!)
# cacert
$ ps -ef | grep kube | grep trusted-ca-file
# cert-file
$ ps -ef | grep kube | grep cert-file
# key-file
$ ps -ef | grep kube | grep key-file
# 4. 완성된 명령어에 'sudo'붙여 실행하기
$ sudo ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert={trusted-ca-file} --cert={cert-file} --key={key-file} \
snapshot save /tmp/etcd-backup
# 5. backup 파일 생성 여부 확인
$ ls /tmp/ -l
- Restore : /tmp/etcd-backup 를 현재 etcd로 적용
시나리오 :
1) restore 전/후 비교를 위해 pods 에서 nginx 관련 pods 삭제
2) Kubernets Documents에서 Restore 명령어 가져오기
3) Docs에서 가져온 명령어 빈칸 채우기 ( Restore 할 위치, snapshot Path)
> backup된 db를 현재 사용하는 etcd 디렉토리가 아닌 새로운 디렉토리로 restore한다.
4) 관리자 권한으로 명령어 실행
5) Restore가 정상적으로 진행되었는지 확인
6) etcd pod에 새로운 데이터공간을 적용한다. yaml file 변경.
> aml파일이 변경되면 pod는 자동적으로 restart 된다.
5) snapshot restore 잘 적용되었는지 확인
# 1. restore 전/후 비교를 위해 pods 에서 nginx 관련 pods 삭제
$ kubectl delete deployments.apps nginx
# 2. Docs에서 가져온 명령어 빈칸 채우기 (Restore 할 새 폴더, snapshot Path)
ETCDCTL_API=3 etcdctl snapshot restore --data-dir {data-dir-location} {snapshot 경로}
# 3. 관리자 권한으로 실행
$ sudo ETCDCTL_API=3 etcdctl snapshot restore --data-dir {data-dir-location} {snapshot 경로}
# 4. Resotre 정상 실행 여부 확인
$ ls /var/lib/{Restore된 폴더명}
# 5. etcd pod에 새로운 데이터공간을 적용한다. (pod restart)
$ sudo vi /etc/kubernets/manifests/etcd.yaml
###########
volums:
hostPAth: /var/lib/etcd # -------> {data-dir-location} 로 변경
type: DirectoryOrCreate
name: etcd-data
###########
# 5. snapshot restore 잘 적용되었는지 확인
kubectl get pods
Backup & Restore 기출문제
[문제1]
작업 클러스터: k8s
https://127.0.0.1:2379에서 실행 중인 etcd의 snapshot을 생성하고 snapshot을 /data/etcd-snapshot.db에 저장합니다. 그런 다음 /data/etcd-snapshot-previous.db에 있는 기존의 이전 스냅샷을 복원합니다.
etcdctl을 사용하여 서버에 연결하기 위해 다음 TLS 인증서/키가 제공됩니다.
• CA certificate: /etc/kubernetes/pki/etcd/ca.crt
• Client certificate: /etc/kubernetes/pki/etcd/server.crt
• Client key: /etc/Kubernetes/pki/etcd/server.key
'Infra > Kubernetes' 카테고리의 다른 글
[K8S/CKA 자격증] API 인증 / rbac 인증 (문제O) (0) | 2023.01.13 |
---|---|
[K8S] The connection to the server localhost:8080 was refused - did you specify the right host or port? 해결방법 (0) | 2023.01.13 |
[K8S/CKA 자격증] Kubernetes Cluster upgrade (문제O) (0) | 2023.01.12 |
[K8S/CKA 자격증] kubectl 명령어 기초 (0) | 2023.01.12 |
[K8S/CKA 자격증] Kubernetes 기본 구성 요소 (0) | 2023.01.11 |