Recent Comments
Link
Recent Posts
Today
Total
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
관리 메뉴

Study Memory Work

[K8S/CKA 자격증] ETCD Backup & Restore (문제O) 본문

Infra/Kubernetes

[K8S/CKA 자격증] ETCD Backup & Restore (문제O)

Hera Choi 2023. 1. 12. 20:47

 

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이다.

kube-system namepace내에 etcd pod가 떠있는 것을 확인할 수 있다.

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 여부 확인

 

docs에 있는 Backup 명령어 복사하여 메모장에 붙여넣기 -> https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster

# 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 잘 적용되었는지 확인

docs에 있는 Restore 명령어 복사하여 메모장에 붙여넣기 -> https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster

# 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에서 실행 중인 etcdsnapshot을 생성하고 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