Ridimensionamento di un cluster utente

Questa pagina descrive come ridimensionare un cluster utente GKE On-Prem. Il ridimensionamento di un cluster utente comporta l'aggiunta o la rimozione di nodi da tale cluster. La rimozione dei nodi da un cluster deve rilasciare gli indirizzi IP del cluster, rendendoli disponibili per l'utilizzo da parte di altri nodi. Per aggiungere nodi è necessario che gli indirizzi IP siano disponibili per tali nodi.

Per ridimensionare un cluster utente, modifica i campi replicas nella sezione nodePools del file di configurazione ed esegui il deployment di tali modifiche nel cluster esistente con il comando gkectl update cluster.

Per informazioni sui limiti massimo e minimo per i cluster utente, consulta Quote e limiti.

Per informazioni sulla gestione dei pool di nodi con gkectl update cluster, consulta la sezione relativa alla creazione e gestione dei pool di nodi.

Verifica che siano disponibili indirizzi IP sufficienti

Se aggiungi nodi aggiuntivi a un cluster, assicurati che il cluster abbia un numero di indirizzi IP sufficiente. La verifica di disporre di indirizzi IP sufficienti dipende dal fatto che il cluster utilizzi un server DHCP o IP statici.

DHCP

Se il cluster utilizza DHCP, verifica che il server DHCP nella rete in cui sono creati i nodi abbia un numero sufficiente di indirizzi IP. Dovrebbero esserci più indirizzi IP di quanti sono i nodi in esecuzione nel cluster utente.

IP statici

Se il cluster utilizza IP statici, l'esecuzione di gkectl update cluster verifica innanzitutto se hai allocato un numero sufficiente di indirizzi IP nel cluster. In caso contrario, puoi trovare il numero di indirizzi IP aggiuntivi necessari per l'operazione di aggiornamento nel messaggio di errore.

Se devi aggiungere altri indirizzi IP al cluster utente, esegui i passaggi seguenti:

  1. Apri il file hostconfig del cluster utente per modificarlo.

  2. Per visualizzare gli indirizzi riservati a un cluster utente:

    kubectl get cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] 
    -n [USER_CLUSTER_NAME] [USER_CLUSTER_NAME] -o yaml

dove:

  • [ADMIN_CLUSTER_KUBECONFIG] indica a kubectl di utilizzare la versione kubeconfig di cluster di amministrazione, utilizzata per visualizzare e/o modificare le configurazioni dei cluster utente.
  • -n [USER_CLUSTER_NAME] indica a kubectl di cercare uno spazio dei nomi chiamato in base al cluster utente.
  • [USER_CLUSTER_NAME] -o yaml indica a kubectl il cluster utente in cui esegui il comando. -o yaml mostra la configurazione del cluster utente.
  1. Se uno qualsiasi degli indirizzi riservati per un cluster utente è incluso nel file hostconfig, aggiungilo al blocco corrispondente in base a netmask e gateway.

  2. Aggiungi il numero di indirizzi IP statici aggiuntivi necessari al blocco corrispondente, quindi esegui gkectl update cluster.

Di seguito è riportato un esempio di file hostconfig con i quattro blocchi IP statici evidenziati:

hostconfig:
  dns: 172.16.255.1
  tod: 216.239.35.0
blocks:
- netmask: 255.255.248.0
  gateway: 21.0.135.254
  ips:
    - ip: 21.0.133.41
      hostname: user-node-1
    - ip: 21.0.133.50
      hostname: user-node-2
    - ip: 21.0.133.56
      hostname: user-node-3
    - ip: 21.0.133.47
      hostname: user-node-4

Ridimensionamento di un cluster utente

A partire dalla versione 1.5.0, ridimensiona un cluster modificando i campi replicas nella sezione nodePools del file di configurazione ed eseguendo il deployment di tali modifiche nel cluster esistente con il comando gkectl update cluster.

Verifica ridimensionamento

Per verificare che il ridimensionamento sia riuscito, esegui:

kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] get nodes
kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] describe machinedeployments [NODE_POOL_NAME] | grep Replicas

dove [USER_CLUSTER_KUBECONFIG] è il file kubeconfig del cluster utente. Il numero di nodi che hai scelto deve essere indicato in questo output'

Risolvere i problemi

Per ulteriori informazioni, consulta la sezione Risoluzione dei problemi.

Ridimensionamento di un cluster utente non riuscito

Sintomi

Un'operazione di ridimensionamento di un cluster utente non riuscita.

Potenziali cause

L'esito negativo delle operazioni di ridimensionamento potrebbe essere diverso.

Risoluzione

Se il ridimensionamento non riesce, segui questi passaggi:

  1. Controlla lo stato MachineDeployment del cluster per verificare se sono presenti eventi o messaggi di errore:

    kubectl describe machinedeployments [MACHINE_DEPLOYMENT_NAME]
  2. Verifica se sono presenti errori nelle macchine appena create:

    kubectl describe machine [MACHINE_NAME]

Errore: "Impossibile assegnare indirizzi".

Sintomi

Dopo aver ridimensionato un cluster utente, kubectl describe machine [MACHINE_NAME] visualizza il seguente errore:

Events:
   Type     Reason  Age                From                    Message
   ----     ------  ----               ----                    -------
   Warning  Failed  9s (x13 over 56s)  machineipam-controller  ipam: no addresses can be allocated
   
Potenziali cause

Non sono disponibili indirizzi IP sufficienti per il cluster utente.

Risoluzione

Assegna più indirizzi IP per il cluster. Quindi, elimina il computer interessato:

kubectl delete machine [MACHINE_NAME]

Se il cluster è configurato correttamente, viene creata una macchina sostitutiva con un indirizzo IP.

Numero sufficiente di indirizzi IP allocati, ma la macchina non riesce a registrarsi con il cluster

Sintomi

La rete ha un numero sufficiente di indirizzi allocati, ma la macchina non riesce ancora a registrarsi con il cluster utente.

Cause possibili

Potrebbe esserci un conflitto IP. L'IP potrebbe essere richiesto da un'altra macchina o dal tuo bilanciatore del carico.

Risoluzione

Verifica che l'indirizzo IP della macchina interessata non sia stato utilizzato. In caso di conflitto, devi risolvere il conflitto nel tuo ambiente.

Diagnostica dei problemi del cluster con gkectl

Utilizza i comandi gkectl diagnoseper identificare i problemi del cluster e condividerli con Google. Consulta Diagnosi dei problemi del cluster.

Comportamento di logging predefinito

Per gkectl e gkeadm è sufficiente utilizzare le impostazioni di logging predefinite:

  • Per impostazione predefinita, le voci di log vengono salvate come segue:

    • Per gkectl, il file di log predefinito è /home/ubuntu/.config/gke-on-prem/logs/gkectl-$(date).log e il file è collegato direttamente al file logs/gkectl-$(date).log nella directory locale in cui viene eseguito gkectl.
    • Per gkeadm, il file di log predefinito è logs/gkeadm-$(date).log nella directory locale in cui esegui gkeadm.
  • Tutte le voci di log vengono salvate nel file di log, anche se non sono stampate nel terminale (quando --alsologtostderr è false).
  • Il livello di dettaglio -v5 (predefinito) copre tutte le voci di log necessarie al team di assistenza.
  • Il file di log contiene anche il comando eseguito e il messaggio di errore.

Se hai bisogno di aiuto, ti consigliamo di inviare il file di log al team di assistenza.

Specificare una posizione non predefinita per il file di log

Per specificare una posizione non predefinita per il file di log gkectl, utilizza il flag --log_file. Il file di log specificato non verrà collegato direttamente alla directory locale.

Per specificare una posizione non predefinita per il file di log gkeadm, utilizza il flag --log_file.

Localizzazione dei log dell'API Cluster nel cluster di amministrazione

Se l'avvio di una VM non riesce dopo l'avvio del piano di controllo dell'amministratore, puoi provare a eseguire il debug controllando i controller dell'API cluster nel log:

  1. Trova il nome del pod dei controller API del cluster nello spazio dei nomi kube-system, dove [ADMIN_CLUSTER_KUBECONFIG] è il percorso del file kubeconfig del cluster di amministrazione:

    kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] -n kube-system get pods | grep clusterapi-controllers
  2. Apri i log del pod, dove [POD_NAME] è il nome del pod. Se preferisci, utilizza grep o uno strumento simile per cercare errori:

    kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] -n kube-system logs [POD_NAME] vsphere-controller-manager

Il comando di aggiornamento non riesce

Quando esegui gkectl update per aggiornare un cluster, potrebbe essere visualizzato il seguente messaggio di errore:
Failed to update the cluster: failed to begin updating user cluster "CLUSTER_NAME": timed out waiting for the condition
Per esaminare ulteriormente questo messaggio di errore, esegui questo comando:
kubectl get --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] onpremusercluster
Se ricevi il seguente output e l'aggiornamento è stato applicato, il messaggio di errore può essere ignorato:
cluster [CLUSTER_NAME] is READY=true