현재 k8s 자동 프로비저닝 툴을 개발 중입니다.
HA 구성의 external etcd를 백업하고 복원하고 싶어요!!
Etcd 데이터 경로 :
/data/etcd
백업, 복원으로 나뉨.
테스트 전 해당 변수들을 export 해주면 훨씬 수월하다.
export ETCDCTL_API=3
export ETCDCTL_CACERT=/etc/kubernetes/pki/etcd/ca.crt
export ETCDCTL_CERT=/etc/kubernetes/pki/etcd/peer.crt
export ETCDCTL_KEY=/etc/kubernetes/pki/etcd/peer.key
etcdctl get /registry/deployments/default/nginx --prefix --keys-only --endpoints=https://10.50.1.65:2379를 사용해서 배포한 pod가 정상적으로 etcd에 등록이 되었는지 확인sudo etcdctl --endpoints=https://10.50.1.65:2379 snapshot save etcd-backupfileapiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
name: nginx
spec:
selector:
app: nginx
type: NodePort
ports:
- name: nginx
port: 80
targetPort: 80
sudo systemctl stop etcd은 필수적으로 모든 etcd 노드에서 정지시킨 후 복원을 시작해야한다.# 실행 중인 멀티 노드의 etcd를 전부 정지한다.(데이터 충돌 방지)
# 안하면 복원이 안되는 문제 발생
sudo systemctl stop etcd
rm -rf /data/etcd
# 각 노드에서 맞춰서 실행
sudo ETCDCTL_API=3 etcdctl snapshot restore nginx-dnsutils-backupfile \
--data-dir /data/etcd \
--name temp-node-1 \
--initial-cluster temp-node-1=https://10.50.1.65:2380,temp-node-2=https://10.50.1.241:2380,temp-node-3=https://10.50.1.61:2380 \
--initial-cluster-token etcd-k8-cluster \
--initial-advertise-peer-urls https://10.50.1.65:2380
chmod 755 /data/etcd
sudo chown -R etcd:etcd /data/etcd
sudo systemctl start etcd