При добавлении нового узла в кластер 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
Попробуйте выполнить следующие шаги:
- Очистите узел, запустив
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
и данные. Это особенно важно в случае, если
в кластере только один узел.
- Запустил
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 сообщает, что он обновил кластер.
- Из пользовательского интерфейса 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
- Запустите указанную выше команду на очищенном узле, и, наконец, она
успешно зарегистрировалась, а RKE запустил всеkube-*
иkubelet
контейнеры.
Взглянем:фермер-кубелет, ранчер-2-начало-работы.