[CKA] ETCD backup & restore

hope·2023년 11월 16일

CKA

목록 보기
8/8
post-thumbnail

Backup

etcd pod의 listen-client-urls, trusted-ca-file, cert-file, key-file 확인할 것

k describe -n kube-system po etcd-controlplane
Containers:
  etcd:
    Container ID:  containerd://db4f66b4b8a19d0e4af8b0ced5934160f65f3305807615f2167a9d7deb562176
    Image:         registry.k8s.io/etcd:3.5.7-0
    Image ID:      registry.k8s.io/etcd@sha256:51eae8381dcb1078289fa7b4f3df2630cdc18d09fb56f8e56b41c40e191d6c83
    Port:          <none>
    Host Port:     <none>
    Command:
      etcd
      --cert-file=/etc/kubernetes/pki/etcd/server.crt
      --data-dir=/var/lib/etcd
      --key-file=/etc/kubernetes/pki/etcd/server.key
      --listen-client-urls=https://127.0.0.1:2379,https://192.5.77.9:2379
      --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt

스냅샷 생성 명령어

ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
  --cacert=<trusted-ca-file> --cert=<cert-file> --key=<key-file> \
  snapshot save <backup-file-location>

/opt/ 디렉토리에 snapshot-pre-boot.db 이름의 스냅샷 생성

ETCDCTL_API=3 etcdctl --endpoints https://127.0.0.1:2379 \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
snapshot save /opt/snapshot-pre-boot.db

Restore

복원 프로세스

  1. etcdctl snapshot Restore 명령을 사용하여 스냅샷에서 etcd를 새 디렉터리로 복원
  2. 디렉터리가 복원되면 복원된 디렉터리를 사용하도록 ETCD 구성 업데이트

1. 새 디렉토리로 스냅샷 복원

/opt/snapshot-pre-boot.db 스냅샷을 /var/lib/etcd-from-backup 디렉토리로 복원

sudo ETCDCTL_API=3 etcdctl  --data-dir /var/lib/etcd-from-backup \
snapshot restore /opt/snapshot-pre-boot.db

tree 설치

apt-get update
apt-get install tree

복원한 파일 확인

tree /var/lib/etcd-from-backup/
/var/lib/etcd-from-backup/
└── member
    ├── snap
    │   ├── 0000000000000001-0000000000000001.snap
    │   └── db
    └── wal
        └── 0000000000000000-0000000000000000.wal

3 directories, 3 files

2. /etc/kubernetes/manifest/etcd.yaml 파일 업데이트

  • 이전 디렉토리(/var/lib/etcd)의 데이터를 새 디렉토리(/var/lib/etcd-from-backup)로 복사하는 작업 필요
  • etcd 파드는 /etc/kubernetes/manifest 디렉토리에 배치된 정적 pod이기 때문에 자동으로 다시 생성되어 업데이트 됨
  • /etc/kubernetes/manifest/etcd.yaml 파일 volumes hostPath를 새로운 디렉토리로 변경
  volumes:
  - hostPath:
      path: /var/lib/etcd-from-backup
      type: DirectoryOrCreate
    name: etcd-data
  • etcd.yaml 파일이 변경되면 자동으로 pod가 재시작되고 kube-controller-manager와 kube-scheduler도 다시 시작됨(1-2분 정도 소요)
  • etcd pod가 복원된 데이터를 사용하는지 확인

(옵션) 추가로 복원을 확인해 볼 수 있는 방법

/etc/kubernetes/manifest/etcd.yaml 파일에서 --data-dir을 /var/lib/etcd-from-backup으로 변경하면 etcd-data의 VolumeMounts가 업데이트되어 mountPath가 변경되었는지 확인

Containers:
  etcd:
    Image:      registry.k8s.io/etcd:3.5.7-0
    Port:       <none>
    Host Port:  <none>
    Command:
      etcd
      ...
      --data-dir=/var/lib/etcd-from-backup
...
k describe -n kube-system po etcd-controlplane
profile
devops 엔지니어

0개의 댓글