守护进程的错误响应:{“message”:“没有这样的容器:kubelet”}

守护进程的错误响应:{“message”:“没有这样的容器:kubelet”}

向 Kubernetes 集群添加新节点时出现此错误:

+ docker start kubelet
Error response from daemon: {"message":"No such container: kubelet"}
Error: failed to start containers: kubelet
+ sleep 2

此错误发生在已损坏的集群上。3 个节点中只剩下一个节点。剩余节点先验地存在证书恢复和分发问题。SSL 在此节点上不再起作用。供参考,Kubernetes 集群已通过 Rancher 部署。etcd 容器在节点 3 上定期重新启动,并且 etcd 不想部署到我试图重新集成到集群的其他节点。

Kubelet 在 Docker 容器中启动,而 Rancher 在创建 Kubernetes 集群时也启动了该容器。在进行的测试中,我重新启动了带有 etcd 的新 docker 容器,并尝试从快照重新启动……但没有任何方法可以重新启动集群。添加新节点也不起作用。据我所知,Rancher 创建的 SSL 证书也存在问题,他无法找到该证书

答案1

尝试执行以下步骤:

  1. 通过运行来清理节点
docker system prune
docker volume prune


这将删除所有 Docker 卷,如果卷中有重要数据,请小心。

  1. 清理节点上的 Rancher/Kubernetes 运行时数据。
rm -rf /etc/cni/ /etc/kubernetes/ /opt/cni/ /var/lib/calico/ /var/lib/cni/ /var/lib/rancher/ /var/run/calico/

节点清理的官方文档还建议删除 /opt/rke
/var/lib/etcd。您无法删除它们,因为它们包含集群 etcd快照和数据。如果 集群中
只有一个节点,这一点尤其重要。

  1. 运行exec到 rancher 容器中并破解集群状态(谢谢
    @ibrokethecloud 提示):
docker exec -it rancher bash

容器内部:

apt-get update && apt-get -y install vim
kubectl edit cluster c-XXXX  # replace the cluster-id with an actual cluster ID

编辑器找到该键 apiEndpoint (它应该直接位于键下
status 并将其删除。退出编辑器和容器。确保
kubectl 表示它已更新集群。

  1. 从 Rancher UI 中获取注册新节点的命令。
    通过在 docker run 命令中添加一个,为节点设置一个与之前不同的名称(实际上 在高级设置下
    --node-name 有一个编辑框)。它看起来像这样:
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

  1. 在清理后的节点上运行上述命令,最终注册
    成功,RKE启动了所有的 kube-*kubelet 容器。

看一看:rancher-kubeletrancher-2-入门

相关内容