Детектор проблем узлов (NPD) в узлах службы Azure Kubernetes (AKS)

Node Problem Detector (NPD) — это компонент с открытым исходным кодом для Kubernetes, который обнаруживает проблемы, связанные с узлами, и сообщает о них. Он работает как служба systemd на каждом узле в кластере и собирает различные метрики и системную информацию, такие как использование ЦП, использование диска и сетевое подключение. Когда обнаруживается проблема, создаются события и/или условия узла. Служба Azure Kubernetes (AKS) использует NPD для мониторинга и управления узлами в кластере Kubernetes, работающем на облачной платформе Azure. Расширение AKS для Linux включает NPD по умолчанию.

Примечание

Обновления NPD не зависят от образа узла и процедур обновления версий Kubernetes. Если пул узлов неработоспособен (то есть в состоянии сбоя), новые версии NPD не устанавливаются.

Условия узла

Условия узла указывают на постоянную проблему, которая делает узел недоступным. AKS использует следующие условия узлов, определяемые NPD, чтобы выявить постоянные проблемы на узле. NPD также генерирует соответствующие события Kubernetes.

Тип демона проблемы NodeCondition Причина Тип вычисления
CustomPluginMonitor Проблема повреждения файловой системы Обнаружено повреждение файловой системы Общее назначение
CustomPluginMonitor KubeletProblem KubeletIsDown Общее назначение
CustomPluginMonitor Проблема времени выполнения контейнера СбойContainerRuntime Общее назначение
CustomPluginMonitor Запланированное событие ВМ Запланированное событие ВМ Общее назначение
CustomPluginMonitor ЧастаяОтменаРегистрацииСетевогоУстройства Отменить регистрацию сетевого устройства Общее назначение
CustomPluginMonitor FrequentKubeletRestart FrequentKubeletRestart Общее назначение
CustomPluginMonitor ЧастаяПерезагрузкаContainerd ЧастаяПерезагрузкаContainerd Общее назначение
CustomPluginMonitor Частые перезапуски Docker Частые перезапуски Docker Общее назначение
CustomPluginMonitor GPUMissing Наблюдаемое количество GPU не соответствует ожидаемому количеству GPU Только GPU
CustomPluginMonitor Статус NVLink: Неактивен Статус NVLink: Неактивен Только GPU
CustomPluginMonitor XIDErrors Ошибки XID присутствуют в журнале ядра Только GPU
CustomPluginMonitor IBLinkFlapping Периодические подключения к устройству InfiniBand Только GPU
CustomPluginMonitor Снижение тактовой частоты GPU Обнаружена проблема с регулированием часов GPU Только GPU
CustomPluginMonitor НеработоспособныйNvidiaDevicePlugin Служба подключаемого модуля устройства NVIDIA не активна Только GPU (управляемый GPU)
Мониторинг системных логов KernelDeadlock DockerHung Общее назначение
Мониторинг системных логов ФайловаяСистемаТолькоДляЧтения Файловая система только для чтения Общее назначение

Примечание

Условия GPU only узла применяются ко всем пулам узлов GPU, использующие драйверы GPU, управляемые AKS (пулы узлов, с которыми не созданы --gpu-driver none). Условия GPU only (managed GPU) применяются только к пулам узлов с включенным полностью управляемым интерфейсом GPU . Мониторинг работоспособности GPU поддерживается на стандартах GPU и узлах GPU с поддержкой MIG.

События

NPD генерирует события с соответствующей информацией, чтобы помочь вам диагностировать основные проблемы.

Тип демона проблемы Причина Частота Описание Действие
CustomPluginMonitor Заблокирован выход 30 мин Это событие проверяет подключение к внешним конечным точкам Проверьте, блокирует ли брандмауэр или NSG подключение к конечной точке, помеченной
CustomPluginMonitor Обнаружено повреждение файловой системы 5 минут Эта проверка выявляет повреждение файловой системы, обнаруженное с помощью Docker.
CustomPluginMonitor KubeletIsDown 30 с Это проверяет, запущена ли служба kubelet и работает ли она работоспособно
CustomPluginMonitor СбойContainerRuntime 30 с Это событие проверяет, запускается и находится ли в исправном состоянии среда выполнения контейнера, например: containerd.
CustomPluginMonitor Запланированное замораживание 1мин Это событие проверяет, запланировано ли событие замораживания на узле. Проверьте https://aka.ms/aks/scheduledevents, чтобы получить больше информации.
CustomPluginMonitor Запланирована перезагрузка 1мин Это событие проверяет, запланировано ли событие перезагрузки на узле https://aka.ms/aks/scheduledevents . Дополнительные сведения
CustomPluginMonitor Запланированное Перемещение 1мин Это событие проверяет, запланировано ли событие повторного развертывания на узле. Проверьте https://aka.ms/aks/scheduledevents, чтобы получить больше информации.
CustomPluginMonitor ЗавершитьЗапланированное 1мин Это событие проверяет, запланировано ли завершающее событие на узле. Проверьте https://aka.ms/aks/scheduledevents, чтобы получить больше информации.
CustomPluginMonitor ПредварительноЗапланировано 2 сек. Это событие проверяет, запланировано ли событие "Preempt" на узле. Проверьте https://aka.ms/aks/scheduledevents, чтобы получить больше информации.
CustomPluginMonitor DNSProblem
Мониторинг системных логов OOMKilling
Мониторинг системных логов TaskHung
Мониторинг системных логов Отменить регистрацию сетевого устройства
Мониторинг системных логов KernelOops
Мониторинг системных логов Невозможно подключиться к Docker-сокету
Мониторинг системных логов KubeletRPCDeadlineExceeded (превышение предельного времени выполнения задания RPC в Kubelet)
Мониторинг системных логов KubeletRPCNoSuchContainer
Мониторинг системных логов CNICannotStatFS
Мониторинг системных логов PLEGUnhealthy
Мониторинг системных логов KubeletStart
Мониторинг системных логов DockerStart
Мониторинг системных логов ContainerdStart

В некоторых случаях AKS автоматически изолирует и освобождает узел, чтобы минимизировать перебои в работе нагрузок. Дополнительные сведения о событиях и действиях см. в разделе Автоматическое освобождение узла.

Заблокирован выход

Список конечных точек, проверенных egressBlocked, приведен ниже.

Примечание

Фактические конечные точки будут зависеть от типа кластера и расположения размещения (общедоступное облако и облака Airgapped). Ознакомьтесь с документацией по исходящему доступу. Документация предназначена для общедоступных облаков

Тип Пример Примечание
MCR https://mcr.microsoft.com
Майкрософт Ентра айди https://login.microsoftonline.com
Менеджер ресурсов https://management.azure.com
Пакеты https://packages.microsoft.com
Двоичный файл Kube https://acs-mirror.azureedge.net/acs-mirror/healthz
https://packages.aks.azure.com/acs-mirror/healthz

Проверьте условия и события узла

  • Проверьте условия и события узла с помощью команды kubectl describe node.

    kubectl describe node my-aks-node
    

    Ваш перевод должен выглядеть аналогично следующему примеру сжатого вывода.

    ...
    ...
    
    Conditions:
      Type                          Status  LastHeartbeatTime                 LastTransitionTime                Reason                          Message
      ----                          ------  -----------------                 ------------------                ------                          -------
      VMEventScheduled              False   Thu, 01 Jun 2023 19:14:25 +0000   Thu, 01 Jun 2023 03:57:41 +0000   NoVMEventScheduled              VM has no scheduled event
      FrequentContainerdRestart     False   Thu, 01 Jun 2023 19:14:25 +0000   Thu, 01 Jun 2023 03:57:41 +0000   NoFrequentContainerdRestart     containerd is functioning properly
      FrequentDockerRestart         False   Thu, 01 Jun 2023 19:14:25 +0000   Thu, 01 Jun 2023 03:57:41 +0000   NoFrequentDockerRestart         docker is functioning properly
      FilesystemCorruptionProblem   False   Thu, 01 Jun 2023 19:14:25 +0000   Thu, 01 Jun 2023 03:57:41 +0000   FilesystemIsOK                  Filesystem is healthy
      FrequentUnregisterNetDevice   False   Thu, 01 Jun 2023 19:14:25 +0000   Thu, 01 Jun 2023 03:57:41 +0000   NoFrequentUnregisterNetDevice   node is functioning properly
      ContainerRuntimeProblem       False   Thu, 01 Jun 2023 19:14:25 +0000   Thu, 01 Jun 2023 03:57:40 +0000   ContainerRuntimeIsUp            container runtime service is up
      KernelDeadlock                False   Thu, 01 Jun 2023 19:14:25 +0000   Thu, 01 Jun 2023 03:57:41 +0000   KernelHasNoDeadlock             kernel has no deadlock
      FrequentKubeletRestart        False   Thu, 01 Jun 2023 19:14:25 +0000   Thu, 01 Jun 2023 03:57:41 +0000   NoFrequentKubeletRestart        kubelet is functioning properly
      KubeletProblem                False   Thu, 01 Jun 2023 19:14:25 +0000   Thu, 01 Jun 2023 03:57:41 +0000   KubeletIsUp                     kubelet service is up
      ReadonlyFilesystem            False   Thu, 01 Jun 2023 19:14:25 +0000   Thu, 01 Jun 2023 03:57:41 +0000   FilesystemIsNotReadOnly         Filesystem is not read-only
      NetworkUnavailable            False   Thu, 01 Jun 2023 03:58:39 +0000   Thu, 01 Jun 2023 03:58:39 +0000   RouteCreated                    RouteController created a route
      MemoryPressure                True    Thu, 01 Jun 2023 19:16:50 +0000   Thu, 01 Jun 2023 19:16:50 +0000   KubeletHasInsufficientMemory    kubelet has insufficient memory available
      DiskPressure                  False   Thu, 01 Jun 2023 19:16:50 +0000   Thu, 01 Jun 2023 03:57:22 +0000   KubeletHasNoDiskPressure        kubelet has no disk pressure
      PIDPressure                   False   Thu, 01 Jun 2023 19:16:50 +0000   Thu, 01 Jun 2023 03:57:22 +0000   KubeletHasSufficientPID         kubelet has sufficient PID available
      Ready                         True    Thu, 01 Jun 2023 19:16:50 +0000   Thu, 01 Jun 2023 03:57:23 +0000   KubeletReady                    kubelet is posting ready status. AppArmor enabled
    ...
    ...
    ...
    Events:
      Type    Reason                   Age                  From     Message
      ----    ------                   ----                 ----     -------
      Normal  NodeHasSufficientMemory  94s (x176 over 15h)  kubelet  Node aks-agentpool-40622340-vmss000009 status is now: NodeHasSufficientMemory
    

Эти события также доступны в Container Insights через KubeEvents.

Метрики

NPD также показывает метрики Prometheus на основе проблем узла, которые можно использовать для мониторинга и оповещений. Эти метрики доступны на порту 20257 IP-адреса узла, и Prometheus может их собирать.

Пример YAML, приведённый ниже, показывает конфигурацию сбора данных, которую можно использовать с дополнением Azure Managed Prometheus как DaemonSet:

kind: ConfigMap
apiVersion: v1
metadata:
  name: ama-metrics-prometheus-config-node
  namespace: kube-system
data:
  prometheus-config: |-
    global:
      scrape_interval: 1m
    scrape_configs:
    - job_name: node-problem-detector
      scrape_interval: 1m
      scheme: http
      metrics_path: /metrics
      relabel_configs:
      - source_labels: [__metrics_path__]
        regex: (.*)
        target_label: metrics_path
      - source_labels: [__address__]
        replacement: '$NODE_NAME'
        target_label: instance
      static_configs:
      - targets: ['$NODE_IP:20257']

Пример ниже показывает извлеченные метрики:

problem_gauge{reason="UnregisterNetDevice",type="FrequentUnregisterNetDevice"} 0
problem_gauge{reason="VMEventScheduled",type="VMEventScheduled"} 0

Следующие шаги

Для получения дополнительной информации о NPD см. kubernetes/node-problem-detector.