Новый узел в кластере k3s не может запустить под.

Вопрос или проблема

У нас есть локальный кластер k3s для нашего промежуточного окружения, чтобы воспроизвести нечто похожее на наше производственное окружение. Сегодня наш единственный узел достиг своего предела, поэтому мы решили добавить новый узел.

Я купил новый физический сервер и установил Ubuntu Server 24.04.1 LTS.
Следующим шагом была установка агента k3s для его подключения к существующему кластеру.
Я следовал онлайн-документации:

curl -sfL https://get.k3s.io | K3S_URL=https://192.168.1.1:6443 K3S_TOKEN=<my master token> sh -

Затем я проверил, что всё готово, с помощью kubectl get nodes:

NAME    STATUS   ROLES                  AGE    VERSION
serv1   Ready    control-plane,master   382d   v1.28.5+k3s1
serv2   Ready    <none>                 117s   v1.31.4+k3s1

Но когда первый pod был назначен этому новому узлу, он получил статус CreateContainerConfigError.
Описывая pod с помощью kubectl describe pod, я вижу эту ошибку:

Warning  Failed     12s (x2 over 13s)  kubelet            Error: services have not yet been read at least once, cannot construct envvars

Я нашёл несколько вещей в интернете об этой ошибке. Похоже, что есть проблема между нашими двумя серверами и по какой-то причине они не могут правильно общаться. Но так как новый узел отмечен как Ready, я не понимаю, где проблема…

Я также нашёл тот же самый случай здесь, но, похоже, никакого реального решения не предложено.

Кто-нибудь имеет идеи о причине этой проблемы?

попробуйте установить те же версии

curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=”v1.28.5+k3s1″ K3S_URL=https://192.168.1.1:6443 K3S_TOKEN=${K3S_TOKEN} sh –

Ответ или решение

Как ИТ-специалист, рассмотрим проблему, с которой вы столкнулись при добавлении нового узла в кластер k3s, и разберемся с ошибкой CreateContainerConfigError, появляющейся при назначении пода. Прежде чем углубляться в детали, приведем краткое объяснение причин возникновения подобной проблемы.

Теория

Основой правильного функционирования кластеров Kubernetes является корректная настройка сетевого взаимодействия и согласованность версий. Ошибка CreateContainerConfigError, связанная с сообщением "services have not yet been read at least once, cannot construct envvars", указывает на проблемы с инициализацией служб, необходимых для запуска пода. Эти проблемы могут возникать из-за сетевых неисправностей, несовместимости версий или конфигурационных ошибок.

Возможные причины проблемы

  1. Версии Kubernetes: Разница в версиях Kubernetes на разных узлах может вызывать несовместимость. В вашем случае это явная разница между версиями на сервах (v1.28.5+k3s1 и v1.31.4+k3s1), что может стать камнем преткновения. Подобная несогласованность версий может привести к проблемам совместимости API и ролей.

  2. Сетевые настройки и доступность сервисов: Ошибка может быть результатом того, что новый узел не может подключиться к сервисам, запущенным на контрольном узле. Это может включать ошибки в конфигурации сети, например, в межсетевых экранах, или несовпадение IP-адресов в конфигурации.

  3. Проблемы с конфигурацией компонентов Kubernetes: Проблемы могут возникать из-за отсутствия синхронизации конфигураций, особенно если узлы используют разные конфигурационные параметры.

Применение

  1. Согласование версий: Как предложено в вашем описании, попробуйте установить на новом узле ту же версию k3s, которая уже используется на существующем контроллере. Это уменьшит риск несоответствий API. Выполните команду:

    curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION="v1.28.5+k3s1" K3S_URL=https://192.168.1.1:6443 K3S_TOKEN=${K3S_TOKEN} sh -
  2. Проверка сетевых соединений: Убедитесь, что между узлами кластера нет сетевых ограничений. Проверьте брандмауэр, а также маршруты между узлами. Удостоверьтесь в возможности пинга контроллера со стороны нового узла и используйте такие инструменты, как telnet или nc, чтобы проверить доступность порта 6443.

  3. Проверка инициализации служб: Убедитесь, что все службы k3s корректно работают. Проверьте логи kubelet, возможно, они содержат ошибки, указывающие на более глубокие проблемы с инициализацией.

  4. Синхронизация времени: Хотя эта причина менее вероятна, убедитесь, что часовые пояса и синхронизация времени одинаковы на всем оборудовании, чтобы избежать ошибок, связанных с несогласованностью времени.

Заключение

Чтобы устранить ошибку CreateContainerConfigError, первым делом попробуйте устранить несовпадения версий. Если это не решит проблему, проверьте сетевые настройки и убедитесь в корректной работе всех необходимых служб. Обращайте внимание на логи, они могут подсказать, какой компонент нуждается в доработке. Если после всех этих шагов проблема остается нерешенной, возможно, стоит рассмотреть обращение за помощью к специалистам по Kubernetes или техническую поддержку.

Вышеописанные действия помогают устранить большинство проблем с добавлением нового узла в кластер Kubernetes и с запуском подов. Надеюсь, это руководство поможет вам успешно интегрировать новый узел и восстановить работоспособность вашего кластера.

Оцените материал
Добавить комментарий

Капча загружается...