向 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
尝试执行以下步骤:
- 通过运行来清理节点
docker system prune
docker volume prune
这将删除所有 Docker 卷,如果卷中有重要数据,请小心。
- 清理节点上的 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快照和数据。如果 集群中
只有一个节点,这一点尤其重要。
- 运行
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 表示它已更新集群。
- 从 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
- 在清理后的节点上运行上述命令,最终注册
成功,RKE启动了所有的kube-*
和kubelet
容器。
看一看:rancher-kubelet, rancher-2-入门。