デーモンからのエラー応答: {“message”:“No such container: kubelet”}

デーモンからのエラー応答: {“message”:“No such container: 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 つしかない場合に特に重要です。

  1. execrancherコンテナにrunを実行してクラスタのステータスをハックしました(ありがとう
    翻訳者 ヒント:
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 の直下にあるはずです )、削除しました。エディターとコンテナを終了します。kubectl がクラスターを更新したと言っていることを確認します。
status

  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 コンテナが起動されました。

見てみましょう:ランチャー-kubeletrancher-2 入門

関連情報