Knotenproblemerkennung (NPD) in Azure Kubernetes Service(AKS)-Knoten
Die Knotenproblemerkennung (NPD) ist eine Open Source-Kubernetes-Komponente, die knotenbezogene Probleme erkennt und darüber berichtet. Sie wird als „systemd serviced“ auf jedem Knoten im Cluster ausgeführt und erfasst verschiedene Metriken und Systeminformationen, z. B. CPU-Auslastung, Datenträgernutzung und Netzwerkkonnektivität. Wenn ein Problem erkannt wird, werden Ereignisse und/oder Knotenbedingungen generiert. Azure Kubernetes Service (AKS) verwendet NPD, um Knoten in einem Kubernetes-Cluster zu überwachen und zu verwalten, der auf der Azure-Cloudplattform ausgeführt wird. Die AKS Linux-Erweiterung aktiviert NPD standardmäßig.
Hinweis
Upgrades auf NPD sind unabhängig vom Knotenimage und Kubernetes-Versionsupgradeprozessen. Wenn ein Knotenpool fehlerhaft ist (d. h. in einem fehlerhaften Zustand), werden keine neuen NPD-Versionen installiert.
Knotenbedingungen
Knotenbedingungen weisen auf ein dauerhaftes Problem hin, das dazu führt, dass der Knoten nicht verfügbar ist. AKS verwendet die folgenden Knotenbedingungen der NPD, um dauerhafte Probleme auf dem Knoten offenzulegen. NPD gibt auch entsprechende Kubernetes-Ereignisse aus.
Problem-Daemontyp | NodeCondition | `Reason` |
---|---|---|
CustomPluginMonitor | FilesystemCorruptionProblem | FilesystemCorruptionDetected |
CustomPluginMonitor | KubeletProblem | KubeletIsDown |
CustomPluginMonitor | ContainerRuntimeProblem | ContainerRuntimeIsDown |
CustomPluginMonitor | VMEventScheduled | VMEventScheduled |
CustomPluginMonitor | FrequentUnregisterNetDevice | UnregisterNetDevice |
CustomPluginMonitor | FrequentKubeletRestart | FrequentKubeletRestart |
CustomPluginMonitor | FrequentContainerdRestart | FrequentContainerdRestart |
CustomPluginMonitor | FrequentDockerRestart | FrequentDockerRestart |
SystemLogMonitor | KernelDeadlock | DockerHung |
SystemLogMonitor | ReadonlyFilesystem | FilesystemIsReadOnly |
Ereignisse
NPD gibt Ereignisse mit relevanten Informationen aus, die Ihnen bei der Diagnose zugrunde liegender Probleme helfen.
Problem-Daemontyp | `Reason` |
---|---|
CustomPluginMonitor | EgressBlocked |
CustomPluginMonitor | FilesystemCorruptionDetected |
CustomPluginMonitor | KubeletIsDown |
CustomPluginMonitor | ContainerRuntimeIsDown |
CustomPluginMonitor | FreezeScheduled |
CustomPluginMonitor | RebootScheduled |
CustomPluginMonitor | RedeployScheduled |
CustomPluginMonitor | TerminateScheduled |
CustomPluginMonitor | PreemptScheduled |
CustomPluginMonitor | DNSProblem |
CustomPluginMonitor | PodIPProblem |
SystemLogMonitor | OOMKilling |
SystemLogMonitor | TaskHung |
SystemLogMonitor | UnregisterNetDevice |
SystemLogMonitor | KernelOops |
SystemLogMonitor | DockerSocketCannotConnect |
SystemLogMonitor | KubeletRPCDeadlineExceeded |
SystemLogMonitor | KubeletRPCNoSuchContainer |
SystemLogMonitor | CNICannotStatFS |
SystemLogMonitor | PLEGUnhealthy |
SystemLogMonitor | KubeletStart |
SystemLogMonitor | DockerStart |
SystemLogMonitor | ContainerdStart |
In bestimmten Fällen sperrt und entleert AKS den Knoten automatisch, um die Unterbrechung der Workloads zu minimieren. Weitere Informationen zu den Ereignissen und Aktionen finden Sie unter Automatisches Entladen von Knoten.
Überprüfen der Knotenbedingungen und -ereignisse
Überprüfen Sie die Knotenbedingungen und -ereignisse mithilfe des Befehls
kubectl describe node
.kubectl describe node my-aks-node
Ihre Ausgabe sollte der folgenden gekürzten Beispielausgabe entsprechen:
... ... 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
Diese Ereignisse sind auch in Container Insights über KubeEvents verfügbar.
Metriken
NPD stellt auch Prometheus-Metriken zur Verfügung, die auf den Knotenproblemen basieren und für Überwachung und Warnung verwendet werden können. Diese Metriken werden an Port 20257 der Knoten-IP-Adresse verfügbar gemacht, und Prometheus kann sie abfragen.
Das folgende YAML-Beispiel zeigt eine Scrape-Konfiguration, die Sie mit dem Azure Managed Prometheus-Add-On als DaemonSet verwenden können:
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']
Das folgende Beispiel zeigt die ausgelesenen Metriken:
problem_gauge{reason="UnregisterNetDevice",type="FrequentUnregisterNetDevice"} 0
problem_gauge{reason="VMEventScheduled",type="VMEventScheduled"} 0
Nächste Schritte
Weitere Informationen zu NPD finden Sie unter kubernetes/node-problem-detector.
Azure Kubernetes Service