Risolvere i problemi relativi alla registrazione dei nodi


Questo documento descrive come risolvere i problemi riscontrati durante l'aggiunta di nodi al cluster Google Kubernetes Engine (GKE) Standard. Alcuni scenari in cui si verificano questi problemi includono la creazione di cluster e di pool di nodi, nonché durante gli eventi di scale up.

Per risolvere i problemi relativi ai cluster GKE Autopilot, consulta Risolvere i problemi dei cluster Autopilot.

Se hai bisogno di ulteriore aiuto, contatta l'assistenza clienti Google Cloud.

Informazioni sulla registrazione dei nodi

I nodi sono istanze VM di Compute Engine che GKE crea per tuo conto. Quando un nuovo nodo viene aggiunto a un cluster GKE, deve essere registrato con il piano di controllo del cluster. Questo processo, chiamato registrazione dei nodi o bootstrap dei nodi, si verifica quando viene creato un nodo.

Quando si verifica la registrazione dei nodi

La registrazione dei nodi avviene ogni volta che vengono creati nodi, inclusi i seguenti scenari:

Il processo di registrazione dei nodi segue questi passaggi:

  1. Il numero di nodi impostato per il pool di nodi viene replicato nei gruppi di istanze gestite (MIG).
  2. I gruppi di istanze gestite creano il numero richiesto di istanze VM.
  3. Per ogni istanza VM creata:

    1. L'istanza VM si avvia.
    2. L'istanza VM configura e installa i pacchetti necessari per l'esecuzione come nodo Kubernetes.
    3. Il kubelet ora in esecuzione sull'istanza VM comunica con il server API del piano di controllo per registrarsi come nodo.

Messaggio di errore relativo alla registrazione del nodo

Quando GKE tenta di aggiungere nodi al tuo cluster, se la registrazione del nodo non è riuscita viene visualizzato il seguente errore nella console Google Cloud:

  All cluster resources were brought up, but: only 0 nodes out of * have
  registered; this is likely due to the Nodes failing to start correctly; try
  re-creating the cluster or contact support if that doesn't work.

Questo messaggio di errore indica che i nodi non sono stati registrati correttamente con il cluster. Le seguenti sezioni descrivono alcune delle potenziali cause di questo errore.

Prerequisiti per la registrazione dei nodi riuscita

La registrazione riuscita dei nodi in un cluster GKE dipende da fattori quali:

  • Connettività di rete.
  • Disponibilità delle risorse.
  • Autorizzazioni dell'account di servizio.

Prerequisiti per la creazione dell'istanza

Quando GKE crea un nodo per il tuo cluster, il primo passaggio è creare una nuova istanza VM di Compute Engine.

La creazione dell'istanza potrebbe non riuscire per uno dei seguenti motivi:

Creazione non riuscita dell'istanza indica che nell'intervallo di tempo durante il quale GKE ha tentato di creare l'istanza per registrarla come nodo GKE, mancano i log per la creazione delle istanze perché queste non sono mai state create. Per verificare la presenza di log mancanti, consulta le istruzioni per trovare un'istanza che non ha superato la registrazione dei nodi.

Autorizzazioni account di servizio

Ai nodi GKE è associato un account di servizio IAM. Per impostazione predefinita, questo account di servizio è l'account di servizio predefinito di Compute Engine. Per proteggere il cluster, ti consigliamo di utilizzare un account di servizio IAM personalizzato che disponga delle autorizzazioni minime richieste.

Questo account di servizio deve disporre delle autorizzazioni corrette affinché le istanze VM vengano inizializzate come nodi GKE. Se elimini l'account di servizio, lo disattivi o non gli concedi le autorizzazioni corrette, la registrazione dei nodi potrebbe non riuscire.

Prerequisiti per la connessione di rete alle API e ai servizi Google

L'istanza VM scarica pacchetti per prepararsi all'esecuzione come nodo GKE e un timeout della connessione potrebbe significare che il cluster non ha soddisfatto i requisiti di rete necessari per connettersi alle API e ai servizi Google, ad esempio storage.googleapis.com. Se un'istanza non può connettersi a questi servizi, non può scaricare la distribuzione Kubernetes e completare il processo di registrazione dei nodi.

A seconda della connessione di rete, consentire questa connessione potrebbe comportare la configurazione dell'accesso privato Google o la presenza di regole firewall e route nella rete Virtual Private Cloud (VPC) del cluster che consente la connessione.

Prerequisiti per la connessione di rete con il piano di controllo

La connettività tra il piano di controllo e i nodi è fondamentale per la registrazione dei nodi e il funzionamento regolare. Questa comunicazione è consentita per impostazione predefinita. Assicurati che quando imposti le regole firewall VPC, la comunicazione tra i nodi e il piano di controllo sia comunque consentita.

Per saperne di più, consulta Consentire la connettività del piano di controllo.

Utilizzare lo strumento di controllo della registrazione dei nodi per risolvere i problemi relativi alla registrazione dei nodi

Per i pool di nodi creati in GKE versione 1.24.0-gke.100 o successive, un'utilità denominata Controllo registrazione dei nodi viene eseguita sulle istanze appena create e verifica se l'istanza ha completato correttamente i passaggi di registrazione dei nodi.

Quando la registrazione del nodo non va a buon fine, l'utilità genera un report di riepilogo in cui puoi vedere quali prerequisiti non sono stati soddisfatti in base al punto del processo in cui l'istanza non è riuscita.

Utilizza le istruzioni nella sezione seguente per trovare un'istanza la cui registrazione dei nodi non è riuscita e utilizza il riepilogo di Controllo registrazione nodi per scoprire perché l'operazione non è riuscita.

Se non riesci a utilizzare lo strumento Controllo registrazione dei nodi nel pool di nodi, consulta Risolvere i problemi di registrazione dei nodi senza Controllo registrazione dei nodi.

Trovare un'istanza che non ha superato la registrazione dei nodi

Se una o più istanze non vengono registrate come nodi con il piano di controllo del cluster GKE, puoi visualizzare il numero di istanze con errori nel messaggio di errore mostrato nella pagina Dettagli cluster della console Google Cloud. Se più istanze non vengono registrate contemporaneamente, il motivo potrebbe essere lo stesso. Per questo motivo, puoi utilizzare una delle istanze con errori per verificare il motivo dell'errore.

Tuttavia, poiché le istanze non sono state registrate come nodi GKE, devi utilizzare le seguenti istruzioni per trovare i nomi delle VM di Compute Engine sottostanti la cui registrazione non è riuscita.

  1. Nella console Google Cloud, vai alla pagina Esplora log:

    Vai a Esplora log

  2. Usa il seguente filtro di log per trovare i log di creazione delle istanze VM:

    resource.type="gce_instance"
    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
    protoPayload.requestMetadata.callerSuppliedUserAgent="GCE Managed Instance Group for GKE"
    protoPayload.response.status="RUNNING"
    

    Sostituisci PROJECT_ID con l'ID progetto del tuo cluster.

  3. Utilizza l'istogramma sotto il filtro di log per restringere l'intervallo di tempo al momento della creazione del nodo.

  4. Fai clic su uno dei log visualizzati in Risultati query, poi fai clic su Espandi campi nidificati per visualizzare ulteriori dettagli.

  5. Trova il campo protoPayload.resourceName. L'ultima parte del percorso è il nome dell'istanza. I nomi delle istanze seguono un formato che inizia con il nome del cluster e il nome del pool di nodi, ad esempio:

    gke-cluster-1-default-pool-b0ac62d3-9g1v è un'istanza per il pool di nodi default-pool in gke-cluster-1.

  6. Nella console Google Cloud, vai alla pagina Istanze VM di Compute Engine:

    Vai a Istanze VM

    Trova il nome dell'istanza VM utilizzando il filtro. Fai clic per ulteriori dettagli.

Risolvi i problemi di un'istanza con lo strumento di controllo della registrazione dei nodi

Dopo aver trovato il nome dell'istanza la cui registrazione non è riuscita, puoi scoprire perché l'operazione non è riuscita utilizzando lo strumento Controllo registrazione dei nodi.

Nella scheda Dettagli dell'istanza VM, nella sezione Log, fai clic su Porta seriale 1 (console).

Per i pool di nodi creati in GKE versione 1.24.0-gke.100 o successive, l'output per le istanze appena create include quanto segue, a indicare che lo strumento di controllo della registrazione dei nodi è stato avviato:

** Starting Node Registration Checker **
** Loading variables from kube-env **
** Sleeping for 7m to allow registration to complete  **

Se la registrazione del nodo ha esito positivo, l'output include i seguenti messaggi:

** Node ready and registered. **
** Completed running Node Registration Checker **

Se non vedi questi messaggi, la registrazione del nodo non è riuscita e lo strumento di controllo della registrazione dei nodi ha generato un report in cui viene riepilogato il motivo della registrazione non riuscita. Per visualizzare il riepilogo, cerca il seguente messaggio aggiuntivo:

** Here is a summary of the checks performed: **

Sotto questo messaggio, cerca una tabella simile alla seguente:

------------------------------
Service    DNS      Reachable
------------------------------
LOGGING    true     true
GCR        true     true
GCS        true     true
Master     N/A      false
------------------------------

Se LOGGING, GCR o GCS sono elencati come non raggiungibili, controlla le Autorizzazioni dell'account di servizio per la registrazione dei nodi e Connessione di rete alle API e ai servizi Google per la registrazione dei nodi.

Se Master risulta non raggiungibile, controlla i prerequisiti per Connessione di rete con il piano di controllo per la registrazione dei nodi.

Dopo aver risolto tutti i problemi che impediscono la corretta registrazione dei nodi, consulta Completare la registrazione del nodo dopo aver risolto la causa principale.

Se i passaggi precedenti non indicano il motivo per cui la registrazione del nodo non è riuscita, consulta Raccogliere informazioni per ulteriori indagini.

Risolvi i problemi di registrazione dei nodi senza lo strumento di controllo della registrazione dei nodi

Se la registrazione dei nodi non è riuscita in un pool di nodi creato su una versione di GKE precedente alla 1.24.0-gke.100, puoi risolvere manualmente i problemi relativi alla registrazione dei nodi. Se il pool di nodi è stato creato su GKE versione 1.24.0-gke.100 o successiva, segui le istruzioni per utilizzare lo strumento di controllo della registrazione dei nodi per risolvere i problemi relativi alla registrazione dei nodi.

Dopo aver risolto tutti i problemi che impediscono la corretta registrazione del nodo, segui le istruzioni riportate di seguito per completare la registrazione del nodo dopo aver risolto la causa principale.

Se nessuno dei passaggi di indagine in questa pagina indica il motivo per cui la registrazione del nodo non è riuscita, consulta Raccogliere informazioni per ulteriori indagini.

Controlla le autorizzazioni dell'account di servizio per la registrazione dei nodi

L'account di servizio utilizzato dai nodi deve avere le autorizzazioni prerequisito per la registrazione dei nodi. Segui queste istruzioni per verificare di soddisfare questi prerequisiti:

  1. Trova un'istanza che non ha superato la registrazione dei nodi.

  2. Nella scheda Dettagli dell'istanza VM, nella sezione Gestione di API e identità, trova il nome dell'account di servizio nel campo Account di servizio. Se il nodo utilizzava l'account di servizio predefinito di Compute Engine, il nome sarà nel formato PROJECT_NUMBER-compute@developer.gserviceaccount.com. Questo account di servizio deve disporre delle autorizzazioni minime richieste.

  3. Verifica la presenza di indicatori di registrazione riuscita nell'output della console seriale. Nella scheda Dettagli dell'istanza VM, nella sezione Log, fai clic su Porta seriale 1 (console).

    Se l'istanza ha utilizzato un account di servizio con le autorizzazioni corrette, l'output include quanto segue:

    • Started Download and install k8s binaries and configurations
    • Started Docker Application Container Engine.
    • Started Configure kubernetes node.
    • Reached target Kubernetes.

    Questi messaggi saranno disponibili in punti diversi dell'output. Possono anche includere timestamp o altri artefatti che li interrompono, come questo: Starting [0;1;39mConfigure kubernetes node. Se vedi tutti questi messaggi, significa che i prerequisiti dell'account di servizio sono stati soddisfatti.

    Se non vedi questi messaggi, l'account di servizio assegnato all'istanza VM potrebbe essere stato eliminato, disabilitato o non disporre delle autorizzazioni corrette.

Verifica la connessione di rete alle API e ai servizi Google per la registrazione dei nodi

Verifica la connessione con accesso SSH

Se hai accesso SSH alle istanze VM nel tuo progetto, puoi anche verificare che l'istanza VM disponga di una connessione di rete alle API e ai servizi Google.

  1. Trova un'istanza che non ha superato la registrazione dei nodi.

  2. Nella scheda Dettagli dell'istanza VM, fai clic su SSH.

  3. Dopo aver effettuato la connessione alla riga di comando dell'istanza VM, esegui questo comando per verificare la connessione alle API e ai servizi Google:

    curl -m 5 -v https://storage.googleapis.com/generate_204
    

    Se la connessione ha esito positivo, l'output è simile al seguente:

    *   Trying 142.250.148.128:443...
    * Connected to storage.googleapis.com (142.250.148.128) port 443 (#0)
    
    ...
    
    < HTTP/1.1 204 No Content
    < Content-Length: 0
    < Cross-Origin-Resource-Policy: cross-origin
    < Date: Wed, 04 Jan 2023 00:58:41 GMT
    <
    * Connection #0 to host storage.googleapis.com left intact
    

    Se la connessione non va a buon fine, l'output è simile al seguente:

    *   Trying 142.250.148.128:443...
    * Connection timed out after 5000 milliseconds
    * Closing connection 0
    curl: (28) Connection timed out after 5000 milliseconds```
    

    Se la connessione scade e l'indirizzo IP restituito rientra nell'intervallo di indirizzi IP 199.36.153.0/24, verifica che il cluster abbia soddisfatto i requisiti di rete per la connessione alle API e ai servizi Google. Se la connessione scade e l'indirizzo IP restituito non rientra nell'intervallo di indirizzi IP indicato, verifica la presenza di regole firewall che bloccano il traffico in uscita o route configurate in modo errato nella rete VPC del cluster.

    Tieni aperta la connessione SSH all'istanza VM e vai alla sezione successiva.

Verifica la connessione senza accesso SSH utilizzando Connectivity Tests

Se non hai accesso SSH alle istanze VM, utilizza i test di connettività per verificare che l'istanza VM abbia una connessione alle API e ai servizi Google.

  1. Trova un'istanza che non ha superato la registrazione dei nodi.

  2. Crea ed esegui test di connettività con l'istanza VM come Origine e storage.googleapis.com TCP/443 come Destinazione.

    Utilizza i risultati del test per verificare la configurazione di networking del cluster.

Verifica la connessione di rete con il piano di controllo per la registrazione dei nodi

Se hai accesso SSH alle istanze VM nel tuo progetto, puoi verificare se l'istanza VM ha una connessione di networking al piano di controllo del cluster.

  1. Trova un'istanza che non ha superato la registrazione dei nodi.

  2. Nella scheda Dettagli dell'istanza VM, fai clic su SSH.

  3. Dopo aver eseguito la connessione alla riga di comando dell'istanza VM, salva l'endpoint del piano di controllo del cluster come variabile di ambiente:

    source <(sudo grep KUBERNETES_MASTER_NAME /home/kubernetes/kube-env)
    
  4. Invia una richiesta GET all'endpoint del piano di controllo:

    curl -k -m 5  https://${KUBERNETES_MASTER_NAME}/version
    

    Se l'output è simile al seguente, l'istanza VM può stabilire una connessione con il piano di controllo:

    {
    "major": "1",
    "minor": "24",
    "gitVersion": "v1.24.7-gke.900",
    "gitCommit": "e35c4457f66187eff006dda6d2c0fe12144ef2ec",
    "gitTreeState": "clean",
    "buildDate": "2022-10-26T09:25:34Z",
    "goVersion": "go1.18.7b7",
    "compiler": "gc",
    "platform": "linux/amd64"
    }
    

    Se l'output è simile al seguente, l'istanza VM non può stabilire una connessione con il piano di controllo:

    curl: (28) Connection timed out after 5000 milliseconds
    

Se l'istanza VM non riesce a stabilire una connessione con il piano di controllo, consulta la sezione su come consentire la connettività del piano di controllo nelle best practice per il networking di GKE.

Completa la registrazione del nodo dopo aver risolto la causa principale

Una volta risolto il problema che blocca la registrazione del nodo, la procedura dipende dal contesto dell'errore:

  • Se la registrazione del nodo non è riuscita durante la creazione del cluster, elimina il cluster e riprova.
  • Se la registrazione del nodo non è riuscita durante lo scale up con il gestore della scalabilità automatica dei cluster, attendi che le istanze VM provino a registrarsi di nuovo.
  • Se la registrazione del nodo non è riuscita durante la creazione del pool di nodi:
    • Se le istanze VM sono state create, attendi che le istanze VM provino a registrarsi di nuovo.
    • Se le istanze VM non sono state create, elimina il pool di nodi e riprova.
  • Se la registrazione del nodo non è riuscita durante il ridimensionamento del cluster, esegui nuovamente il comando per aumentare le dimensioni del cluster.
  • Se la registrazione del nodo non è riuscita al di fuori dell'ambito di un'operazione, ad esempio durante un'operazione di riparazione, attendi che le istanze VM provino a registrarsi di nuovo.

Raccogliere informazioni per effettuare ulteriori indagini

Se non sei in grado di risolvere il problema di registrazione del nodo, puoi raccogliere informazioni aggiuntive per facilitare l'indagine dell'assistenza clienti Google Cloud utilizzando le seguenti istruzioni. Questi passaggi richiedono l'accesso SSH alle istanze VM nel progetto e l'utilizzo dell'utilità sosreport, inclusa nelle immagini COS.

  1. Trova un'istanza che non ha superato la registrazione dei nodi.

  2. Raccogliere informazioni di debug utilizzando sosreport.

    In alternativa, se l'utilità sosreport non è stata scaricata sui nodi e questa non può essere installata, raccogli manualmente le informazioni di debug eseguendo i comandi seguenti:

    sudo journalctl -u cloud-init-local
    sudo journalctl -u cloud-init
    sudo journalctl -u cloud-final
    sudo journalctl -u cloud-config
    systemctl status kubelet
    journalctl -u kubelet
    systemctl status kube-node-installation.service
    systemctl status kube-node-configuration.service
    journalctl -u kube-node-installation.service --no-pager
    journalctl -u kube-node-configuration.service --no-pager
    journalctl -u kubelet.service --no-pager
    
  3. Includi queste informazioni in un file ZIP e includile quando invii una richiesta di assistenza all'assistenza clienti Google Cloud.

Passaggi successivi

Se hai bisogno di ulteriore aiuto, contatta l'assistenza clienti Google Cloud.