Ошибка ответа от демона: {“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 узлов остался только один. Узел, оставшийся априори с проблемой восстановления и распространения сертификатов. SSL больше не функционирует на этом узле. Для информации, кластер Kubernetes был развернут через Rancher. Контейнер etcd регулярно перезагружается на узле 3, и etcd не хочет развертываться на других узлах, которые я пытаюсь повторно интегрировать в кластер.

Kubelet запущен в контейнере Docker, который сам был запущен Rancher, когда он создал кластер Kubernetes. Что касается проведенных тестов, я перезапустил новый контейнер Docker с etcd, я попытался снова начать с моментального снимка... ничто не позволяет перезапустить кластер. Добавление нового узла также не работает. Из того, что я видел, также есть проблема с сертификатами ssl, созданными Rancher, которые он не может найти

решение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-в контейнер 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 сообщает, что он обновил кластер.

  1. Из пользовательского интерфейса Rancher получил команду для регистрации нового узла.
    Задайте другое имя для узла, чем было раньше, добавив
    --node-name к команде docker run (на самом деле для этого есть поле редактирования
    в дополнительных настройках). Выглядело это так:
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 контейнеры.

Взглянем:фермер-кубелет, ранчер-2-начало-работы.

Связанный контент