Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le détecteur de problèmes de nœud (NPD) est un module complémentaire open source de Kubernetes qui détecte et signale des problèmes liés aux nœuds. Il s’exécute en tant que service système sur chaque nœud du cluster et collecte différentes métriques et informations système, telles que l’utilisation du processeur, l’utilisation du disque et la connectivité réseau. Quand il détecte un problème, il génère des événements et/ou des conditions de nœud. Azure Kubernetes Service (AKS) utilise NPD pour surveiller et gérer les nœuds dans un cluster Kubernetes s’exécutant sur la plateforme cloud Azure. L’extension AKS Linux active NPD par défaut.
Remarque
Les mises à niveau vers NPD sont indépendantes des processus de mise à niveau des versions de Kubernetes et de l’image de nœud. Si un pool de nœuds n’est pas sain (autrement dit, dans un état d’échec), les nouvelles versions de NPD ne sont pas installées.
Conditions de nœud
Les conditions de nœud indiquent un problème permanent qui rend le nœud indisponible. AKS utilise les états de nœud suivants de NPD afin de révéler les problèmes permanents du nœud. NPD émet également des événements Kubernetes correspondants.
| Type de démon problématique | NodeCondition | Motif | Type de capacité de calcul |
|---|---|---|---|
| CustomPluginMonitor | Problème de corruption du système de fichiers | CorruptionDuSystèmeDeFichiersDétectée | Usage général |
| CustomPluginMonitor | KubeletProblem | KubeletIsDown | Usage général |
| CustomPluginMonitor | ContainerRuntimeProblem | ContainerRuntimeIsDown | Usage général |
| CustomPluginMonitor | VMEventScheduled | VMEventScheduled | Usage général |
| CustomPluginMonitor | FrequentUnregisterNetDevice | DésinscrireNetDevice | Usage général |
| CustomPluginMonitor | FrequentKubeletRestart | FrequentKubeletRestart | Usage général |
| CustomPluginMonitor | FrequentContainerdRestart | FrequentContainerdRestart | Usage général |
| CustomPluginMonitor | Redémarrage fréquent de Docker | Redémarrage fréquent de Docker | Usage général |
| CustomPluginMonitor | GPU manquant | Le nombre de GPU observé ne correspond pas au nombre de GPU attendu | GPU uniquement |
| CustomPluginMonitor | NVLinkStatusInactive | NVLinkStatusInactive | GPU uniquement |
| CustomPluginMonitor | XIDErrors | Erreurs XID présentes dans le journal du noyau | GPU uniquement |
| CustomPluginMonitor | IBLinkFlapping | Connectivité intermittente des appareils InfiniBand | GPU uniquement |
| SystemLogMonitor | KernelDeadlock | DockerHung | Usage général |
| SystemLogMonitor | Système de fichiers en lecture seule | FilesystemIsReadOnly | Usage général |
Remarque
Les GPU only conditions de nœud s’appliquent actuellement aux pools de nœuds AKS avec taille de VM Standard_ND96asr_v4 ou Standard_ND96isr_H100_v5, et sont prises en charge sur les pools de nœuds GPU standard et sur les pools de nœuds GPU avec MIG activé.
Événements
NPD émet des événements avec des informations pertinentes pour vous aider à diagnostiquer les problèmes sous-jacents.
| Type de démon problématique | Motif | Fréquence | Descriptif | Action |
|---|---|---|---|---|
| CustomPluginMonitor | EgressBlocked | 30 minutes | Cet événement vérifie la connectivité aux points de terminaison externes | Vérifiez si un pare-feu ou un groupe de sécurité réseau bloque l'accès au point de terminaison qui est signalé. |
| CustomPluginMonitor | CorruptionDuSystèmeDeFichiersDétectée | 5 minutes | Cette vérification de la corruption du système de fichiers est effectuée par Docker. | |
| CustomPluginMonitor | KubeletIsDown | 30 s | Cela vérifie que le service kubelet est actif et en bonne santé | |
| CustomPluginMonitor | ContainerRuntimeIsDown | 30 s | Cet événement vérifie si l'environnement d'exécution de conteneur, par exemple containerd, fonctionne correctement. | |
| CustomPluginMonitor | FreezeScheduled | 1 minute | Cet événement vérifie si un événement Freeze est planifié sur le nœud. Consultez https://aka.ms/aks/scheduledevents pour plus d'informations | |
| CustomPluginMonitor | RebootScheduled | 1 minute | Cet événement vérifie si un événement de redémarrage est planifié sur le nœud Vérifier https://aka.ms/aks/scheduledevents pour plus d’informations | |
| CustomPluginMonitor | RedeployScheduled | 1 minute | Cet événement vérifie si un événement de redéploiement est planifié sur le nœud. Consultez https://aka.ms/aks/scheduledevents pour plus d'informations | |
| CustomPluginMonitor | TerminateScheduled | 1 minute | Cet événement vérifie si un événement Terminate est planifié sur le nœud. Consultez https://aka.ms/aks/scheduledevents pour plus d'informations | |
| CustomPluginMonitor | PreemptScheduled | 2s | Cet événement vérifie si un événement préempt est planifié sur le nœud. Consultez https://aka.ms/aks/scheduledevents pour plus d'informations | |
| CustomPluginMonitor | DNSProblem | |||
| SystemLogMonitor | OOMKilling | |||
| SystemLogMonitor | TaskHung | |||
| SystemLogMonitor | DésinscrireNetDevice | |||
| SystemLogMonitor | KernelOops | |||
| SystemLogMonitor | DockerSocketCannotConnect | |||
| SystemLogMonitor | KubeletRPCDeadlineExceeded | |||
| SystemLogMonitor | KubeletRPCNoSuchContainer | |||
| SystemLogMonitor | CNICannotStatFS | |||
| SystemLogMonitor | PLEGUnhealthy | |||
| SystemLogMonitor | KubeletStart | |||
| SystemLogMonitor | DockerStart | |||
| SystemLogMonitor | ContainerdStart |
Dans certains cas, AKS isole et draine automatiquement le nœud pour réduire l’interruption des charges de travail. Pour plus d’informations sur les événements et les actions, consultez la section Drainage automatique des nœuds.
EgressBlocked
La liste des points de terminaison vérifiés par egressBlocked est répertoriée ci-dessous
Remarque
Les points de terminaison réels dépendent du type du cluster et de l’emplacement où il est hébergé (cloud public et clouds airgapped). Consultez la documentation relative à l’accès sortant ici. La documentation concerne les clouds publics
| Type | Exemple : | Remarque |
|---|---|---|
| MCR | https://mcr.microsoft.com | |
| Microsoft Entra ID (système d'identification de Microsoft) | https://login.microsoftonline.com" | |
| Gestionnaire de ressources | https://management.azure.com | |
| Paquets | https://packages.microsoft.com | |
| Kube Binary | https://acs-mirror.azureedge.net/acs-mirror/healthz,https://packages.aks.azure.com/acs-mirror/healthz |
Vérifier les conditions et événements de nœud
Vérifiez les conditions de nœud et les événements à l’aide de la commande
kubectl describe node.kubectl describe node my-aks-nodeLe résultat doit être similaire à l’exemple de sortie condensée suivant :
... ... 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
Ces événements sont également disponibles dans Container Insights via KubeEvents.
Mesures
NPD expose également des métriques Prometheus basées sur les problèmes de nœud, que vous pouvez utiliser pour la surveillance et les alertes. Ces métriques sont exposées sur le port 20257 de l’adresse IP du nœud et Prometheus peut les scraper.
L’exemple YAML suivant montre une configuration de scraping que vous pouvez utiliser avec le module complémentaire Azure Prometheus managé en tant que 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']
L’exemple suivant montre les métriques scrapées :
problem_gauge{reason="UnregisterNetDevice",type="FrequentUnregisterNetDevice"} 0
problem_gauge{reason="VMEventScheduled",type="VMEventScheduled"} 0
Étapes suivantes
Pour plus d’informations sur NPD, consultez la page kubernetes/node-problem-detector.