Détecteur de problème de nœud

Le détecteur de problème de nœud est une bibliothèque Open Source qui surveille l'état des nœuds et détecte les problèmes de nœuds courants, tels que des problèmes d'exécution de matériel, de noyau ou de conteneur. Dans Google Distributed Cloud, il s'exécute en tant que service systemd sur chaque nœud.

À partir de la version 1.10.0 de Google Distributed Cloud, le détecteur de problème de nœud est activé par défaut.

Si vous avez besoin d'une aide supplémentaire, contactez Cloud Customer Care. Vous pouvez également consulter Obtenir de l'aide pour en savoir plus sur les ressources d'assistance, y compris en ce qui concerne les thématiques suivantes :

  • Conditions requises pour ouvrir une demande d'assistance
  • Outils pour vous aider à résoudre les problèmes liés à la configuration de votre environnement, les journaux et les métriques
  • Composants acceptés.

Quels sont les problèmes détectés ?

Le détecteur de problèmes de nœud peut détecter les types de problèmes suivants :

  • Problèmes d'exécution du conteneur, tels que des daemons d'exécution qui ne répondent pas
  • Problèmes matériels, tels que des défaillances de processeur, de mémoire ou de disque
  • Problèmes de noyau, tels que des conditions d'interblocage du noyau ou des systèmes de fichiers corrompus

Il s'exécute sur un nœud et signale les problèmes au serveur d'API Kubernetes en tant que NodeCondition ou en tant qu'Event. Un NodeCondition est un problème qui empêche un nœud d'exécuter des pods, tandis qu'un Event est un problème temporaire qui a un effet limité sur les pods, mais qui est tout de même suffisamment important pour être signalé.

Le tableau suivant décrit les NodeConditions détectés par le détecteur de problème de nœud et indique s'ils peuvent être réparés automatiquement :

Condition Motif Réparation automatique acceptée1
KernelDeadlock Les processus du noyau sont bloqués en attendant que d'autres processus du noyau libèrent les ressources requises. Non
ReadonlyFilesystem Le cluster ne peut pas écrire dans le système de fichiers en raison d'un problème, par exemple un disque plein. Non
FrequentKubeletRestart Le kubelet redémarre fréquemment, ce qui empêche le nœud d'exécuter efficacement les pods. Non
FrequentDockerRestart Le daemon Docker a redémarré plus de cinq fois en 20 minutes. Non
FrequentContainerdRestart L'environnement d'exécution du conteneur a redémarré plus de cinq fois en 20 minutes. Non
FrequentUnregisterNetDevice Le nœud rencontre fréquemment des problèmes de désenregistrement des périphériques réseau. Non
CorruptDockerOverlay2 Des problèmes ou des incohérences de système de fichiers existent dans le répertoire du pilote de stockage Docker overlay2. Non
OrphanContainers2 Un pod spécifique à un conteneur a été supprimé, mais le conteneur correspondant existe toujours dans le nœud. Non
ContainerRuntimeUnhealthy L'environnement d'exécution du conteneur ne fonctionne pas correctement, ce qui empêche les pods de s'exécuter ou de s'exécuter sur le nœud. Oui
FailedCgroupRemoval2 Certains cgroups sont à l'état gelé. Oui
KubeletUnhealthy Le nœud ne fonctionne pas correctement ou ne répond pas au plan de contrôle. Oui

1 Pour les versions 1.32 et ultérieures, la possibilité de réparer automatiquement les problèmes détectés est disponible pour certaines conditions.

2 Compatible avec les versions 1.32 et ultérieures.

Voici quelques exemples de types d'Events signalés par le détecteur de problème de nœud :

  • Warning TaskHung node/vm-worker-1-user-a12fabb4a99cb92-ddfce8832fd90f6f.lab.anthos kernel: task docker:7 blocked for more than 300 seconds.
  • Warning KernelOops node/vm-worker-1-user-a12fabb4a99cb92-ddfce8832fd90f6f.lab.anthos kernel: BUG: unable to handle kernel NULL pointer dereference at 00x0.

Quels sont les problèmes réparés ?

À partir de la version 1.32, lorsque le détecteur de problème de nœud détecte certaines NodeConditions, il peut réparer automatiquement le problème correspondant sur le nœud. Les NodeConditions suivantes sont compatibles avec la réparation automatique :

  • ContainerRuntimeUnhealthy
  • FailedCgroupRemoval
  • KubeletUnhealthy

Comment afficher les problèmes détectés

Exécutez la commande kubectl describe suivante pour rechercher les NodeConditions et les Events :

kubectl describe node NODE_NAME \
    --kubeconfig=KUBECONFIG

Remplacez les éléments suivants :

  • NODE_NAME : nom du nœud que vous vérifiez.

  • KUBECONFIG : chemin d'accès au fichier kubeconfig du cluster.

Comment activer et désactiver le détecteur de problème de nœud

Par défaut, le détecteur de problème de nœud est activé, mais il peut être désactivé dans la ressource ConfigMap node-problem-detector-config. Sauf si vous le désactivez explicitement, le détecteur de problème de nœud surveille en permanence les nœuds pour détecter des conditions spécifiques qui indiquent des problèmes pour le nœud.

Pour désactiver le détecteur de problème de nœud sur un cluster donné, procédez comme suit :

  1. Modifiez la ressource ConfigMap node-problem-detector-config :

    kubectl edit configmap node-problem-detector-config \
        --kubeconfig=KUBECONFIG \
        --namespace=CLUSTER_NAMESPACE
    

    Remplacez les éléments suivants :

    • KUBECONFIG: chemin d'accès au fichier kubeconfig du cluster.

    • CLUSTER_NAMESPACE: espace de noms du cluster dans lequel vous souhaitez activer le détecteur de problème de nœud.

    Cette commande démarre automatiquement un éditeur de texte dans lequel vous pouvez modifier la ressource node-problem-detector-config.

  2. Définissez data.enabled sur false dans la définition de ressource node-problem-detector-config.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      creationTimestamp: "2025-04-19T21:36:44Z"
      name: node-problem-detector-config
    ...
    data:
      enabled: "false"
    

    Initialement, le fichier ConfigMap node-problem-detector-config ne comporte pas de champ data. Vous devrez peut-être l'ajouter.

  3. Pour mettre à jour la ressource, enregistrez vos modifications et fermez l'éditeur.

Pour réactiver le détecteur de problème de nœud, suivez les étapes précédentes, mais définissez data.enabled sur true dans la définition de ressource node-problem-detector-config.

Comment activer et désactiver la réparation automatique

À partir de la version 1.32, le détecteur de problème de nœud recherche des NodeConditions spécifiques et répare automatiquement le problème correspondant sur le nœud. Par défaut, la réparation automatique est activée pour les NodeConditions compatibles, mais elle peut être désactivée dans la ressource ConfigMap node-problem-detector-config.

Pour désactiver le comportement de réparation automatique sur un cluster donné, procédez comme suit :

  1. Modifiez la ressource ConfigMap node-problem-detector-config :

    kubectl edit configmap node-problem-detector-config \
        --kubeconfig=KUBECONFIG \
        --namespace=CLUSTER_NAMESPACE
    

    Remplacez les éléments suivants :

    • KUBECONFIG: chemin d'accès au fichier kubeconfig du cluster.

    • CLUSTER_NAMESPACE: espace de noms du cluster dans lequel vous souhaitez activer le détecteur de problème de nœud.

    Cette commande démarre automatiquement un éditeur de texte dans lequel vous pouvez modifier la ressource node-problem-detector-config.

  2. Définissez data.check-only sur true dans la définition de ressource node-problem-detector-config.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      creationTimestamp: "2025-04-19T21:36:44Z"
      name: node-problem-detector-config
    ...
    data:
      enabled: "true"
      check-only: "true"
    

    Initialement, le fichier ConfigMap node-problem-detector-config ne comporte pas de champ data. Vous devrez peut-être l'ajouter. Définir check-only sur "true" désactive la réparation automatique pour toutes les conditions compatibles.

  3. Pour mettre à jour la ressource, enregistrez vos modifications et fermez l'éditeur.

Pour réactiver la réparation automatique pour tous les NodeConditions compatibles, définissez data.check-only sur "false" dans le fichier ConfigMap node-problem-detector-config.

Comment arrêter et redémarrer le détecteur de problème de nœud

Le détecteur de problème de nœud s'exécute en tant que service systemd sur chaque nœud. Pour gérer le détecteur de problème de nœud pour un nœud donné, utilisez SSH pour accéder au nœud et exécutez les commandes systemctl suivantes.

  • Pour désactiver le détecteur de problème de nœud, exécutez la commande suivante :

    systemctl stop node-problem-detector
    
  • Pour redémarrer le détecteur de problème de nœud, exécutez la commande suivante :

    systemctl restart node-problem-detector
    
  • Pour vérifier si le détecteur de problème de nœud s'exécute sur un nœud particulier, exécutez la commande suivante :

    systemctl is-active node-problem-detector
    

Fonctionnalités non compatibles

Google Distributed Cloud n'est pas compatible avec les personnalisations suivantes du détecteur de problème de nœud :

  • Exportation des rapports du détecteur de problème de nœud vers d'autres systèmes de surveillance, tels que Stackdriver ou Prometheus
  • Personnalisation des valeurs NodeConditions ou Events à rechercher
  • Exécution de scripts de surveillance définis par l'utilisateur

Étape suivante

Si vous avez besoin d'une aide supplémentaire, contactez Cloud Customer Care. Vous pouvez également consulter Obtenir de l'aide pour en savoir plus sur les ressources d'assistance, y compris en ce qui concerne les thématiques suivantes :

  • Conditions requises pour ouvrir une demande d'assistance
  • Outils pour vous aider à résoudre les problèmes liés à la configuration de votre environnement, les journaux et les métriques
  • Composants acceptés