콤퓨우터/필기: KodeKloud CKA 강의

131. Backup and Restore

파란화면 2024. 5. 17. 00:29
반응형

무엇을 백업할 것인가

  • 방법 1: YAML object configuration file을 백업
  • 방법 2: ETCD를 통째로 백업

두 방법 모두 마운트해 준 Persistant Volume은 따로 백업해주어야 할 것이다

YAML Object Configuration File 백업

  • YAML 설정 디렉토리째로 백업하면 되지 않나요?
    • 이 경우 SCM (Git같은)에 소스코드와 함께 보관하는 것도 좋다

문제점: Declarative Approach가 권장되는 방법이기는 하지만, 팀에서 누군가가 Imperative하게 Object를 생성/수정해 놓고서 문서화도 안하고 튀었을 수도 있다.

해결책: kube-apiserver에 쿼리하여 현재 사용 중인 리소스 설정을 전부 YAML 형태로 내보내기한다.

  • kubectl get all --all-namespaces -o yaml > backup.yaml
    • 하지만 일부 리소스 그룹은 이것으로 백업이 되지 않는다고 한다
    • Velero와 같은 백업전용도구를 사용하는 것도 검토할 수 있음

ETCD 백업

일부 Managed Kubernetes 환경에서는 etcd 클러스터에 접근이 아예 불가능할 수도 있다. 그런 케이스에서는 이런 방법은 사용할 수 없을 것이다

ETCD 데이터 디렉토리째로 백업

etcd는 마스터노드에 위치한다. 만약 etcd의 systemd service 파일이 다음과 같다면,

ExecStart=/usr/local/bin/etcd
 --data-dir=/var/lib/etcd

그냥 /var/lib/etcd를 통째로 복사하면 아무튼 백업이 되는 것이다.

ETCD의 스냅샷 기능을 사용

  • 스냅샷 박제: ETDCTL_API=3 etcdctl snapshot save backup.db
  • 스냅샷 확인: ETCDTL_API=3 etcdctl snapshot status backup.db

스냅샷 복원

  1. kube-apiserver를 정지한다

    • kube-apiserver가 의존하는 etcd 클러스터를 재시작해야 하기 때문)
      service kube-apiserver stop
  2. Snapshot Restore 명령어로 복구한다
    (--data-dir 파라미터로 복원 데이터디렉토리를 지정해야 한다)
    ETDCTL_API=3 etcdctl snapshot restore backup.db --data-dir /var/lib/etcd-restored

  3. 이러면 새로운 클러스터 설정으로 복원이 된다
    When etcd restores from a backup, it initializes a new cluster configuration and configures the members of etcd as new members to a new cluster. This is to prevent a new member from accidentally joining an existing cluster.

  4. ETCD Configuration 파일 (쿠버를 구성한 방법에 따라 Pod definition file 또는 systemd service 파일이 될 수 있음)의 --data-dir= 파라미터를 수정한다

Pod Definition File:

  volumes:
  - hostPath:
      path: /etc/kubernetes/pki/etcd # 이 부분이 아님
      type: DirectoryOrCreate
    name: etcd-certs
  - hostPath:
      path: /var/lib/etcd-new # 이 부분!
      type: DirectoryOrCreate
    name: etcd-data

Systemd service file:

[Service]
User=etcd
Type=notify
ExecStart=/usr/local/bin/etcd \
  --name etcd-server \
  --data-dir=/var/lib/etcd-data-new \

systemd service file을 사용할 경우 디렉토리 권한에 주의할 것

주의 사항: 실제로는 etcdctl의 각 명령어에 --endpoints=https://127.0.0.1:2379 --cacert=/etc/etcd/ca.crt --cert=/etc/etcd/etcd-server.crt --key=/etc/etcd/etcd-server.key 같이 etcd 엔드포인트, 인증서 등의 옵션을 명시하여야한다

ETCD member 체크하기

ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/etcd/pki/ca.pem --cert=/etc/etcd/pki/etcd.pem --key=/etc/etcd/pki/etcd-key.pem member list
882326955ca7477d, started, etcd-server, https://192.8.185.12:2380, https://192.8.185.12:2379, false
반응형