Траблшутинг узлов
На этой странице
Обзор
На этой странице — типичные проблемы с узлами и поведение кластера при отказе узла.
Поведение при отказе или недоступности узла
Кластер начинает перераспределять нагрузку с нерабочего узла через 30–60 секунд. Это связано с настройками kube-controller-manager и kubelet.
Как Kubernetes определяет нерабочий узел
- Kubelet отправляет статус API-серверу с интервалом
--node-status-update-frequency(по умолчанию 10 сек). - Controller manager проверяет статус каждые
--node-monitor-period(по умолчанию 5 сек). - Если Kubelet не отвечает в течение
--node-monitor-grace-period(по умолчанию 40 сек), узел помечается как NotReady.
Итого: от момента отказа до NotReady — около 45–50 секунд. До этого поды на узле продолжают получать трафик, возможны ошибки при обращении к ним.
Ускорение реакции (опционально)
Можно уменьшить nodeStatusUpdateFrequency, node-monitor-period, node-monitor-grace-period в конфигурации kubelet и kube-controller-manager.
Обратите внимание! Внимание: слишком малые значения увеличивают риск ложных срабатываний (например, при высокой загрузке или кратковременной сетевой недоступности). Это может привести к ненужному перераспределению нагрузки.
Типичные проблемы
Узел в статусе NotReady
Причины: Kubelet не отвечает, сеть недоступна, нехватка ресурсов (память, диск).
Действия:
- Проверьте Node Conditions на странице узла или спомощью команды:
kubectl describe node <name>
- Проверьте логи kubelet на узле (если есть доступ).
- Проверьте Cilium/CNI: условие
NetworkUnavailableчасто связано с CNI. - При необходимости — удалите узел с пересозданием или добавьте taint
node.kubernetes.io/out-of-service=NoExecuteдля срочного вытеснения подов.
Узел в статусе Unknown
Причины: API-сервер не получает heartbeat от Kubelet (сеть, узел выключен).
Действия: аналогично NotReady. Проверьте сетевую связность, состояние узла в инфраструктуре.
Поды не планируются на узел
Возможные причины:
- Узел в Cordon (Scheduling: Disabled).
- Taints на узле — подам нужны соответствующие Tolerations.
- Недостаточно ресурсов (CPU, память).
- nodeSelector или nodeAffinity пода не совпадают с узлом.
Действия: на странице узла посмотрите вкладку События; проверьте kubectl describe node <name>, kubectl describe pod <name> (события).
Drain зависает
Причины: поды DaemonSet, PDB блокирует вытеснение, поды с local storage.
Действия:
- Включите «Игнорировать DaemonSets» в настройках Drain.
- Проверьте PodDisruptionBudget:
kubectl get pdb -A. - Для подов с local storage может потребоваться принудительный Drain (осторожно с данными).
NCI не применяется на узел
Причины: неверный селектор узлов, ошибка в конфигурации NCI, узел не перезагружен (если требуется).
Проверьте наличие и статус NodeConfig на вкладке «Конфигурация узла» страницы узла.
Селекторы, приоритеты и примеры разделов NCI — на странице Конфигурация узлов (NCI).
Действия:
- Проверьте лейблы узла на вкладке «Лейблы и аннотации» страницы узла страницы узла или с помощью команды:
kubectl get node <name> --show-labels
- Проверьте логи сервиса shturval-node-config в том кластере, где находятся узлы (в клиентском кластере): он установлен в каждом кластере и применяет NCI к узлам этого кластера. Первичную подготовку узлов (распределение ресурсов NCI по узлам) выполняет сервис shturval-cluster-manager в кластере управления; дальнейшее применение конфигурации на узлах выполняется этим сервисом в соответствующем кластере.
Изменения не применяются
Если действия Cordon/Drain, изменение параметров шаблона или другие изменения не применяются, проверьте статус реконсиляции инфраструктуры в кластере. Когда реконсиляция приостановлена, изменения планируются, но не применяются.
Масштабирование не происходит
Проверьте доступность провайдера инфраструктуры. Если вы используете провайдер shturvalv2, проверьте наличие свободных хостов с лейблами, указанными в группе узлов, в выбранном экземпляре провайдера.
MachineHealthCheck не восстанавливает узел
Причины: количество нездоровых узлов превышает maxUnhealthy.
Действия: проверьте настройки MHC, при необходимости увеличьте maxUnhealthy или уменьшите количество нездоровых узлов (восстановите часть вручную).
Справочник
- Конфигурация узлов (NCI) — объекты NodeConfigItem, разделы конфигурации, работа в GUI и через kubectl.
- Объект NCI (NodeConfigItem) — структура шаблона NCI.
- Модуль shturval-node-config — оператор, демон
std, типичные ошибки применения NCI. - Node Conditions — расшифровка состояний узла.
- Cluster API — Machine, MachineDeployment, KubeadmConfig, InfraMachine, жизненный цикл.
- InfraMachineTemplate — параметры шаблонов по провайдерам.