Траблшутинг узлов

Обзор

На этой странице — типичные проблемы с узлами и поведение кластера при отказе узла.


Поведение при отказе или недоступности узла

Кластер начинает перераспределять нагрузку с нерабочего узла через 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 не отвечает, сеть недоступна, нехватка ресурсов (память, диск).

Действия:

  1. Проверьте Node Conditions на странице узла или спомощью команды:
kubectl describe node <name>
  1. Проверьте логи kubelet на узле (если есть доступ).
  2. Проверьте Cilium/CNI: условие NetworkUnavailable часто связано с CNI.
  3. При необходимости — удалите узел с пересозданием или добавьте 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).

Действия:

  1. Проверьте лейблы узла на вкладке «Лейблы и аннотации» страницы узла страницы узла или с помощью команды:
kubectl get node <name> --show-labels
  1. Проверьте логи сервиса shturval-node-config в том кластере, где находятся узлы (в клиентском кластере): он установлен в каждом кластере и применяет NCI к узлам этого кластера. Первичную подготовку узлов (распределение ресурсов NCI по узлам) выполняет сервис shturval-cluster-manager в кластере управления; дальнейшее применение конфигурации на узлах выполняется этим сервисом в соответствующем кластере.

Изменения не применяются

Если действия Cordon/Drain, изменение параметров шаблона или другие изменения не применяются, проверьте статус реконсиляции инфраструктуры в кластере. Когда реконсиляция приостановлена, изменения планируются, но не применяются.

Масштабирование не происходит

Проверьте доступность провайдера инфраструктуры. Если вы используете провайдер shturvalv2, проверьте наличие свободных хостов с лейблами, указанными в группе узлов, в выбранном экземпляре провайдера.

MachineHealthCheck не восстанавливает узел

Причины: количество нездоровых узлов превышает maxUnhealthy.

Действия: проверьте настройки MHC, при необходимости увеличьте maxUnhealthy или уменьшите количество нездоровых узлов (восстановите часть вручную).


Справочник