Вопрос или проблема
У нас есть локальный кластер 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", указывает на проблемы с инициализацией служб, необходимых для запуска пода. Эти проблемы могут возникать из-за сетевых неисправностей, несовместимости версий или конфигурационных ошибок.
Возможные причины проблемы
-
Версии Kubernetes: Разница в версиях Kubernetes на разных узлах может вызывать несовместимость. В вашем случае это явная разница между версиями на сервах (v1.28.5+k3s1 и v1.31.4+k3s1), что может стать камнем преткновения. Подобная несогласованность версий может привести к проблемам совместимости API и ролей.
-
Сетевые настройки и доступность сервисов: Ошибка может быть результатом того, что новый узел не может подключиться к сервисам, запущенным на контрольном узле. Это может включать ошибки в конфигурации сети, например, в межсетевых экранах, или несовпадение IP-адресов в конфигурации.
-
Проблемы с конфигурацией компонентов Kubernetes: Проблемы могут возникать из-за отсутствия синхронизации конфигураций, особенно если узлы используют разные конфигурационные параметры.
Применение
-
Согласование версий: Как предложено в вашем описании, попробуйте установить на новом узле ту же версию 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 -
-
Проверка сетевых соединений: Убедитесь, что между узлами кластера нет сетевых ограничений. Проверьте брандмауэр, а также маршруты между узлами. Удостоверьтесь в возможности пинга контроллера со стороны нового узла и используйте такие инструменты, как
telnet
илиnc
, чтобы проверить доступность порта 6443. -
Проверка инициализации служб: Убедитесь, что все службы k3s корректно работают. Проверьте логи kubelet, возможно, они содержат ошибки, указывающие на более глубокие проблемы с инициализацией.
-
Синхронизация времени: Хотя эта причина менее вероятна, убедитесь, что часовые пояса и синхронизация времени одинаковы на всем оборудовании, чтобы избежать ошибок, связанных с несогласованностью времени.
Заключение
Чтобы устранить ошибку CreateContainerConfigError
, первым делом попробуйте устранить несовпадения версий. Если это не решит проблему, проверьте сетевые настройки и убедитесь в корректной работе всех необходимых служб. Обращайте внимание на логи, они могут подсказать, какой компонент нуждается в доработке. Если после всех этих шагов проблема остается нерешенной, возможно, стоит рассмотреть обращение за помощью к специалистам по Kubernetes или техническую поддержку.
Вышеописанные действия помогают устранить большинство проблем с добавлением нового узла в кластер Kubernetes и с запуском подов. Надеюсь, это руководство поможет вам успешно интегрировать новый узел и восстановить работоспособность вашего кластера.