Risolvere i problemi di registrazione dei nodi


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

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

Se hai bisogno di ulteriore assistenza, contatta Assistenza clienti Google Cloud.

Informazioni sulla registrazione dei nodi

I nodi sono le istanze VM di Compute Engine create da GKE per conto tuo. Quando un nuovo nodo viene aggiunto a un cluster GKE, deve essere registrato nel piano di controllo del cluster. Questa procedura, chiamata registrazione del nodo o bootstrap del nodo, si verifica quando viene creato un nodo.

Quando avviene la registrazione del nodo

La registrazione dei nodi avviene ogni volta che vengono creati, 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 ai 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. Viene avviata l'istanza VM.
    2. L'istanza VM configura e installa i pacchetti necessari da eseguire 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 della registrazione del nodo

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

  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 nel cluster. Le seguenti sezioni descrivono alcune delle potenziali cause di questo errore.

Prerequisiti per la registrazione dei nodi

La registrazione riuscita dei nodi a un cluster GKE dipende da fattori come:

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

Prerequisiti per la creazione di istanze

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

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

La creazione dell'istanza non riuscita indica che nell'intervallo di tempo durante il quale GKE ha tentato di creare l'istanza da registrare come nodo GKE mancano i log per la creazione dell'istanza perché le istanze non sono mai state create. Per verificare la presenza di log mancanti, consulta le istruzioni per trovare un'istanza in cui la registrazione del nodo non è riuscita.

Autorizzazioni account di servizio

I nodi GKE sono associati a un account di servizio IAM con loro. Per impostazione predefinita, questo account di servizio è Compute Engine servizio predefinito Google Cloud. Per rafforzare il cluster, consigliamo di utilizzare un account di servizio IAM personalizzato con le autorizzazioni minime richieste.

Questo account di servizio deve disporre delle autorizzazioni corrette per le istanze VM come nodi GKE. Se elimini il servizio disabilitarlo o non concedergli le autorizzazioni corrette, potrebbe non andare a buon fine.

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

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

A seconda della connessione di rete, consentire questa connessione potrebbe significare configurare l'accesso privato Google. o con regole firewall e route nella rete VPC (Virtual Private Cloud) del tuo cluster che consente la connessione.

Prerequisiti per la connessione di rete con il control plane

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

Per maggiori informazioni, consulta Consentire la connettività del piano di controllo.

Utilizza lo strumento di controllo della registrazione dei nodi per risolvere i problemi di registrazione dei nodi

Per i pool di nodi creati su GKE versione 1.24.0-gke.100 o successive, viene un'utilità di controllo della registrazione dei nodi, che viene eseguita sulle istanze appena create verifica se l'istanza ha completato correttamente la procedura di registrazione del nodo.

Quando la registrazione del nodo non riesce, 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 con errore registrazione dei nodi e usa il riepilogo dello strumento di controllo della registrazione dei nodi per scoprire i motivi non riuscito.

Se non riesci a utilizzare il controllo della registrazione dei nodi nel pool di nodi, consulta Risolvi i problemi di registrazione dei nodi senza lo strumento di controllo della registrazione dei nodi.

Trovare un'istanza in cui la registrazione del nodo non è riuscita

Quando una o più istanze non riescono a registrarsi come nodi nel piano di controllo del tuo cluster GKE, puoi vedere il numero di istanze che non sono riuscite dal messaggio di errore visualizzato nella pagina Dettagli cluster della console Google Cloud. Quando si verificano più istanze la mancata registrazione in una sola volta, potrebbe essere per lo stesso motivo di base. Per questo motivo, puoi utilizzare una delle istanze non riuscite per esaminare il motivo per cui tutte le istanze non sono riuscite.

Tuttavia, poiché le istanze non sono state registrate come nodi GKE, seguire le istruzioni riportate di seguito per trovare i nomi dei componenti VM di Compute Engine la cui registrazione non è riuscita.

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

    Vai a Esplora log

  2. Utilizza il seguente filtro di log per trovare i log della creazione dell'istanza 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 in un cluster Kubernetes.

  3. Utilizza l'istogramma sotto il filtro dei log per restringere l'intervallo di tempo al momento in cui dovrebbe essere avvenuta la creazione del nodo.

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

  5. Trova il campo protoPayload.resourceName. La parte finale del percorso elencato è il nome dell'istanza. I nomi delle istanze hanno un formato inizia con il nome del cluster e il nome del pool di nodi, esempio:

    gke-cluster-1-default-pool-b0ac62d3-9g1v è un'istanza per 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.

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

Dopo aver individuato il nome dell'istanza che non è stata registrata, puoi scoprire perché non è riuscito utilizzando lo strumento di controllo della 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 su GKE versione 1.24.0-gke.100 o successive, l'output per le istanze appena create include quanto segue, per indicare che è iniziato il controllo della registrazione dei nodi:

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

Se la registrazione del nodo va a buon fine, 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 che riassume il motivo della mancata registrazione. Cerca il seguente messaggio aggiuntivo per visualizzare il riepilogo:

** 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 indicati come non raggiungibili, controlla le autorizzazioni dell'account di servizio per la registrazione dei nodi e la connessione di rete alle API e ai servizi Google per la registrazione dei nodi.

Se Master non è raggiungibile, controlla i prerequisiti per la connessione di rete con il control plane per la registrazione dei nodi.

Dopo aver risolto tutti i problemi che impediscono la registrazione del nodo, consulta Completa la registrazione del nodo dopo aver corretto la causa principale.

Se i passaggi precedenti non indicano il motivo dell'errore di registrazione del nodo, consulta Raccogliere informazioni per ulteriori accertamenti.

Risolvere 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 un cluster GKE precedente alla 1.24.0-gke.100, puoi risolvere i problemi solo manualmente registrazione. Se il pool di nodi è stato creato su GKE 1.24.0-gke.100 o versioni successive, segui le istruzioni per utilizzare lo strumento di controllo della registrazione dei nodi per risolvere i problemi di registrazione dei nodi.

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

Se nessuno dei passaggi di indagine in questa pagina indica il motivo della mancata registrazione del nodo, consulta Raccogliere informazioni per ulteriori accertamenti.

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

L'account di servizio utilizzato dai tuoi nodi deve disporre delle autorizzazioni di prerequisito per la registrazione dei nodi. Segui queste istruzioni per verificare di aver soddisfatto questi prerequisiti:

  1. Individua un'istanza la cui registrazione del nodo non è riuscita.

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

  3. Verifica la presenza degli 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 si troveranno in posizioni diverse in questo output. Potrebbero anche avere timestamp o altri elementi e interromperle, in questo modo: 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, disattivato o non disporre delle autorizzazioni corrette.

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

Controlla la connessione con accesso SSH

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

  1. Trova un'istanza in cui la registrazione del nodo non è riuscita.

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

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

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

    Se la connessione è riuscita, 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 nella Intervallo di indirizzi IP 199.36.153.0/24, verifica che il cluster abbia soddisfatto 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, controlla se esistono regole firewall che bloccano il traffico in uscita o route configurati in modo errato nella rete VPC del cluster.

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

Controlla la connessione senza accesso SSH utilizzando Connectivity Tests

Se non hai accesso SSH alle istanze VM, utilizza Connectivity Tests per verificare che l'istanza VM abbia una connessione alle API e ai servizi Google.

  1. Trova un'istanza in cui la registrazione del nodo non è riuscita.

  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 rete del cluster.

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

Se disponi dell'accesso SSH alle istanze VM nel progetto, puoi controllare se l'istanza VM ha un servizio di networking connessione al piano di controllo del cluster.

  1. Trova un'istanza in cui la registrazione del nodo non è riuscita.

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

  3. Dopo aver effettuato la connessione alla riga di comando per l'istanza VM, salva 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ò stabilisci 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 relativa alla possibilità di consentire la connettività del piano di controllo nelle Best practice di rete GKE.

Completa la registrazione del nodo dopo aver risolto la causa principale

Una volta risolto il problema che blocca la registrazione dei nodi, la procedura da seguire dipende dal contesto dell'errore:

  • Se la registrazione dei nodi non è riuscita durante la creazione del cluster, elimina il cluster e riprova.
  • Se la registrazione dei nodi non è riuscita durante lo scale up con il gestore della scalabilità automatica dei cluster, attendi le istanze VM per provare a registrarle 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 e registrati 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 aumenta 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 riprovino a registrarsi.

Raccogliere informazioni per ulteriori accertamenti

Se non sei in grado di risolvere il problema di registrazione del nodo, puoi raccogliere informazioni aggiuntive per agevolare le indagini dell'assistenza clienti Google Cloud con quanto segue istruzioni. Questi passaggi richiedono l'accesso SSH alle istanze VM nel tuo progetto e utilizza l'utilità sosreport, inclusa nelle immagini COS.

  1. Individua un'istanza la cui registrazione del nodo non è riuscita.

  2. Raccogliere le informazioni di debug utilizzando sosreport.

    In alternativa, se nei tuoi nodi non è stata scaricata l'utilità sosreport e non è possibile installarla, raccogli le informazioni di debug manualmente eseguendo i seguenti comandi:

    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. Raggruppa 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 assistenza, contatta l'assistenza clienti Google Cloud.