HA 구성 external etcd 백업, 복원

Sbae·2024년 8월 28일
post-thumbnail

현재 k8s 자동 프로비저닝 툴을 개발 중입니다.

HA 구성의 external etcd를 백업하고 복원하고 싶어요!!

서버정보

Etcd 데이터 경로 : /data/etcd

  • temp-node-1
    • 10.50.1.65
  • temp-node-2
    • 10.50.1.241
  • temp-node-3
    • 10.50.1.61

테스트 순서

백업, 복원으로 나뉨.
테스트 전 해당 변수들을 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-backupfile
  • 하단 배포 테스트용 yaml 파일
apiVersion: 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 노드에서 정지시킨 후 복원을 시작해야한다.
  • restore는 각 노드의 설정에 맞게 바꿔서 실행한다.
    • 각 종 옵션들은 설정에 맞춰서 안넣어도 지장없음
# 실행 중인 멀티 노드의 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
profile
끄적이는 일반인

0개의 댓글