來自守護程式的錯誤回應:{“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個節點中只剩下1個。 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-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 表示它已更新叢集。

  1. 從 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

  1. 在清理後的節點上執行上述命令,最終註冊
    成功,RKE啟動了所有 kube-* 容器 kubelet

看一看:牧場主人庫貝萊特, rancher-2-入門

相關內容