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 スナップショットとデータが含まれているため、削除できません。これは 、クラスター内に
ノードが 1 つしかない場合に特に重要です。
exec
rancherコンテナに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
- 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
コンテナが起動されました。
見てみましょう:ランチャー-kubelet、 rancher-2 入門。