Назад | Перейти на главную страницу

Ответ от демона об ошибке: {«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. Что касается проведенных тестов, я перезапустил новый контейнер докеров с помощью etcd, я попытался снова запустить из снапшота ... ничего не позволяет перезапустить кластер. Добавление нового узла также не работает. Из того, что я видел, также существует проблема с сертификатами ssl, созданными Rancher, которые он не может найти.

Попробуйте проделать следующие шаги:

  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-внесли в контейнер владельца ранчо и взломали статус кластера (спасибо
    @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 -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-начало работы.