본문 바로가기

Cloud/Kubernetes

[Kubernetes-etcd] etcdctl 설치 및 사용

읽기에 앞서 호스트명 확인 하세요.

 

etcdctl 다운로드 및 설정 하기

 

---

ETCD_VER=v3.4.12

# choose either URL

GOOGLE_URL=https://storage.googleapis.com/etcd

GITHUB_URL=https://github.com/etcd-io/etcd/releases/download

DOWNLOAD_URL=${GOOGLE_URL}

rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz

rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test

curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz

tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1

rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz

--- 

 

vi etcd.sh로 해당 내용 복사 붙여넣기 후, sh etcd.sh로 실행하면 됨.

 

혹은 tar 파일만 저장하고, 따로 설정을 해주고 싶은 경우. 

 

---

ETCD_VER=v3.4.12

# choose either URL

GOOGLE_URL=https://storage.googleapis.com/etcd

GITHUB_URL=https://github.com/etcd-io/etcd/releases/download

DOWNLOAD_URL=${GOOGLE_URL}

rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz

rm -rf /tmp/etcd-download-test 

curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz

--- 

 

---

mkdir -p /tmp/etcd-download-test

tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1

rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz

---

 

따로 스크립트 만들어서 실행해주면 됨.

 

이 후, 

# vi ~/.bashrc

 

아래 내용 추가

---

alias etcdctl="export ETCDCTL_API=3; /tmp/etcd-download-test/etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key --endpoints=127.0.0.1:2379"

---

적용

source ~/.bashrc

 

# etcdctl version

[root@test-2 ~]# etcdctl version
etcdctl version: 3.4.12
API version: 3.4

 

테스트를 위해 etcd에서 CrashLoopBackOff 상태를 만들어 줌.

# systemctl stop kubelet && systemctl stop docker

# rm -rf /var/lib/etcd/member/snap/

# rm -rf /var/lib/etcd/member/wal/

# systemctl restart docker && systemctl restart kubelet

 

 

etcd가 동작을 안하니, 자연스럽게 api-server도 문제가 발생함. 

 

 

etcd member 조회

# etcdctl --write-out=table member list

[root@test-2 ~]# etcdctl --write-out=table member list

+------------------+---------+--------+----------------------------+----------------------------+------------+

|        ID        | STATUS  |  NAME  |         PEER ADDRS         |        CLIENT ADDRS        | IS LEARNER |

+------------------+---------+--------+----------------------------+----------------------------+------------+

| 70e2268f082b4628 | started | test-2 | https://192.168.85.14:2380 | https://192.168.85.14:2379 |      false |

| 7578680c0a984b7b | started | test-3 | https://192.168.85.15:2380 | https://192.168.85.15:2379 |      false |

| f6be366b95916aaf | started | test-1 | https://192.168.85.13:2380 | https://192.168.85.13:2379 |      false |

+------------------+---------+--------+----------------------------+----------------------------+------------+

장애가 발생을 하더라도 member를 조회를 하더라도, started 상태를 유지 하고 있음.

최신 정보로 업데이트를 해주려면 해당 멤버를 삭제 해야 함. 

 

[root@test-2 ~]# etcdctl member remove 7578680c0a984b7b  ## 멤버 조회시 문제가 있는 ID 

Member 7578680c0a984b7b removed from cluster db5d45d17d68db70

 

[root@test-2 ~]# etcdctl --write-out=table member list

+------------------+---------+--------+----------------------------+----------------------------+------------+

|        ID        | STATUS  |  NAME  |         PEER ADDRS         |        CLIENT ADDRS        | IS LEARNER |

+------------------+---------+--------+----------------------------+----------------------------+------------+

| 70e2268f082b4628 | started | test-2 | https://192.168.85.14:2380 | https://192.168.85.14:2379 |      false |

| f6be366b95916aaf | started | test-1 | https://192.168.85.13:2380 | https://192.168.85.13:2379 |      false |

+------------------+---------+--------+----------------------------+----------------------------+------------+

 

삭제가 된 것을 확인 할 수 있음. 

이 후, 다시 멤버로 추가 함.

 

etcd member 추가

# etcdctl member add {etcd_name} --peer-urls=https://{master_IP}:2380   

>> etcd_name에 추가할 호스트명을 기입하지 않도록 주의 

호스트명 넣었다가 클러스터 나가서 고생좀 함.

 

[root@test-2 ~]# etcdctl member add etcd3 --peer-urls=https://192.168.85.15:2380

Member  14787f76acd8309 added to cluster db5d45d17d68db70

ETCD_NAME="etcd3"

ETCD_INITIAL_CLUSTER="etcd3=https://192.168.85.15:2380,test-2=https://192.168.85.14:2380,test-1=https://192.168.85.13:2380"

ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.8515:2380"

ETCD_INITIAL_CLUSTER_STATE="existing"

 

 

[root@test-2 ~]# etcdctl --write-out=table member list

+------------------+-----------+--------+----------------------------+----------------------------+------------+

|        ID        |  STATUS   |  NAME  |         PEER ADDRS         |        CLIENT ADDRS        | IS LEARNER |

+------------------+-----------+--------+----------------------------+----------------------------+------------+

|  14787f76acd8309 | unstarted |        | https://192.168.85.15:2380 |                            |      false |

| 70e2268f082b4628 |   started | test-2 | https://192.168.85.14:2380 | https://192.168.85.14:2379 |      false |

| f6be366b95916aaf |   started | test-1 | https://192.168.85.13:2380 | https://192.168.85.13:2379 |      false |

+------------------+-----------+--------+----------------------------+----------------------------+------------+

 

[root@test-3 ~]# rm -rf /var/lib/etcd/

[root@test-3 ~]# reboot

[root@test-3 ~]# etcdctl member list --write-out=table

+------------------+---------+--------+----------------------------+----------------------------+------------+

|        ID        | STATUS  |  NAME  |         PEER ADDRS         |        CLIENT ADDRS        | IS LEARNER |

+------------------+---------+--------+----------------------------+----------------------------+------------+

| 70e2268f082b4628 | started | test-2 | https://192.168.85.14:2380 | https://192.168.85.14:2379 |      false |

| a19f08aebf17bd42 | started | test-3 | https://192.168.85.15:2380 | https://192.168.85.15:2379 |      false |

| f6be366b95916aaf | started | test-1 | https://192.168.85.13:2380 | https://192.168.85.13:2379 |      false |

+------------------+---------+--------+----------------------------+----------------------------+------------+

 

멤버 조회 시 정상적으로 기동 된 것을 확인 할 수 있음.

이 때, /vat/lib/etcd의 member데이터도 정상적으로 파일이 생겼는지 확인 가능 db 파일 확인

 

 

 

 

 

-------번외1 (member list에서 CLIENT ADDRS 다른 경우)

멤버를 조회 할때 클라이언트 주소가 VIP로 설정된 경우가 있음.

원인은 모르겠는데 추측헌데, 장애로 vip가 다른 노드로 옮겨 가서 재기동이 된 것이 큼

이때, /etc/kubernetes/manifests/etcd.yaml에서 ip 변경하면 etcd pod가 재기동 되면서 클라이언트 주소가 변경됨

 

------ 번외2 (member list에서 PEER ADDRS 다른 경우)

이 경우에도 원인은 모르겠으나, 호스트 IP로 설정되야 하는데 vip로 설정이 된 경우가 있음.

혹은 인터페이스가 많아서 k8s에서 제대로 못찾거나

이때, etcdctl member update {member_ID} --peer-urls=https://{master_IP}:2380 로 변경하면 됨.