Post

Section 6-2. Backup and Restore Methods

udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의 및 쿠버네티스 인 액션 (마르코 룩샤)를 참고하여 정리한 글입니다.

Section06. Cluster Maintenance

Backup and Restore Methods

Backup ETCD Cluster

  • ETCD cluster는 클러스터 상태 (클러스터 자체에 대한 정보와 노드 및 클러스터 내부에서 생성된 모든 리소스 등)에 관한 정보를 저장하고 있다.
  • ETCD Cluster는 마스터 노드에 호스트 되어있는데 ETCD를 구성할 때 모든 데이터가 저장될 위치인 –date-dir가 지정되어 있다.
    1
    2
    3
    4
    
    ExecStart=/usr/local/bin/etcd \\
     --name ${ETCD_NAME} \\
     ... 생략
     --data-dir=/var/lib/etcd
    
  • ETCD는 또한 스냅샷 솔루션이 내장되어 있어 /var/lib/etcd를 스냅샷 파일로 복제해서 보존할 수 있다.
    1
    
    etcdctl snapshot save <스냅샷 파일 경로>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    $ etcdtl snpashot save snapshot.db
    
    $ ls
      snapshot.db
    
    # 스냅샷 상태 확인
    $ snapshot status snapshot.db
      +----------+----------+------------+------------+
      |   HASH   | REVISION | TOTAL KEYS | TOTAL SIZE |
      +----------+----------+------------+------------+
      |  e63bfc5 |   473353 |        875 |     4.1 MB |
      +----------+----------+------------+------------+
    

Backup 과정

  1. ETCD를 호스팅 할 마스터 노드에 SSH 접속한다.
    1
    
    $ ssh k8s-master
    
  2. etcdctl이 설치되어 있는지 확인한다
    1
    2
    3
    
    $ etcdctl version
      etcdctl version: 3.5.2
      API version: 3.5
    
  3. /var/lib/etcd에 대해 스냅샷 파일(//snapshot.db)을 생성한다.
    1
    2
    3
    
    $ ETCDCTL_API=3 etcdctl snapshot save snapshot.db
    $ ls
      snapshot.db
    
  4. kube-apiserver를 중단한다. (api server가 etcd를 사용하기 때문이다.)
    1
    
    $ service kube-apiserver stop
    
  5. 생선한 스냅샷 파일을 통해 복구한다. (새로운 데이터 디렉터리(/var/lib/etcd-from-backup)로 설정)
    1
    2
    3
    4
    
    $ ETCDCTL_API=3 etcdctl \
       snapshot restore snapshot.db \
       --data-dir /var/lib/etcd-from-backup
    
    
  6. 이후 etcd 서비스 데몬 리로드와 etcd를 재시작한다
    1
    2
    
    $ systemctl daemon-reload
    $ service etcd restart
    
  7. 마지막으로 kube api server를 시작한다.
    1
    
    $ service kube-apiserver start
    

참고 ETCDTL 명령어를 사용할 시 endpoint, cacert, cert, key 를 지정해야한다.

1
2
3
4
5
6
$ ETCDCTL_API=3 etcdctl \
  snapshot save snapshot.db \
  --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/etcd/ca.crt \
  --cert=/etc/etcd/etcd-server.crt \
  --key=/etc/etcd/etcd-server.key
This post is licensed under CC BY 4.0 by the author.