티스토리 뷰

ETCD Backup&Restore

  • ETCD를 호스팅 할 시스템에 ssh 로그인
  • ETCD 툴의 설치 여부 확인
  • ETCD 백업
  • snapshot 파일을 이용해 복원했을 때 원래대로 복원되는지 확인하기 위해 현재 ETCD 상태를 수정
  • ETCD 복원
  • ETCD Pod에 복원된 etcd-data 위치를 적용하고 Pod 다시 시작

 

Solution

  • ETCD를 호스팅 할 시스템에 ssh 로그인
$ kubectl config current-context 
k8s
$ ssh k8s-master 
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-60-generic x86_64)
  • ETCD 툴의 설치 여부 확인
$ etcdctl version
etcdctl version: 3.5.7
API version: 3.5
# trusted-ca-file 검색
# trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
$ ps -ef | grep kube | grep trusted-ca-file
... --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt

# cert-file 검색
# cert-file=/etc/kubernetes/pki/etcd/server.crt
$ ps -ef | grep kube | grep cert-file
... --cert-file=/etc/kubernetes/pki/etcd/server.crt ...

# key-file 검색
# key-file=/etc/kubernetes/pki/etcd/server.key
$ ps -ef | grep kube | grep key-file
... --key-file=/etc/kubernetes/pki/etcd/server.key ...

# Snapshot using etcdctl options
$ sudo ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  snapshot save /tmp/etcd-backup
# 스냅샷 파일 안에 쿠버네티스 상태 정보 저장된다. (pods, deployments ...)
{"level":"info","ts":"2023-07-10T14:12:12.082+0900","caller":"snapshot/v3_snapshot.go:65","msg":"created temporary db file","path":"/tmp/etcd-backup.part"}
{"level":"info","ts":"2023-07-10T14:12:12.101+0900","logger":"client","caller":"v3@v3.5.7/maintenance.go:212","msg":"opened snapshot stream; downloading"}
{"level":"info","ts":"2023-07-10T14:12:12.101+0900","caller":"snapshot/v3_snapshot.go:73","msg":"fetching snapshot","endpoint":"https://127.0.0.1:2379"}
{"level":"info","ts":"2023-07-10T14:12:12.267+0900","logger":"client","caller":"v3@v3.5.7/maintenance.go:220","msg":"completed snapshot read; closing"}
{"level":"info","ts":"2023-07-10T14:12:12.283+0900","caller":"snapshot/v3_snapshot.go:88","msg":"fetched snapshot","endpoint":"https://127.0.0.1:2379","size":"11 MB","took":"now"}
{"level":"info","ts":"2023-07-10T14:12:12.284+0900","caller":"snapshot/v3_snapshot.go:97","msg":"saved","path":"/tmp/etcd-backup"}
Snapshot saved at /tmp/etcd-backup
  • snapshot 파일을 이용해 복원했을 때 원래대로 복원되는지 확인하기 위해 현재 ETCD 상태를 수정 
#deployments를 삭제하여 상태를 변경
$ kubectl get deployments.apps
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
front-end   2/2     2            2           130d
webui       3/3     3            3           130d
$ kubectl delete deployments.apps front-end
deployment.apps "front-end" deleted
$ kubectl get deployments.apps
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
webui   3/3     3            3           130d
# 기존에 운영중인 공간(/var/lib/etcd)에는 이미 etcd가 작동하고 있기 때문에 
# 새로운 공간(/var/lib/etcd-new)에 restore 해줘야 한다.
$ sudo ETCDCTL_API=3 \
    etcdctl snapshot restore \
    --data-dir /var/lib/etcd-new /tmp/etcd-backup
    
# 데이터 저장소 확인
$ sudo ls /var/lib/etcd
member
$ sudo tree /var/lib/etcd
/var/lib/etcd
└── member
    ├── snap
    │   ├── 0000000000000008-0000000000033466.snap
    │   ├── 0000000000000008-0000000000035b77.snap
    │   ├── 0000000000000008-0000000000038288.snap
    │   ├── 0000000000000008-000000000003a999.snap
    │   ├── 0000000000000008-000000000003d0aa.snap
    │   └── db
    └── wal
        ├── 0.tmp
        ├── 0000000000000000-0000000000000000.wal
        ├── 0000000000000001-00000000000136d4.wal
        ├── 0000000000000002-0000000000027946.wal
        └── 0000000000000003-000000000003db25.wal

3 directories, 11 files
  • ETCD Pod에 복원된 etcd-data 위치를 적용하고 Pod 다시 시작
# etcd pod의 data 저장소를 /var/lib/etcd-new로 변경해서 다시실행
$ sudo vi /etc/kubernetes/manifests/etcd.yaml 

# 대문자 G를 입력하여 yaml파일 맨 뒤로 이동
# path를 etcd에서 etcd-new로 변경 후 저장(:wq)하면, 
# static pod는 kublet이라는 데몬이 자동으로 restart해준다.

# etcd.yaml
...
  volumes:
  - hostPath:
      path: /etc/kubernetes/pki/etcd
      type: DirectoryOrCreate
    name: etcd-certs
  - hostPath:
      path: /var/lib/etcd-new
      type: DirectoryOrCreate
    name: etcd-data
status: {}

# 복원 확인
$ kubectl get deployments
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
front-end   2/2     2            2           130d
webui       3/3     3            3           130d

 

'junior > Kubernetes' 카테고리의 다른 글

[k8s] kubernetes Upgrade-master  (0) 2023.07.10
[k8s] ETCD Backup&Restore(2)  (0) 2023.07.10
[k8s] CKA 커리큘럼  (0) 2023.07.10
[k8s] 실습 환경 확인  (0) 2023.07.10
[k8s] 커맨드 자동완성 기능  (0) 2023.07.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함