etcd 클러스트 재난 복구 및 마이그레이션 가이드

etcd 클러스트가 故障이 발생하면,成员单位 정보가 일치하지 않아 클러스트가异常하게 된다. 이때는 member 수가 일치하지 않습니다라는 오류 메시지를 받을 수 있다. 이 문제를 해결하기 위해 etcd 데이터 디렉터리의 백업 파일을 사용해 새로운 클러스트를 初始化하는 방법을 설명한다.

1. 데이터 디렉터리 백업

kubeadm을 통해 설치된 경우 기본 데이터 디렉터리는 /var/lib/etcd에 있다. 이 디렉터리를 백업한다.

cp -r /var/lib/etcd/member /var/lib/member-bak

2. etcd 서비스 중지

  • kubeadm 설치 환경:
mv /etc/kubernetes/manifests/etcd.yaml /etc/kubernetes/
  • Binay 설치 환경:
systemctl stop etcd

3. etcd 서비스 확인

  • kubeadm 설치 환경:
docker ps -a | grep etcd

4. 새로운 etcd 노드 생성

단일 노드 etcd 설정

  • kubeadm 설치 환경에서 etcd.yaml 파일을 수정한다:
spec:
  containers:
  - command:
    - etcd
    - --advertise-client-urls=https://192.168.11.135:2379
    - --cert-file=/etc/kubernetes/pki/etcd/server.crt
    - --client-cert-auth=true
    - --data-dir=/var/lib/etcd
    - --initial-advertise-peer-urls=https://192.168.11.135:2380
    - --initial-cluster=master-01=https://192.168.11.135:2380
    - --key-file=/etc/kubernetes/pki/etcd/server.key
    - --listen-client-urls=https://127.0.0.1:2379,https://192.168.11.135:2379
    - --listen-metrics-urls=http://127.0.0.1:2381
    - --listen-peer-urls=https://192.168.11.135:2380
    - --name=master-01
    - --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
    - --peer-client-cert-auth=true
    - --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
    - --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
    - --snapshot-count=10000
    - --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
    - --initial-cluster-state=new
    - --force-new-cluster
  • 수정된 파일을.manifests 디렉터리로 이동:
cp /etc/kubernetes/etcd.yaml /etc/kubernetes/manifests/

5. etcd 멤버 업데이트

  • etcdctl를 통해 멤버 정보를 확인:
./etcdctl \
--cacert ./ca.crt \
--cert ./server.crt \
--key ./server.key \
--endpoints https://192.168.11.135:2379 \
member list

--peer-urls를 업데이트:

./etcdctl \
--cacert ./ca.crt \
--cert ./server.crt \
--key ./server.key \
--endpoints https://192.168.11.135:2379 \
member update cde66358cffbaacf --peer-urls=https://192.168.11.135:2380

6. 다른 멤버 추가

  • 새 멤버를 추가하기 위해 etcd.yaml 파일을 수정:
spec:
  containers:
  - command:
    - etcd
    - --advertise-client-urls=https://192.168.11.133:2379
    - --cert-file=/etc/kubernetes/pki/etcd/server.crt
    - --client-cert-auth=true
    - --data-dir=/var/lib/etcd
    - --initial-advertise-peer-urls=https://192.168.11.133:2380
    - --initial-cluster=master-02=https://192.168.11.133:2380,master-01=https://192.168.11.135:2380
    - --initial-cluster-state=existing
    - --key-file=/etc/kubernetes/pki/etcd/server.key
    - --listen-client-urls=https://127.0.0.1:2379,https://192.168.11.133:2379
    - --listen-metrics-urls=http://127.0.0.1:2381
    - --listen-peer-urls=https://192.168.11.133:2380
    - --name=master-02
    - --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
    - --peer-client-cert-auth=true
    - --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
    - --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
    - --snapshot-count=10000
    - --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
  • 멤버를 추가:
./etcdctl \
--cacert ./ca.crt \
--cert ./server.crt \
--key ./server.key \
--endpoints https://192.168.11.135:2379 \
member add master-02 --peer-urls=https://192.168.11.133:2380

7. 최종 확인

etcd 멤버 목록을 통해 모든 멤버가 정상적으로 동작 중인지 확인:

./etcdctl \
--cacert ./ca.crt \
--cert ./server.crt \
--key ./server.key \
--endpoints https://192.168.11.135:2379 \
member list

태그: etcd kubernetes disaster-recovery cluster-migration

5월 31일 18:42에 게시됨