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