Questo documento descrive come risolvere i problemi riscontrati durante l'aggiunta di nodi al cluster Google Kubernetes Engine (GKE) Standard. Alcuni degli scenari in cui si verificano questi problemi includono la creazione di cluster e di pool di nodi e durante gli eventi di scale up.
Per risolvere i problemi relativi ai cluster GKE Autopilot, consulta la sezione Risoluzione dei problemi dei cluster Autopilot.
Informazioni sulla registrazione dei nodi
I nodi sono istanze VM di Compute Engine che GKE crea per tuo conto. Quando viene aggiunto un nuovo nodo a un cluster GKE, deve essere registrato con il control plane del cluster. Questo processo, chiamato registrazione del nodo o bootstrap del nodo, si verifica quando viene creato un nodo.
Quando si verifica la registrazione del nodo
La registrazione dei nodi si verifica ogni volta che vengono creati nodi, inclusi i seguenti scenari:
- Crei un cluster.
- Crea un node pool.
- GKE crea un pool di nodi con il provisioning automatico dei nodi.
- Gestore della scalabilità automatica dei cluster aumenta le dimensioni del cluster.
- Ridimensiona il cluster.
- La riparazione automatica dei nodi crea un nuovo nodo.
La procedura di registrazione del nodo segue questi passaggi:
- Il conteggio dei nodi impostato per il pool di nodi viene replicato nei gruppi di istanze gestite (MIG).
- I gruppi di istanze gestite creano il numero richiesto di istanze VM.
Per ogni istanza VM creata:
- L'istanza VM si avvia.
- L'istanza VM configura e installa i pacchetti necessari per essere eseguita come nodo Kubernetes.
- kubelet ora in esecuzione sull'istanza VM comunica con il server API del piano di controllo per registrarsi come nodo.
Messaggio di errore di registrazione del nodo
Quando GKE tenta di aggiungere nodi al cluster, nella console Google Cloud viene visualizzato il seguente errore 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 sezioni seguenti descrivono alcune delle potenziali cause di questo errore.
Prerequisiti per la registrazione corretta del nodo
La registrazione dei nodi a un cluster GKE dipende da fattori come i seguenti:
- 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 è 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 significa 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 service account
Ai nodi GKE è associato un account di servizio IAM. Per impostazione predefinita, questo service account è l'account di servizio predefinito di Compute Engine. Per proteggere il cluster, ti consigliamo di utilizzare un service account IAM personalizzato con le autorizzazioni minime richieste.
Questo account di servizio deve disporre delle autorizzazioni corrette per l'inizializzazione delle istanze VM come nodi GKE. Se elimini il service account, lo disattivi o non gli concedi le autorizzazioni corrette, la registrazione del nodo potrebbe non riuscire.
Prerequisiti per la connessione di rete alle API e ai servizi Google
L'istanza VM scarica i pacchetti per prepararsi a essere eseguita come nodo GKE e un timeout di connessione potrebbe significare che il cluster non soddisfa i requisiti di rete necessari per connettersi alle API e ai servizi Google, ad esempio 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 disporre di regole firewall e route nella rete Virtual Private Cloud (VPC) del cluster che consentono la connessione.
Prerequisiti per la connessione di rete con il control plane
La connettività tra il control plane e i nodi è fondamentale per la registrazione dei nodi e il funzionamento 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 control plane.
Per ulteriori informazioni, consulta Consentire la connettività del control plane.
Utilizzare lo strumento di controllo della registrazione dei nodi per risolvere i problemi di registrazione dei nodi
L'utilità Node Registration Checker viene eseguita sulle istanze appena create e controlla se l'istanza ha completato correttamente i passaggi di registrazione del nodo.
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.
Segui le istruzioni nella sezione seguente per trovare un'istanza in cui la registrazione dei nodi non è riuscita e utilizza il riepilogo di Node Registration Checker per scoprire perché non è riuscita.
Trovare un'istanza in cui la registrazione del nodo non è riuscita
Quando una o più istanze non riescono a registrarsi come nodi con il control plane del cluster GKE, puoi visualizzare il numero di istanze non riuscite dal messaggio di errore mostrato nella pagina Dettagli cluster della console Google Cloud . Quando più istanze non riescono a registrarsi contemporaneamente, il motivo potrebbe essere lo stesso. 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, devi utilizzare le seguenti istruzioni per trovare i nomi delle VM Compute Engine sottostanti che non sono state registrate.
Nella console Google Cloud , vai alla pagina Esplora log:
Utilizza il seguente filtro dei 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 cluster.Utilizza l'istogramma sotto il filtro dei log per restringere l'intervallo di tempo a quando avrebbe dovuto verificarsi la creazione del nodo.
Fai clic su uno dei log visualizzati in Risultati delle query, quindi fai clic su Espandi campi nidificati per visualizzare ulteriori dettagli.
Trova il campo
protoPayload.resourceName
. L'ultima parte del percorso elencato è il nome dell'istanza. I nomi delle istanze seguono un formato che inizia con il nome del cluster e il nome delpool di nodil, ad esempio:gke-cluster-1-default-pool-b0ac62d3-9g1v
è un'istanza per il pool di nodidefault-pool
ingke-cluster-1
.Nella console Google Cloud , vai alla pagina Istanze VM di Compute Engine:
Trova il nome dell'istanza VM utilizzando il filtro. Fai clic per maggiori dettagli.
Risolvere i problemi relativi a un'istanza con Node Registration Checker
Dopo aver trovato il nome dell'istanza la cui registrazione non è riuscita, puoi analizzare il motivo del problema 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).
L'output per le istanze appena create include quanto segue, a indicare che è stato avviato 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 Node Registration Checker ha generato un report che riassume il motivo per cui la registrazione non è riuscita. 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 elencati 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
è elencato come 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 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.
Risolvere i problemi di registrazione dei nodi senza lo strumento di controllo della registrazione dei nodi
Utilizza questi passaggi solo come ultima risorsa se hai già controllato i prerequisiti per la registrazione corretta dei nodi e provato lo strumento di controllo della registrazione dei nodi.
Dopo aver risolto tutti i problemi che impediscono la registrazione del nodo, completa la registrazione del nodo dopo aver risolto la causa principale.
Se nessuno dei passaggi di indagine in questa pagina ti indica il motivo per cui la registrazione del nodo non è riuscita, consulta Raccogliere informazioni per ulteriori indagini.
Controlla le autorizzazioni del account di servizio per la registrazione dei nodi
Il account di servizio utilizzato dai nodi deve disporre delle autorizzazioni prerequisito per la registrazione dei nodi. Segui queste istruzioni per verificare di aver soddisfatto questi prerequisiti:
Trova un'istanza in cui la registrazione del nodo non è riuscita.
Nella scheda Dettagli dell'istanza VM, nella sezione Gestione API e identità, trova il nome dell'account di servizio nel campo Account di servizio. Se il nodo utilizzava il account di servizio Compute Engine predefinito, il nome segue il formato
PROJECT_NUMBER-compute@developer.gserviceaccount.com
. Questo account di servizio deve disporre delle autorizzazioni minime richieste.Controlla 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 utilizzava 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 trovano in posizioni diverse in questo output. Potrebbero anche essere interrotti da timestamp o altri artefatti, come in questo esempio:
Starting [0;1;39mConfigure kubernetes node
. Se visualizzi tutti questi messaggi, i prerequisiti del account di servizio sono stati soddisfatti.Se non vedi questi messaggi, il 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 l'accesso SSH
Se hai l'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.
Trova un'istanza in cui la registrazione del nodo non è riuscita.
Nella scheda Dettagli dell'istanza VM, fai clic su SSH.
Dopo aver eseguito la connessione alla riga di comando per l'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 viene stabilita, 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 viene stabilita, 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 soddisfi 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 menzionato, controlla se sono presenti regole firewall che bloccano il traffico in uscita o route configurate in modo errato nella rete VPC del cluster.Mantieni aperta la connessione SSH all'istanza VM e procedi alla sezione successiva.
Verifica la connessione senza accesso SSH utilizzando Connectivity Tests
Se non hai accesso SSH alle istanze VM, utilizza Test di connettività per verificare che l'istanza VM abbia una connessione alle API e ai servizi Google.
Trova un'istanza in cui la registrazione del nodo non è riuscita.
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 controllare la configurazione di rete del cluster.
Verifica la connessione di rete con il control plane 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 rete al control plane del cluster.
Trova un'istanza in cui la registrazione del nodo non è riuscita.
Nella scheda Dettagli dell'istanza VM, fai clic su SSH.
Dopo aver effettuato la connessione alla riga di comando per l'istanza VM, salva l'endpoint del control plane del cluster come variabile di ambiente:
source <(sudo grep KUBERNETES_MASTER_NAME /home/kubernetes/kube-env)
Invia una richiesta
GET
all'endpoint del control plane:curl -k -m 5 https://${KUBERNETES_MASTER_NAME}/version
Se l'output è simile al seguente, l'istanza VM può stabilire una connessione con il control plane:
{ "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 control plane:
curl: (28) Connection timed out after 5000 milliseconds
Se l'istanza VM non riesce a stabilire una connessione con il control plane, consulta la sezione relativa all'autorizzazione della connettività del control plane nelle best practice di networking GKE.
Completa la registrazione del nodo dopo aver risolto la causa principale
Dopo aver risolto il problema che blocca la registrazione del nodo, la procedura da seguire 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 del cluster, attendi che le istanze VM tentino di registrarsi di nuovo.
- Se la registrazione del nodo non è riuscita durante la creazione pool di nodi:
- Se le istanze VM sono state create, attendi che 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 di nuovo 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 tentino di registrarsi di nuovo.
Raccogliere informazioni per ulteriori indagini
Se non riesci a risolvere il problema di registrazione del nodo, puoi raccogliere
informazioni aggiuntive per facilitare l'indagine dell'assistenza clienti Google Cloud seguendo le
istruzioni riportate di seguito. Questi passaggi richiedono l'accesso SSH alle istanze VM
nel tuo progetto e utilizzano l'utilità sosreport
, inclusa nelle immagini COS.
Trova un'istanza in cui la registrazione del nodo non è riuscita.
Raccogli informazioni di debug utilizzando sosreport.
In alternativa, se sui nodi non è stata scaricata l'utilità
sosreport
e non è possibile installarla, raccogli manualmente le informazioni di debug eseguendo i seguenti comandi:sudo journalctl -u cloud-init-local --no-pager sudo journalctl -u cloud-init --no-pager sudo journalctl -u cloud-final --no-pager sudo journalctl -u cloud-config --no-pager sudo systemctl status kubelet sudo journalctl -u kubelet --no-pager sudo systemctl status kube-node-installation.service sudo journalctl -u kube-node-installation.service --no-pager sudo systemctl status kube-node-configuration.service sudo journalctl -u kube-node-configuration.service --no-pager
Comprimi queste informazioni in un file ZIP e includile quando invii una richiesta di assistenza all'assistenza clienti Google Cloud.
Passaggi successivi
Se non riesci a trovare una soluzione al tuo problema nella documentazione, consulta la sezione Richiedere assistenza per ulteriore aiuto, inclusi consigli sui seguenti argomenti:
- Aprire una richiesta di assistenza contattando l'assistenza clienti cloud.
- Ricevere assistenza dalla community
ponendo domande su StackOverflow e utilizzando il tag
google-kubernetes-engine
per cercare problemi simili. Puoi anche unirti al canale Slack#kubernetes-engine
per ulteriore assistenza della community. - Apertura di bug o richieste di funzionalità utilizzando lo strumento di monitoraggio dei problemi pubblico.