當在 Kubernetes 叢集中新增節點時,我最終遇到以下錯誤:
+ docker start kubelet
Error response from daemon: {"message":"No such container: kubelet"}
Error: failed to start containers: kubelet
+ sleep 2
此錯誤發生在已損壞的叢集上。 3個節點中只剩下1個。 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
-ed 到 rancher 容器中並破解叢集狀態(thx
@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 命令中新增 a 來為節點設定一個與之前不同的名稱
--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-2-入門。