Eu tenho uma configuração de clusters Kubernetes com kubeadm, 3 nós mestres. Um dia, um dos nós mestres precisa ser desativado (migração de infraestrutura), então excluí esse nó mestre executando 'kubectl delete node ***'. Até alguns dias atrás, instalei uma nova VM e tentei uni-la de volta ao cluster como mestre, mas falhou ao verificar o estado de integridade do etcd.
[check-etcd] Checking that the etcd cluster is healthy
error execution phase check-etcd: error syncing endpoints with etc: dial tcp 10.233.42.22:2379: connect: no route to host
Então vou verificar os logs do pod etcd restante, parece que ele começa a relatar que o etcd não está funcionando desde que o nó mestre foi excluído.
rafthttp: health check for peer 55ab807fd1dc1d4 could not connect: dial tcp 10.233.42.22:2380: i/o timeout
kubectl logs etcd-ne1-prd-lnxstgivt01.ubisoft.org -n kube-system | grep 'could not connect: dial tcp 10.233.42.22:2380: i/o timeout' | awk '{ print $1 }' | uniq
2019-08-12
2019-08-13
2019-08-14
2019-08-15
2019-08-16
2019-08-17
2019-08-18
2019-08-19
2019-08-20
2019-08-21
2019-08-22
Você pode ver acima que o erro é relatado continuamente por dias. Acho que isso pode ser porque o etcd ainda se lembra do nó que já foi excluído. Nesse caso, gostaria de excluir permanentemente esse nó também no etcd para evitar o estado não saudável.
Não tenho certeza se você já se deparou com esse problema e conseguiu uma solução.
Obrigado.
Responder1
Finalmente descobri uma resolução.
Primeiro, você precisa se conectar a qualquer pod do etcd para remover o nó mestre excluído que ainda permanece no cluster do etcd e garantir que o cluster esteja finalmente íntegro.
**List current nodes to get failed node id**
/ # etcdctl --endpoint=https://10.0.1.31:2379 --ca-file=/etc/kubernetes/pki/etcd/ca.crt --cert-file=/etc/kubernetes/pki/etcd/peer.crt --key-file=/etc/kubernetes/pki/etcd/peer.key member list
55ab807fd1dc1d4: name=ae1-prd-lnxstgivt01.ubisoft.org peerURLs=https://10.233.42.22:2380 clientURLs=https://10.233.42.22:2379 isLeader=false
3da60ac5e6f29b0e: name=pdc-prd-lnxstginvt01.ubisoft.org peerURLs=https://10.0.1.31:2380 clientURLs=https://10.0.1.31:2379 isLeader=false
d13a6c20fbb32f2d: name=ne1-prd-lnxstgivt01.ubisoft.org peerURLs=https://10.136.66.170:2380 clientURLs=https://10.136.66.170:2379 isLeader=true
**Remove the dead one**
/ # etcdctl --endpoint=https://10.0.1.31:2379 --ca-file=/etc/kubernetes/pki/etcd/ca.crt --cert-file=/etc/kubernetes/pki/etcd/peer.crt --key-file=/etc/kubernetes/pki/etcd/peer.key member remove 55ab807fd1dc1d4
Removed member 55ab807fd1dc1d4 from cluster
**Verify it is removed**
/ # etcdctl --endpoint=https://10.0.1.31:2379 --ca-file=/etc/kubernetes/pki/etcd/ca.crt --cert-file=/etc/kubernetes/pki/etcd/peer.crt --key-file=/etc/kubernetes/pki/etcd/peer.key member list
3da60ac5e6f29b0e: name=pdc-prd-lnxstginvt01.ubisoft.org peerURLs=https://10.0.1.31:2380 clientURLs=https://10.0.1.31:2379 isLeader=false
d13a6c20fbb32f2d: name=ne1-prd-lnxstgivt01.ubisoft.org peerURLs=https://10.136.66.170:2380 clientURLs=https://10.136.66.170:2379 isLeader=true
Em segundo lugar, há um configmap chamado kubeadm-config no namespace kube-public, que ainda lembra o nó mestre excluído como um dos pontos finais da API. Isso bloqueará a adesão a um novo nó mestre no estágio de verificação do estado de integridade do cluster etcd, porque o kubeadm lerá esse configmap e considerará o excluído como um nó etcd a ser verificado. Portanto, exporte esse namespace para o arquivo yaml, edite o arquivo e aplique-o novamente para excluí-lo da lista de pontos finais da API.
kubectl get configmap kubeadm-config -n kube-system -o yaml
apiVersion: v1
data:
…
ClusterStatus: |
apiEndpoints:
ae1-prd-lnxstgivt01.ubisoft.org:
advertiseAddress: 10.233.42.22
bindPort: 6443
ne1-prd-lnxstgivt01.ubisoft.org:
advertiseAddress: 10.136.66.170
bindPort: 6443
pdc-prd-lnxstginvt01.ubisoft.org:
advertiseAddress: 10.0.1.31
bindPort: 6443
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterStatus
kind: ConfigMap
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: …
Versão testada: 1.14.3