반응형

우린 이때까지 클러스터에 deployment, service definition file들을 이용하여 많은 app을 설치했다.

그 중에, etcd는 모든 클러스터와 관계있는 정보들이 저장되었는데,
만약 app이 persistent storage에 configured 된다면, 백업을 위한 다른 방법이 있다.

 

 

 

우리가 클러스터 내에 resource를 생성한다면, 명령어/YAML등을 통해 이를 정의했다.
그리고 후자의 방법(YAML을 통한 정의)이 더 선호되는 방식이다.

왜냐하면, object들은 하나의 폴더 내 object definition 형태를 요구하기 때문이다.

그래야 다음에 재 사용도 가능하고, 정보가 날라갔을 때도 얼른 붙여와서 사용할 수 있다.
그래서 이런 것들은 source code repository에 저장하는 것이 좋다. (GitHub등)
그리고 이런 repository는 적절한 backup solution이 설정되어야 하는데,
GitHub과 같은 repository는 이에 대해 걱정할 필요는 없다.


 

또 하나의 resource 설정 backup 방법은, kube-apiserver에 쿼리해서 모든 정보를 저장하는 것이다. 
# kubectl get all --all-namespaces -o yaml > all-deploy-services.yaml


그런데, 사실 이렇게 하는 것도 적은 resource에 대해서만 유용하지,

app이나 저장할 양이 커지면 관리하기도 어렵다.

그래서, k8s API를 사용하는 대용량 저장을 위한 VELERO라는 솔루션도 있다.


그럼 다시 ETCD Cluster로 돌아가본다.
etcd는 클러스터 자체, 그리고 내부 상태에 대한 정보를 저장한다. 

따라서, 이전과 같이 리소스를 백업하는 대신, 백업할 서버를 선택할 수 있다.  
etcd는 master node에 호스팅 되는데, etcd 내 모든 정보가 저장되는 location이 별도로 설정된다. (--data-dir=/var/lib/etcd/ )

 

그리고, etcd에는 snapshot 이라는 내장 기능도 있다.

ETCDCTL_API=3 etcdctl \
   snapshot save snapshot.db

 

 

그럼 복구 기능은?
kubeapi server를 stop시킨다. 그런 다음 etcdctl를 통해 snapshot restore + path cmd를 사용한다.
그러면, etcd는 backup파일로부터 복구를 시작하고, etcd 멤버가 새 멤버인 것처럼 새 클러스터에 설정된다(?).

이 방법은 존재하는 클러스터로부터 뉴 멤버를 막기 위함이다.(??? 이해 못함)

이렇게 하면, 새 데이터 디렉토리가 생성되고, 생성된 새 directory를 etcd config파일에 설정한다.
이후에 service 데몬을 reload하고 restart etcd를 한다.
k8s api server가 시작되면, 클러스터는 오리지널 상태가 된다.


정리하자면, 백업을 위한 2가지 옵션이 있다.
1. backup using etcd
2. backup using by querying the kube-APIverver
만약 cloud등의 환경에서 k8s를 사용한다면, outside cluster를 향한 접근이 없으니 2번을 쓰는 게 편할 것이다. 



# ETCDCTL_API=3 etcdctl version
# ETCDCTL_API=3 etcdctl --cacert="" --cert="" --key="" snapshot save /opt/snapshot-pre-boot.db 
 // 위의 ""에 kubectl describe po를 통해 조회한 값을 넣는다.


status도 조회 가능하다.

# ETCDCTL_API=3 etcdctl snapshot status /opt/snapshot-pre-boot.db 


복구

# ETCDCTL_API=3 etcdctl snapshot restart <filename> --data-dir= 
  ex. ETCDCTL_API=3 etcdctl snapshot restart /opt/snapshot-pre-book.db --data-dir=/var/lib/etcd-backup
  // 이렇게 하면 etcd-backup 디렉토리가 생성되고, restore도 진행됨.
  data-dir은 etcd yaml 파일에 있기 때문에, hostPath도 backup으로 인해 생성된 backup directory로 바꿔주기.

출처: Udemy 사이트의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의

반응형

+ Recent posts