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 GKE sur Bare Metal, il s'exécute en tant que service systemd sur chaque nœud.

À partir de la version 1.10.0 de GKE sur Bare Metal, le détecteur de problèmes de nœuds est activé par défaut.

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

Le détecteur de problème 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 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é.)

Voici quelques-uns des NodeConditions détectés par le détecteur de problème de nœud :

  • KernelDeadlock
  • ReadonlyFilesystem
  • FrequentKubeletRestart
  • FrequentDockerRestart
  • FrequentContainerdRestart
  • FrequentUnregisterNetDevice
  • KubeletUnhealthy
  • ContainerRuntimeUnhealthy
  • CorruptDockerOverlay2

Voici quelques exemples de types de 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.

Comment afficher les problèmes détectés

Exécutez la commande kubectl describe suivante sur un nœud pour rechercher NodeConditions et Events :

kubectl --kubeconfig=KUBECONFIG_PATH describe node NODE_NAME

Dans la commande, remplacez les entrées suivantes par des informations spécifiques à votre environnement :

  • KUBECONFIG_PATH : chemin d'accès au fichier kubeconfig du cluster cible. (le chemin d'accès au fichier kubeconfig est généralement bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig. Toutefois, si vous avez spécifié votre espace de travail avec l'option WORKSPACE_DIR, le chemin d'accès est WORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig).

  • NODE_NAME : nom du nœud pour lequel vous souhaitez obtenir des informations d'état.

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

Voici les étapes à suivre pour activer le détecteur de problème de nœud sur un cluster donné :

  1. Modifiez le fichier ConfigMap du cluster, nommé node-problem-detector-config.

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

    Cette commande démarre automatiquement un éditeur de texte (tel que Vim ou Nano), dans lequel vous pouvez modifier le fichier node-problem-detector-config. Dans la commande, remplacez les entrées suivantes par des informations spécifiques à votre environnement de cluster :

    • KUBECONFIG_PATH : chemin d'accès au fichier kubeconfig du cluster d'administrateur. (le chemin d'accès au fichier kubeconfig est généralement bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig. Toutefois, si vous avez spécifié votre espace de travail avec l'option WORKSPACE_DIR, le chemin d'accès est WORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig).
    • CLUSTER_NAMESPACE : espace de noms du cluster dans lequel vous souhaitez activer le détecteur de problème de nœud.
  2. Initialement, le ConfigMap node-problem-detector-config ne comporte pas de champ data. Ajoutez le champ data à la carte de configuration avec la paire clé/valeur suivante :

    data:
      enabled: "true"
    

Pour désactiver le détecteur de problème de nœud dans un espace de noms de cluster, suivez les étapes 1 et 2. Toutefois, à l'étape 2, définissez la valeur de la clé enabled sur "false".

Comment arrêter/dé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

GKE sur bare metal n'est pas compatible avec les personnalisations suivantes du détecteur de problèmes de nœuds:

  • 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