Node Problem Detector

Node Problem Detector è una libreria open source che monitora l'integrità dei nodi e rileva problemi comuni dei nodi, come problemi di hardware, kernel o runtime container. In Google Distributed Cloud, viene eseguito come un servizio systemd su ogni nodo.

A partire dalla release 1.10.0 di Google Distributed Cloud, Node Problem Detector è abilitato per impostazione predefinita.

Se hai bisogno di ulteriore assistenza, contatta l'assistenza clienti Google Cloud. Puoi anche consultare Richiedere assistenza per ulteriori informazioni sulle risorse di assistenza, tra cui:

  • Requisiti per l'apertura di una richiesta di assistenza.
  • Strumenti per la risoluzione dei problemi, come la configurazione dell'ambiente, i log e le metriche.
  • Componenti supportati.

Quali problemi rileva?

Node Problem Detector può rilevare i seguenti tipi di problemi:

  • Problemi di runtime container, ad esempio daemon di runtime che non rispondono
  • Problemi hardware, come guasti di CPU, memoria o disco
  • Problemi del kernel, come condizioni di deadlock del kernel o file system danneggiati

Viene eseguito su un nodo e segnala i problemi al server API Kubernetes come NodeCondition o come un Event. Un NodeCondition è un problema che impedisce a un nodo di eseguire i pod, mentre un Event è un problema temporaneo che ha un effetto limitato sui pod, ma è comunque considerato abbastanza importante da essere segnalato.

La seguente tabella descrive le NodeConditions rilevate da Node Problem Detector e se possono essere riparate automaticamente:

Condizione Motivo Riparazione automatica supportata1
KernelDeadlock I processi del kernel sono bloccati in attesa che altri processi del kernel rilascino le risorse richieste. No
ReadonlyFilesystem Il cluster non è in grado di scrivere nel file system a causa di un problema, ad esempio il disco è pieno. No
FrequentKubeletRestart Il kubelet viene riavviato di frequente, impedendo al nodo di eseguire i pod in modo efficace. No
FrequentDockerRestart Il daemon Docker è stato riavviato più di 5 volte in 20 minuti. No
FrequentContainerdRestart Il runtime container è stato riavviato più di 5 volte in 20 minuti. No
FrequentUnregisterNetDevice Il nodo sta riscontrando una frequente annullamento della registrazione dei dispositivi di rete. No
CorruptDockerOverlay2 Sono presenti problemi o incoerenze del file system nella directory del driver di archiviazione Docker overlay2. No
OrphanContainers2 È stato eliminato un pod specifico per un container, ma il container corrispondente esiste ancora nel nodo. No
ContainerRuntimeUnhealthy Il runtime container non funziona correttamente, impedendo l'esecuzione o la pianificazione dei pod sul nodo.
FailedCgroupRemoval2 Alcuni cgroup sono in stato di blocco.
KubeletUnhealthy Il nodo non funziona correttamente o non risponde al control plane.

1 Per le versioni 1.32 e successive, la possibilità di riparare automaticamente i problemi rilevati è supportata per condizioni selezionate.

2 Supportato per le versioni 1.32 e successive.

Ecco alcuni esempi dei tipi di Events segnalati da Node Problem Detector:

  • 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.

Quali problemi ripara?

A partire dalla versione 1.32, quando Node Problem Detector rileva NodeConditions selezionate, può riparare automaticamente il problema corrispondente sul nodo. Le seguenti NodeConditions supportano la riparazione automatica:

  • ContainerRuntimeUnhealthy
  • FailedCgroupRemoval
  • KubeletUnhealthy

Come visualizzare i problemi rilevati

Esegui il seguente comando kubectl describe per cercare NodeConditions ed Events:

kubectl describe node NODE_NAME \
    --kubeconfig=KUBECONFIG

Sostituisci quanto segue:

  • NODE_NAME: il nome del nodo che stai controllando.

  • KUBECONFIG: il percorso del file kubeconfig del cluster.

Come attivare e disattivare Node Problem Detector

Per impostazione predefinita, Node Problem Detector è abilitato, ma può essere disattivato nella risorsa ConfigMap node-problem-detector-config. A meno che tu non lo disattivi esplicitamente, Node Problem Detector monitora continuamente i nodi per condizioni specifiche che indicano problemi per il nodo.

Per disattivare Node Problem Detector su un determinato cluster, segui questi passaggi:

  1. Modifica la risorsa ConfigMap node-problem-detector-config:

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

    Sostituisci quanto segue:

    • KUBECONFIG: il percorso del file kubeconfig del cluster.

    • CLUSTER_NAMESPACE: lo spazio dei nomi del cluster in cui vuoi attivare Node Problem Detector.

    Questo comando avvia automaticamente un editor di testo in cui puoi modificare la risorsa node-problem-detector-config.

  2. Imposta data.enabled su false nella definizione della risorsa node-problem-detector-config.

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

    Inizialmente, la ConfigMap node-problem-detector-config non ha un campo data, quindi potrebbe essere necessario aggiungerlo.

  3. Per aggiornare la risorsa, salva le modifiche e chiudi l'editor.

Per riattivare Node Problem Detector, esegui i passaggi precedenti, ma imposta data.enabled su true nella definizione della risorsa node-problem-detector-config.

Come attivare e disattivare la riparazione automatica

A partire dalla versione 1.32, Node Problem Detector verifica la presenza di NodeConditions specifiche e ripara automaticamente il problema corrispondente sul nodo. Per impostazione predefinita, la riparazione automatica è abilitata per le NodeConditions supportate, ma può essere disattivata nella risorsa ConfigMap node-problem-detector-config.

Per disattivare il comportamento di riparazione automatica su un determinato cluster, segui questi passaggi:

  1. Modifica la risorsa ConfigMap node-problem-detector-config:

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

    Sostituisci quanto segue:

    • KUBECONFIG: il percorso del file kubeconfig del cluster.

    • CLUSTER_NAMESPACE: lo spazio dei nomi del cluster in cui vuoi attivare Node Problem Detector.

    Questo comando avvia automaticamente un editor di testo in cui puoi modificare la risorsa node-problem-detector-config.

  2. Imposta data.check-only su true nella definizione della risorsa 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"
    

    Inizialmente, la ConfigMap node-problem-detector-config non ha un campo data, quindi potrebbe essere necessario aggiungerlo. Se imposti check-only su "true" , la riparazione automatica viene disattivata per tutte le condizioni supportate.

  3. Per aggiornare la risorsa, salva le modifiche e chiudi l'editor.

Per riattivare la riparazione automatica per tutti i NodeConditions che la supportano, imposta data.check-only su "false" nella ConfigMap node-problem-detector-config.

Come arrestare e riavviare Node Problem Detector

Node Problem Detector viene eseguito come servizio systemd su ogni nodo. Per gestire Node Problem Detector per un determinato nodo, utilizza SSH per accedere al nodo ed esegui i seguenti comandi systemctl.

  • Per disattivare Node Problem Detector, esegui questo comando:

    systemctl stop node-problem-detector
    
  • Per riavviare Node Problem Detector, esegui questo comando:

    systemctl restart node-problem-detector
    
  • Per verificare se Node Problem Detector è in esecuzione su un nodo specifico, esegui questo comando:

    systemctl is-active node-problem-detector
    

Funzionalità non supportate

Google Distributed Cloud non supporta le seguenti personalizzazioni di Node Problem Detector:

  • Esportazione dei report di Node Problem Detector in altri sistemi di monitoraggio, come Stackdriver o Prometheus.
  • Personalizzazione delle NodeConditions o degli Events da cercare.
  • Esecuzione di script di monitoraggio definiti dall'utente.

Passaggi successivi

Se hai bisogno di ulteriore assistenza, contatta l'assistenza clienti Google Cloud. Puoi anche consultare Richiedere assistenza per ulteriori informazioni sulle risorse di assistenza, tra cui:

  • Requisiti per l'apertura di una richiesta di assistenza.
  • Strumenti per la risoluzione dei problemi, come la configurazione dell'ambiente, i log e le metriche.
  • Componenti supportati.