Detektor problémů uzlů (NPD) v uzlech Azure Kubernetes Service (AKS)
Detektor problémů uzlu (NPD) je opensourcová komponenta Kubernetes, která detekuje problémy související s uzly a hlásí je. Běží jako obslužný systém systemd na každém uzlu v clusteru a shromažďuje různé metriky a informace o systému, jako je využití procesoru, využití disku a síťové připojení. Když zjistí problém, vygeneruje události nebo podmínky uzlu. Azure Kubernetes Service (AKS) používá NPD k monitorování a správě uzlů v clusteru Kubernetes spuštěném na cloudové platformě Azure. Rozšíření AKS pro Linux ve výchozím nastavení umožňuje NPD.
Poznámka:
Upgrady na NPD jsou nezávislé na imagi uzlu a procesech upgradu verzí Kubernetes. Pokud fond uzlů není v pořádku (tj. ve stavu selhání), nebudou nainstalovány nové verze NPD.
Podmínky uzlu
Podmínky uzlu označují trvalý problém, kvůli kterému je uzel nedostupný. AKS používá následující podmínky uzlu z NPD k vystavení trvalých problémů na uzlu. NPD také generuje odpovídající události Kubernetes.
Typ démon problému | NodeCondition | Důvod |
---|---|---|
CustomPluginMonitor | FilesystemCorruptionProblem | FilesystemCorruptionDetected |
CustomPluginMonitor | KubeletProblem | KubeletIsDown |
CustomPluginMonitor | ContainerRuntimeProblem | ContainerRuntimeIsDown |
CustomPluginMonitor | VMEventScheduled | VMEventScheduled |
CustomPluginMonitor | ČastéUnregisterNetDevice | Zrušení registrace SítěDevice |
CustomPluginMonitor | FrequentKubeletRestart | FrequentKubeletRestart |
CustomPluginMonitor | ČastéContainerdRestart | ČastéContainerdRestart |
CustomPluginMonitor | Časté zprovoznění Dockeru | Časté zprovoznění Dockeru |
SystemLogMonitor | KernelDeadlock | DockerHung |
SystemLogMonitor | ReadonlyFilesystem | FilesystemIsReadOnly |
Události
NPD vysílá události s relevantními informacemi, které vám pomůžou s diagnostikou hlubších problémů.
Typ démon problému | Důvod |
---|---|
CustomPluginMonitor | Výchozí přenos dat |
CustomPluginMonitor | FilesystemCorruptionDetected |
CustomPluginMonitor | KubeletIsDown |
CustomPluginMonitor | ContainerRuntimeIsDown |
CustomPluginMonitor | FreezeScheduled |
CustomPluginMonitor | RebootScheduled |
CustomPluginMonitor | Znovu nasaditScheduled |
CustomPluginMonitor | TerminateScheduled |
CustomPluginMonitor | PreemptScheduled |
CustomPluginMonitor | DnsProblem |
CustomPluginMonitor | PodIPProblem |
SystemLogMonitor | OOMKilling |
SystemLogMonitor | TaskHung |
SystemLogMonitor | Zrušení registrace SítěDevice |
SystemLogMonitor | KernelOops |
SystemLogMonitor | DockerSocketCannotConnect |
SystemLogMonitor | KubeletRPCDeadlineExceeded |
SystemLogMonitor | KubeletRPCNoSuchContainer |
SystemLogMonitor | CNICannotStatFS |
SystemLogMonitor | PLEGUnhealthy |
SystemLogMonitor | KubeletStart |
SystemLogMonitor | DockerStart |
SystemLogMonitor | ContainerdStart |
V některých případech AKS automaticky kabeluje a vyprázdní uzel, aby se minimalizovalo přerušení úloh. Další informace o událostechach
Kontrola podmínek a událostí uzlu
Pomocí příkazu zkontrolujte podmínky a události
kubectl describe node
uzlu.kubectl describe node my-aks-node
Výstup by měl vypadat podobně jako v následujícím příkladu zhuštěného výstupu:
... ... 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
Tyto události jsou také k dispozici v Container Insights prostřednictvím KubeEvents.
Metriky
NPD také zveřejňuje metriky Prometheus na základě problémů uzlů, které můžete použít k monitorování a upozorňování. Tyto metriky jsou zpřístupněny na portu 20257 IP adresy uzlu a Prometheus je může škrábat.
Následující příklad YAML ukazuje konfiguraci výstřižku, kterou můžete použít s doplňkem Azure Managed Prometheus jako 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']
Následující příklad ukazuje metriky se šrotovanými daty:
problem_gauge{reason="UnregisterNetDevice",type="FrequentUnregisterNetDevice"} 0
problem_gauge{reason="VMEventScheduled",type="VMEventScheduled"} 0
Další kroky
Další informace o NPD najdete v tématu kubernetes/node-problem-detector.
Azure Kubernetes Service