Optional: Broken ETCD Cluster
CP 노드에 연결된 터미널로 이동
ETCD 클러스터 상태 확인
kubectl -n kube-system exec -it etcd-cp -- \ etcdctl -w table \ --endpoints $ETCD_ENDPOINTS \ --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/server.crt \ --key /etc/kubernetes/pki/etcd/server.key \ endpoint health
ETCD 클러스터의 리더 확인
kubectl -n kube-system exec -it etcd-cp -- \ etcdctl -w table \ --endpoints $ETCD_ENDPOINTS \ --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/server.crt \ --key /etc/kubernetes/pki/etcd/server.key \ endpoint status
SecondCP, ThidCP 노드에 연결된 터미널로 이동해서 ETCD Pod를 삭제
sudo mv /etc/kubernetes/manifests/etcd.yaml /root/
웹 브라우저를 열고 HAPROXY_IP_ADDRESS:9999/stats 주소로 접속해서 API 서버들의 연결 상태 확인
CP 노드에 연결된 터미널로 이동
Pod 목록 확인 - API 서버가 동작 하는지 확인
kubectl get pod -A
kube-apiserver 로그 확인
crictl logs $(crictl ps --name kube-apiserver -aq)
ETCD Pod의 Manifest
/etc/kubernetes/manifests/etcd.yaml
를 텍스트 에디터로 열고 실행 옵션에 --force-new-cluster 추가... spec: containers: - command: - etcd - --advertise-client-urls=https://xxx.xxx.xxx.xxx:2379 .... .... - --force-new-cluster
ETCD 컨테이너가 재성성되었는지 확인
sudo crictl ps --name=etcd -a
ETCD 컨테이너 로그 확인
sudo crictl logs $(sudo crictl ps --name=etcd -q)
CP 노드의 사설 IP 확인
ip addr show ens5 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1
SecondCP, ThidCP 노드에 연결된 터미널로 이동
kube-apiserver Pod의 Manifest
/etc/kubernetes/manifests/kube-apiserver.yaml
를 텍스트 에디터로 열고 --etcd-servers 옵션의 값을 수정- --etcd-servers=https://CP_PRIVATE_IP_ADDRESS:2379
웹 브라우저를 열고 HAPROXY_IP_ADDRESS:9999/stats 주소로 접속해서 API 서버들의 연결 상태 확인
CP 노드에 연결된 터미널로 이동
Pod 목록 확인 - API 서버가 동작 하는지 확인
{ kubectl get pod -A kubectl get node }
ETCD Pod 상태 확인
kubectl get pod -n kube-system -l component=etcd
ETCD 클러스터의 멤버 목록 확인
kubectl -n kube-system exec -it etcd-cp -- \ etcdctl -w table \ --endpoints localhost:2379 \ --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/server.crt \ --key /etc/kubernetes/pki/etcd/server.key \ member list
SecondCP에서 실행할 ETCD를 클러스터에 추가
kubectl -n kube-system exec -it etcd-cp -- \ etcdctl \ --endpoints localhost:2379 \ --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/server.crt \ --key /etc/kubernetes/pki/etcd/server.key \ member add secondcp \ --peer-urls=https://$(kubectl get node secondcp -ojsonpath='{.status.addresses[0].address}'):2380
SecondCP 노드에 연결된 터미널로 이동
ETCD 데이터 삭제
rm -rf /var/lib/etcd/*
ETCD Pod를 생성
sudo mv /root/etcd.yaml /etc/kubernetes/manifests/etcd.yaml
CP 노드에 연결된 터미널로 이동
ETCD 클러스터의 멤버 목록 확인
kubectl -n kube-system exec -it etcd-cp -- \ etcdctl -w table \ --endpoints localhost:2379 \ --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/server.crt \ --key /etc/kubernetes/pki/etcd/server.key \ member list
ThirdCP에서 실행할 ETCD를 클러스터에 추가
kubectl -n kube-system exec -it etcd-cp -- \ etcdctl \ --endpoints localhost:2379 \ --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/server.crt \ --key /etc/kubernetes/pki/etcd/server.key \ member add secondcp \ --peer-urls=https://$(kubectl get node thirdcp -ojsonpath='{.status.addresses[0].address}'):2380
ThirdCP 노드에 연결된 터미널로 이동
ETCD 데이터 삭제
rm -rf /var/lib/etcd/*
ETCD Pod를 생성
sudo mv /root/etcd.yaml /etc/kubernetes/manifests/etcd.yaml
CP 노드에 연결된 터미널로 이동
ETCD 클러스터의 멤버 목록 확인
kubectl -n kube-system exec -it etcd-cp -- \ etcdctl -w table \ --endpoints localhost:2379 \ --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/server.crt \ --key /etc/kubernetes/pki/etcd/server.key \ member list
ETCD 클러스터 멤버 목록을 환경변수로 지정
{ export ETCD_ENDPOINTS=$(kubectl -n kube-system exec -it etcd-cp -- \ etcdctl -w json \ --endpoints localhost:2379 \ --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/server.crt \ --key /etc/kubernetes/pki/etcd/server.key \ member list \ | jq -r '.members | map(.clientURLs[]) | join(",")') echo $ETCD_ENDPOINTS }
ETCD 클러스터의 리더 확인
kubectl -n kube-system exec -it etcd-cp -- \ etcdctl -w table \ --endpoints $ETCD_ENDPOINTS \ --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/server.crt \ --key /etc/kubernetes/pki/etcd/server.key \ endpoint status
ETCD 클러스터의 각 멤버별 상태 확인
kubectl -n kube-system exec -it etcd-cp -- \ etcdctl -w table \ --endpoints $ETCD_ENDPOINTS \ --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/server.crt \ --key /etc/kubernetes/pki/etcd/server.key \ endpoint health
SecondCP, ThidCP 노드에 연결된 터미널로 이동
kube-apiserver Pod의 Manifest
/etc/kubernetes/manifests/kube-apiserver.yaml
를 텍스트 에디터로 열고 --etcd-servers 옵션의 값을 수정- --etcd-servers=https://127.0.0.1:2379
CP 노드에 연결된 터미널로 이동
ETCD Pod의 Manifest
/etc/kubernetes/manifests/etcd.yaml
를 텍스트 에디터로 열고 실행 옵션에 --force-new-cluster 삭제... spec: containers: - command: - etcd - --advertise-client-urls=https://xxx.xxx.xxx.xxx:2379 .... .... - --force-new-cluster <- 해당 라인 삭제
Pod 목록 확인 - API 서버가 동작 하는지 확인
{ kubectl get pod -A kubectl get node }
Last updated