따배씨 / ETCD Backup & Restore
Introduction
etcd백업과 restore에 대해서 포스팅함
Summary
export samp="--dry-run=client -o yaml"
export grep="grep -iC 3"
export now="--force --grace-period 0"
$samp, $grep, $now붙은건 이 명령어로 약어만든거니까 주의
# config명령어로 현재 작업 시스템을 먼저 알아야 한다.
kubectl config current-context
난 저거 하나 뜬다.
음 저게 클러스터? 종류인것 같은데 CKA에선 안나오겠지만 만약 여러개가 있으면 해당 클러스터로 이동해서 작업해야한다.
# use-context와 ssh의 차이
kode kloud의 Practice Test - Backup and Restore Methods2에서는 이 환경이 구성되어있는데
kubectl config get-contexts
get context를 치면 cluster1과 cluster2가 있다.
여기는 클러스터 2개가 존재한다는것임. 클러스터와 컨텍스트 차이는 사용자정보를 포함하냐 마냐인데.. 그것까진 일단 스킵하고,
이렇게 use context를 바꿔서 pod를 만들면 서로 다른 클러스터라 리소스 확인이 중복이 안된다
다만 ssh 차이도 중요하다
이렇게 아무 파일 dog.txt파일을 만들어줬는데,
여기서 클러스터를 바꾸면
여전히 해당 dog.txt파일은 남아있다.
클러스터를 바꿔도 VM자체가 바뀌는건 아니라는 소리임.
ssh로 작업해보려면 이렇게 확인하면 된다.
먼저 원하는 컨텍스트로 바꾸고
node이름을 알아낸다. 우리는 cluster1의 master node로 접속해볼거라서 저기 cluster1-controlplane이라는 노드로 가볼거다
그다음 ssh node이름 이렇게 하면 해당 노드로 ssh접속이된다.
당연히 ls를 쳐봐도 아까 dog.txt파일은 없어졌다.
CKA에서 이렇게까지 나올까싶지만 혹시모르니 알아두자.
# 백업하기전에~
현재 내 클러스터에는 아무 리소스가 없어서 테스트용 간단한 pod를 만들어보았다.
muzzi라는 pod를 만들거임
# 백업해보기
Operating etcd clusters for Kubernetes
etcd is a consistent and highly-available key value store used as Kubernetes' backing store for all cluster data. If your Kubernetes cluster uses etcd as its backing store, make sure you have a back up plan for the data. You can find in-depth information a
kubernetes.io
공식문서에 etcd 스냅샷 뜨는 코드를 가져와보면
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>
이렇다.
etcd pod는 kube-system ns에서 돌아가고있다.
저기 etcd-master pod가 있는걸 볼 수 있음
저 코드에 채울건 저 etcd pod를 describe하면 다 나와있다. 자세한건 귀찮아서
Practice Test / Backup and Restore Methods
Summary버전확인은 etcd pod의 describe나 logs로 확인etcd cluster ip는 listen-client-urls으로 grep하면됨kubectl -n 네임스페이스 이런식으로 치고 get pod 머시기 하면 자동완성 됨backup은 6번restore은 8번restore에서
jacobowl.tistory.com
요 포스팅 보면 6번문제에 나와있음.
암튼 채워보면
ETCDCTL_API=3 etcdctl --endpoints=https://211.183.3.10:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save /home/user/k8s/snap1.db
이 명령어로 딸거임
잘만들어져서 현재폴터에 snap1.db라고 파일이 잘 만들어졌다.
아 참고로 현재 위치는
저 경로이다.
그럼 이제 백업을 잘 한건다.
# restore하기
공식문서에 보면
export ETCDCTL_API=3
etcdctl --data-dir /var/lib/etcd-backup snapshot restore /home/user/k8s/snap1.db
restore코드가 잘 나와있는데 restore뒤에는 위에서 백업딴 스냅샷 db파일 경로를 적어주면 되고
etcd pod가 볼륨마운트 할 경로를 --data-dir쪽에 적어주면 된다. 이 경로는 아무거나 정해줘도 된다.
저 코드를 치기전에는 /var/lib에 etcd-backup이라는 디렉토리가 없는데
명령어를 치고나서는 생긴다.
저 etcd-backup 폴더는 저런식으로 생겼음.
참고로 tree커맨드 안먹히면 깔아서 하샘
그리고 etcd pod는 static pod로 동작하고 있다.
static pod yaml파일은 /etc/kubernetes/manifest/etcd.yaml에 있다.(하도 자주 만져서 아예 외움 ㅡㅡ)
저 만든 etcd-backup디렉토리를 이 pod랑 마운트 해줘야한다.
제일 아랫쪽에 hostPath 타입인 etcd-data볼륨의 path를 바꿔줘야한다.
우리는 /var/lib/etcd-backup이라는 폴더로 스냅샷딴 정보를 넣어놨으므로 저 커서있는 부분을 /var/lib/etcd-backup으로 바꾸면 된다.
내가 실수했던 부분은
컨테이너쪽의 mountPath를 바꿔줬음 ㅠㅠ
또
컨테이너 만들고 쳐줄 커맨드 data-dir을 바꿔줬었음..
둘다 오류생겨서 큐블렛 새로 하고 오류찾고 난리났었다 ㅡㅡ
암튼 제대로 하고 yaml 파일을 저장해주자.
static pod yaml파일을 수정했으므로 etcd pod가 새로 생성될거다.
terminating상태는 안잡히더라
암튼 etcd pod가 새로 생성되고 있다.
이거 생각보다 오래걸림.
# 검토
docker ps -a |grep etcd
이거하고 up 상태 두개뜨면된다고함.. 근데 하도 에러만나서 잘된건지..
# 참고로 가끔 etcd pod가 pending상태에서 너무 오래 걸리거나 아예 시작도안되고 이상할떄가 있는데
잘은 모르곘고 pod describe로 이벤트 확인하고
컨테이너 이미 있는거 확인하고 (docker ps 명령어)
큐블렛 재시작하고 이런것들 하다보니 어쩌다 고쳐지고 그러긴 하더라..
# 컨테이너 이름 중복됐을때
이미 해당 컨테이너 이름이 사용되고 있다는거임.
존재하는 컨테이너를 삭제해줘야함.
어떤 컨테이너가 k8s_etcd_etcd-master이름을 쓰고있냐 라고 docker ps -a 로 검색함.
첫번째 컬럼인 f71머시기가 아이디임
해당 컨테이너를 수동으로 삭제해줌.
etcd pod도 삭제해주면 static pod니까 다시 만들어줄거임
etcd pod가 running으로 돌아왔다..
뭐 이런거까지 오류가 생기겠나 싶긴 한데..
# staticPodPath문제
/var/lib/kubelet/config.yaml 이 파일에서 staticPodPath 키값을 넣어줬더니 다시 되긴했음..