Детектор проблем узлов (NPD) в узлах Служба Azure Kubernetes (AKS)
Детектор проблем узлов (NPD) — это компонент открытый код Kubernetes, который обнаруживает проблемы, связанные с узлом, и сообщает о них. Он работает в качестве системного сервиса на каждом узле в кластере, собирая различные метрики и сведения о системе, например информацию о потреблении ресурсов ЦП, использовании дисков и сетевом подключении. При обнаружении проблемы он создает события и /или условия узла. Служба Azure Kubernetes (AKS) использует NPD для отслеживания узлов и управления ими в кластере Kubernetes, работающем на облачной платформе Azure. Расширение AKS для Linux включает NPD по умолчанию.
Примечание.
Обновления до NPD не зависят от образа узла и процессов обновления версий Kubernetes. Если узелпул неработоспособен (т. е. в состоянии сбоя), новые версии NPD не будут установлены.
Условия узла
Условия узла указывают на постоянную проблему, которая делает узел недоступным. AKS использует следующие условия узла из NPD для предоставления постоянных проблем на узле. NPD также выдает соответствующие события Kubernetes.
Тип управляющей программы проблемы | NodeCondition | Причина |
---|---|---|
CustomPluginMonitor | FilesystemCorruptionProblem | FilesystemCorruptionDetected |
CustomPluginMonitor | KubeletProblem | KubeletIsDown |
CustomPluginMonitor | ContainerRuntimeProblem | ContainerRuntimeIsDown |
CustomPluginMonitor | VMEventScheduled | VMEventScheduled |
CustomPluginMonitor | FrequentUnregisterNetDevice | Отмена регистрацииNetDevice |
CustomPluginMonitor | FrequentKubeletRestart | FrequentKubeletRestart |
CustomPluginMonitor | FrequentContainerdRestart | FrequentContainerdRestart |
CustomPluginMonitor | Частое руководство по DockerRestart | Частое руководство по DockerRestart |
SystemLogMonitor | KernelDeadlock | DockerHung |
SystemLogMonitor | ReadonlyFilesystem | FilesystemIsReadOnly |
События
NPD выдает события с соответствующими сведениями, чтобы помочь вам диагностировать базовые проблемы.
Тип управляющей программы проблемы | Причина |
---|---|
CustomPluginMonitor | Исходящий трафик |
CustomPluginMonitor | FilesystemCorruptionDetected |
CustomPluginMonitor | KubeletIsDown |
CustomPluginMonitor | ContainerRuntimeIsDown |
CustomPluginMonitor | ЗамораживаниеScheduled |
CustomPluginMonitor | ПерезагрузкаScheduled |
CustomPluginMonitor | Повторное развертываниеScheduled |
CustomPluginMonitor | TerminateScheduled |
CustomPluginMonitor | PreemptScheduled |
CustomPluginMonitor | DNSProblem |
CustomPluginMonitor | PodIPProblem |
SystemLogMonitor | OOMKilling |
SystemLogMonitor | TaskHung |
SystemLogMonitor | Отмена регистрацииNetDevice |
SystemLogMonitor | KernelOops |
SystemLogMonitor | DockerSocketCannotConnect |
SystemLogMonitor | KubeletRPCDeadlineExceed |
SystemLogMonitor | KubeletRPCNoSuchContainer |
SystemLogMonitor | CNICannotStatFS |
SystemLogMonitor | PLEGUnhealthy |
SystemLogMonitor | KubeletStart |
SystemLogMonitor | DockerStart |
SystemLogMonitor | ContainerdStart |
В некоторых случаях AKS автоматически кордонирует и очищает узел, чтобы свести к минимуму нарушения рабочих нагрузок. Дополнительные сведения о событиях и действиях см. в разделе "Автоматическое очистка узла".
Проверка условий узла и событий
Проверьте условия узла и события с помощью
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
Эти события также доступны в Службе "Аналитика контейнеров" через KubeEvents.
Метрики
NPD также предоставляет метрики Prometheus на основе проблем с узлом, которые можно использовать для мониторинга и оповещения. Эти метрики предоставляются через порт 20257 IP-адреса узла и Prometheus могут сломать их.
В следующем примере YAML показана конфигурация слома, для использования с добавлением Управляемого Prometheus Azure в качестве 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.
Azure Kubernetes Service