Ao adicionar um novo nó a um cluster Kubernetes, acabo com este erro:
+ docker start kubelet
Error response from daemon: {"message":"No such container: kubelet"}
Error: failed to start containers: kubelet
+ sleep 2
Este erro ocorre em um cluster que já está danificado. Resta apenas um nó de 3. O nó permanece a priori um problema de recuperação e distribuição de certificados. SSL não funciona mais neste nó. Para obter informações, o cluster Kubernetes foi implantado por meio do Rancher. O contêiner etcd é reinicializado regularmente no nó 3 e o etcd não deseja implantar nos outros nós que estou tentando reintegrar ao cluster.
Kubelet é lançado em um contêiner Docker, lançado por Rancher quando ele criou o cluster Kubernetes. Em relação aos testes realizados, relancei um novo contêiner docker com etcd, tentei reiniciar a partir de um snapshot... nada permite reiniciar o cluster. Adicionar um novo nó também não é funcional. Pelo que vi, também há um problema com os certificados SSL criados pelo Rancher que ele não consegue encontrar
Responder1
Tente seguir os seguintes passos:
- Limpe o nó executando
docker system prune
docker volume prune
Isso excluirá todos os volumes do Docker. Tenha cuidado se você tiver
dados importantes em seus volumes.
- Limpe os dados de tempo de execução do Rancher/Kubernetes no nó.
rm -rf /etc/cni/ /etc/kubernetes/ /opt/cni/ /var/lib/calico/ /var/lib/cni/ /var/lib/rancher/ /var/run/calico/
Os documentos oficiais sobre limpeza de nós também recomendam a remoção de /opt/rke
e
/var/lib/etcd
. Você não pode removê-los porque eles contêm
instantâneos e dados do cluster etcd. Isto é especialmente importante caso haja apenas um nó
no cluster.
- Execute
exec
-ed no contêiner rancher e hackeie o status do cluster (obrigado
@ibrokethecloud para a dica):
docker exec -it rancher bash
Dentro do contêiner:
apt-get update && apt-get -y install vim
kubectl edit cluster c-XXXX # replace the cluster-id with an actual cluster ID
O editor encontrou a chave apiEndpoint
(deve estar diretamente abaixo
da status
chave) e a removeu. Saia do editor e do contêiner. Certifique-se
de que kubectl diga que atualizou o cluster.
- Na UI do Rancher obteve-se o comando para registrar um novo nó.
Defina um nome diferente para o nó do que era antes, adicionando um
--node-name
ao comando docker run (na verdade, há uma caixa de edição para isso
nas configurações avançadas). Parecia assim:
docker run -d --privileged --restart=unless-stopped --net=host \
-v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.2.6 \
--server https://rancher.example.com --token XXXXXXXXXXXXXXX --node-name mynode2 \
--etcd --controlplane --worker
- Execute o comando acima no nó limpo e, finalmente, ele foi registrado
com sucesso e o RKE iniciou todos os contêinereskube-*
e .kubelet
Dê uma olhada:fazendeiro-kubelet, rancher-2-primeiros passos.