external etcd를 backup하고, restore한다.
작업순서
1. busybox pod을 생성
2. etcd backup
3. pod delete
4. restore
1. busybox pod을 생성한다.
yaml file 작성
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- image: busybox
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
name: busybox
restartPolicy: Always
pod 생성
[root@km ~]# kubectl create -f busy.yaml
pod/busybox created
[root@km ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 0 7s
2. etcd backup 진행
tmp 디렉토리에 etcd-backup.db 파일이 생성된다.
ETCDCTL_API=3 etcdctl snapshot save /tmp/etcd-backup.db --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key --endpoints=172.30.1.146:2379
3.pod delete
busybox pod을 삭제한다.
[root@km ~]# kubectl delete po busybox
pod "busybox" deleted
4. restore
4.1 snapshot을 사용해 /var/lib/etcd-backup 경로에 푼다.
[root@etcd etcd]# ETCDCTL_API=3 etcdctl snapshot restore /tmp/etcd-backup.db --data-dir /var/lib/etcd-backup
2022-09-17 23:40:29.939520 I | mvcc: restore compact to 18798
2022-09-17 23:40:29.946602 I | etcdserver/membership: added member 8e9e05c52164694d [http://localhost:2380] to cluster cdf818194e3a8c32
4.2 etcd 중지
etcd가 중지되면 k8s cluster에서 pod, svc 등의 정보를 조회할 수 없게 된다.
kubectl get pod 명령을 수행하면 hang 상태
systemctl stop etcd
4.3 기존 data-dir 삭제
rm -rf /var/lib/etcd/*
4.4 backup data-dir의 내용을 data-dir로 복사
cp /var/lib/etcd-backup/* /var/lib/etcd/
4.5 etcd 시작
systemctl start etcd
5. 복구 확인
확인해보니 삭제한 pod이 복구되었다.
[root@km pods]# kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 0 3h59m
'kubenetes' 카테고리의 다른 글
k8s nifi-1.13.2 zookeeper-3.6.3 (1) | 2022.10.02 |
---|---|
kubeadm join 시 pending (0) | 2022.09.30 |
k8s external etcd 구성 (1) | 2022.09.17 |
etcd backup, restore (0) | 2022.09.15 |
docker 이미지 수정하는 방법 (1) | 2022.04.05 |
댓글