Creazione e gestione dei pool di nodi

Quando crei un cluster utente, devi configurare almeno un node pool, ovvero un gruppo di nodi che condividono la stessa configurazione. Dopo la creazione del cluster, puoi aggiungere nuovi node pool, aggiornare le impostazioni pool di nodi ed eliminare i node pool.

Scegliere uno strumento per gestire i pool di nodi

Il modo in cui crei, aggiorni ed elimini i node pool dipende dal fatto che il cluster sia gestito dall'API GKE On-Prem. Un cluster utente è gestito dall'API GKE On-Prem se si verifica una delle seguenti condizioni:

  • Il cluster è stato creato nella console Google Cloud o utilizzando Google Cloud CLI (gcloud CLI), che configura automaticamente l'API GKE On-Prem per gestire il cluster.

  • Il cluster è stato creato utilizzando gkectl, ma è stato configurato per essere gestito dall'API GKE On-Prem.

Se l'API GKE On-Prem gestisce un cluster utente, puoi utilizzare la console o gcloud CLI per gestire i pool di nodi. Se il cluster utente non è gestito dall'API GKE On-Prem, utilizza gkectl sulla workstation di amministrazione per gestire i node pool.

Se prevedi di utilizzare gcloud CLI, esegui le seguenti operazioni su un computer su cui è installata gcloud CLI:

  1. Accedere con il tuo Account Google

    gcloud auth login
    
  2. Aggiorna i componenti:

    gcloud components update
    

Aggiungi un pool di nodi

Se il cluster è gestito dall'API GKE On-Prem, puoi utilizzare la console o gcloud CLI per aggiungere un pool di nodi. Tuttavia, devi utilizzare gkectl sulla workstation di amministrazione per configurare le seguenti impostazioni del pool di nodi:

Prima di aggiungere un altro pool di nodi, verifica che nel cluster siano disponibili IP sufficienti.

gkectl

Sulla workstation di amministrazione:

  1. Nel file di configurazione del cluster utente, compila la sezione nodePools.

    Devi specificare i seguenti campi:

    • nodePools.[i].name
    • nodePools[i].cpus
    • nodePools.[i].memoryMB
    • nodePools.[i].replicas

    I seguenti campi sono facoltativi. Se non includi nodePools[i].bootDiskSizeGB o nodePools[i].osImageType, vengono utilizzati i valori predefiniti.

    • nodePools[i].labels
    • nodePools[i].taints
    • nodePools[i].bootDiskSizeGB
    • nodePools[i].osImageType
    • nodePools[i].vsphere.datastore
    • nodePools[i].vsphere.tags
  2. Esegui questo comando:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Sostituisci quanto segue:

    • ADMIN_CLUSTER_KUBECONFIG con il percorso del file kubeconfig per il cluster di amministrazione.

    • USER_CLUSTER_CONFIG con il percorso del file di configurazione del cluster utente.

Configurazione di esempio

Nella seguente configurazione di esempio, sono presenti quattro pool di nodi, ognuno con attributi diversi:

  • pool-1: vengono specificati solo gli attributi minimi richiesti
  • pool-2: include vsphere.datastore e vsphere.tags
  • pool-3: include taints e labels
  • pool-4: include osImageType e bootDiskSizeGB
nodePools:
- name: pool-1
  cpus: 4
  memoryMB: 8192
  replicas: 5
- name: pool-2
  cpus: 8
  memoryMB: 16384
  replicas: 3
  vsphere:
    datastore: my_datastore
    tags:
    - category: "purpose"
      name: "testing"
- name: pool-3
  cpus: 4
  memoryMB: 8192
  replicas: 5
  taints:
    - key: "example-key"
      effect: NoSchedule
  labels:
    environment: production
    app: nginx
- name: pool-4
  cpus: 4
  memoryMB: 8192
  replicas: 5
  osImageType: cos
  bootDiskSizeGB: 40

Console

  1. Nella console, vai alla pagina Panoramica dei cluster Google Kubernetes Engine.

    Vai ai cluster GKE

  2. Seleziona il Google Cloud progetto in cui si trova il cluster utente.

  3. Nell'elenco dei cluster, fai clic sul nome del cluster, quindi su Visualizza dettagli nel riquadro Dettagli.

  4. Fai clic su Aggiungi pool di nodi.

  5. Configura il pool di nodi:

    1. Inserisci il nome del pool di nodi.
    2. Inserisci il numero di vCPUs per ogni nodo nel pool (minimo 4 per worker cluster utente).
    3. Inserisci la dimensione della memoria in mebibyte (MiB) per ogni nodo nel pool (minimo 8192 MiB per nodo worker del cluster utente; il valore deve essere un multiplo di 4).
    4. Nel campo Nodi, inserisci il numero di nodi nel pool (minimo 3).
    5. Seleziona il tipo di immagine del sistema operativo: Ubuntu Containerd o COS.

    6. Inserisci la dimensione del disco di avvio in gibibyte (GiB) (il valore predefinito è 40 GiB).

  6. Nella sezione Metadati del node pool (facoltativo), se vuoi aggiungere etichette e taint di Kubernetes, segui questi passaggi:

    1. Fai clic su + Aggiungi etichette Kubernetes. Inserisci la Chiave e il Valore per l'etichetta. Ripeti queste operazioni in base alle necessità.
    2. Fai clic su + Aggiungi taint. Inserisci Chiave, Valore ed Effetto per la taint. Ripeti queste operazioni in base alle necessità.
  7. Fai clic su Crea.

  8. La console Google Cloud mostra Stato cluster: modifiche in corso. Fai clic su Mostra dettagli per visualizzare la condizione Stato risorsa e i messaggi di stato.

Interfaccia a riga di comando gcloud

Esegui questo comando per creare un pool di nodi:

gcloud container vmware node-pools create NODE_POOL_NAME \
  --cluster=USER_CLUSTER_NAME  \
  --project=FLEET_HOST_PROJECT_ID \
  --location=LOCATION \
  --image-type=IMAGE_TYPE  \
  --boot-disk-size=BOOT_DISK_SIZE \
  --cpus=vCPUS \
  --memory=MEMORY \
  --replicas=NODES

Sostituisci quanto segue:

  • NODE_POOL_NAME: un nome a tua scelta per il pool di nodi. Il nome deve:

    • Deve contenere al massimo 40 caratteri.
    • contenere solo caratteri alfanumerici minuscoli o un trattino (-)
    • iniziare con un carattere alfabetico
    • terminare con un carattere alfanumerico
  • USER_CLUSTER_NAME: il nome del cluster utenti in cui verrà creato il pool di nodi.

  • FLEET_HOST_PROJECT_ID: l'ID del progetto a cui è registrato il cluster.

    • LOCATION: la Google Cloud posizione associata al cluster utente.

    • IMAGE_TYPE: il tipo di immagine del sistema operativo da eseguire sulle VM nel pool di nodi. Imposta uno dei seguenti valori: ubuntu_containerd o cos.

    • BOOT_DISK_SIZE: Le dimensioni del disco di avvio in gibibyte (GiB) per ogni nodo nel pool. Il valore minimo è 40 GiB.

    • vCPUs: il numero di vCPU per ogni nodo nel pool di nodi. Il numero minimo è 4.

    • MEMORY: Le dimensioni della memoria in mebibyte (MiB) per ogni nodo del pool. Il valore minimo è 8192 MiB per nodo worker del cluster utente e deve essere un multiplo di 4.

    • NODES: il numero di nodi nel pool di nodi. Il minimo è 3.

    Ad esempio:

    gcloud container vmware node-pools create default-pool \
      --cluster=user-cluster-1  \
      --location=us-west1 \
      --image-type=ubuntu_containerd  \
      --boot-disk-size=40 \
      --cpus=8 \
      --memory=8192 \
      --replicas=5
    

    (Facoltativo) Puoi specificare quanto segue:

    • --enable-load-balancer: pertinente solo per il bilanciatore del carico MetalLB. Se specificato, consente all'oratore MetalLB di essere eseguito sui nodi nel pool. Almeno un pool di nodi deve essere abilitato per il bilanciatore del carico MetalLB.

    • --image=IMAGE: il nome dell'immagine del sistema operativo in vCenter.

    • --node-labels=KEY=VALUE,...: un elenco separato da virgole di etichette Kubernetes (coppie chiave-valore) applicate a ogni nodo del pool.

    • --node-taints=KEY=VALUE:EFFECT,... Un elenco separato da virgole di taint Kubernetes applicati a ogni nodo nel pool. Le incompatibilità sono coppie chiave-valore associate a un effetto. Le incompatibilità vengono utilizzate con le tolleranze per la pianificazione dei pod. Specifica uno dei seguenti valori per EFFECT: NoSchedule, PreferNoSchedule, NoExecute.

    Ad esempio:

    gcloud container vmware node-pools create default-pool \
        --cluster=user-cluster-1  \
        --location=us-west1 \
        --image-type=ubuntu_containerd  \
        --boot-disk-size=40 \
        --cpus=8 \
        --memory=8192 \
        --replicas=5 \
        --node-taints=key1=val1:NoSchedule,key2=val2:NoExecute
    

    Per informazioni su altri flag facoltativi, consulta il riferimento gcloud.

Aggiornamento di un pool di nodi

Quando aumenti il numero di repliche, Google Distributed Cloud aggiunge il numero richiesto di nodi al cluster utente e, quando diminuisci il numero di repliche, i nodi vengono rimossi. La modifica del numero di repliche per un pool di nodi non interrompe i workload. Assicurati di disporre di indirizzi IP disponibili se aumenti il numero di repliche.

Se aggiorni qualsiasi altro campo del pool di nodi, viene attivato un aggiornamento in sequenza sul cluster. In un aggiornamento in sequenza, Google Distributed Cloud crea un nuovo nodo e poi elimina un nodo precedente. Questa procedura viene ripetuta finché tutti i nodi precedenti non vengono sostituiti con nuovi nodi. Questo processo non causa tempi di inattività, ma il cluster deve avere un indirizzo IP aggiuntivo disponibile per l'utilizzo durante l'aggiornamento.

Supponiamo che un pool di nodi abbia N nodi al termine di un aggiornamento. Devi quindi avere a disposizione almeno N + 1 indirizzi IP per i nodi del pool. Ciò significa che se stai ridimensionando un cluster aggiungendo nodi a uno o più pool, devi avere almeno un indirizzo IP in più rispetto al numero totale di nodi che si troveranno in tutti i node pool del cluster al termine del ridimensionamento. Per saperne di più, vedi Verificare che siano disponibili indirizzi IP sufficienti.

Per aggiornare un pool di nodi su un cluster utente:

gkectl

  1. Modifica i valori dei campi che vuoi cambiare nella sezione nodePools del file di configurazione del cluster utente.

  2. Aggiorna il cluster:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Sostituisci quanto segue:

    • ADMIN_CLUSTER_KUBECONFIG con il percorso del file kubeconfig per il cluster di amministrazione.

    • USER_CLUSTER_CONFIG con il percorso del file di configurazione del cluster utente.

Aggiorna osImageType utilizzato da un pool di nodi

Per aggiornare un pool di nodi in modo che utilizzi un osImageType diverso, devi utilizzare la riga di comando. Per modificare osImageType utilizzato da un pool di nodi, aggiorna il file di configurazione del pool di nodi, come mostrato nell'esempio seguente, ed esegui gkectl update cluster.

nodePools:
- name: np-1
  cpus: 4
  memoryMB: 8192
  replicas: 3
  osImageType: ubuntu_containerd

Console

Puoi aggiornare solo i seguenti campi utilizzando la console:

  • Numero di repliche
  • Memoria
  • Numero di vCPU

Per aggiornare altri campi, utilizza gcloud CLI o gkectl.

  1. Nella console, vai alla pagina Panoramica dei cluster Google Kubernetes Engine.

    Vai ai cluster GKE

  2. Seleziona il Google Cloud progetto in cui si trova il cluster utente.

  3. Nell'elenco dei cluster, fai clic sul nome del cluster, quindi su Visualizza dettagli nel riquadro Dettagli.

  4. Fai clic sulla scheda Nodi.

  5. Fai clic sul nome del pool di nodi da modificare.

  6. Fai clic su Modifica accanto al campo che vuoi modificare e fai clic su Fine.

  7. Fai clic su per tornare alla pagina precedente.

  8. La console Google Cloud mostra Stato cluster: modifiche in corso. Fai clic su Mostra dettagli per visualizzare la condizione Stato risorsa e i messaggi di stato.

Interfaccia a riga di comando gcloud

  1. (Facoltativo) Elenca i pool di nodi per ottenere il nome del pool di nodi che vuoi aggiornare:

    gcloud container vmware node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    
  2. Esegui il comando seguente per aggiornare il pool di nodi:

    gcloud container vmware node-pools update NODE_POOL_NAME \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION \
      --ATTRIBUTE_TO_UPDATE \
      ...
    

    Sostituisci quanto segue:

    • NODE_POOL_NAME: il nome del pool di nodi da aggiornare.

    • USER_CLUSTER_NAME: il nome del cluster utente che contiene il pool di nodi.

    • LOCATION: la Google Cloud posizione associata al cluster utente.

    • ATTRIBUTE_TO_UPDATE: uno o più flag per aggiornare gli attributi del pool di nodi. Ad esempio, per modificare il numero di vCPU e nodi nel pool, esegui questo comando.

    gcloud container vmware node-pools update default-pool \
        --cluster=user-cluster-1  \
        --project=example-project-12345
        --location=us-west1 \
        --cpus=10 \
        --replicas=6
    

    Per informazioni sugli attributi del pool di nodi che puoi aggiornare, consulta il riferimento gcloud.

Verificare le modifiche

Per verificare che i node pool siano stati creati o aggiornati come previsto, esamina i nodi del cluster:

gkectl

Esegui questo comando:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes -o wide

Se devi ripristinare le modifiche, modifica il file di configurazione del cluster ed esegui gkectl update cluster.

Console

  1. Nella console, vai alla pagina Panoramica dei cluster Google Kubernetes Engine.

    Vai ai cluster GKE

  2. Seleziona il Google Cloud progetto in cui si trova il cluster utente.

  3. Nell'elenco dei cluster, fai clic sul nome del cluster, quindi su Visualizza dettagli nel riquadro Dettagli.

  4. Fai clic sulla scheda Nodi.

  5. Fai clic sul nome del pool di nodi che vuoi visualizzare.

Interfaccia a riga di comando gcloud

Esegui questo comando:

gcloud container vmware node-pools describe NODE_POOL_NAME \
  --cluster=USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --location=LOCATION

Elimina un node pool

Anche se puoi eliminare i node pool, il cluster utente deve averne almeno uno. L'eliminazione di un pool di nodi comporta la rimozione immediata dei nodi del pool indipendentemente dal fatto che questi nodi eseguano o meno workload.

Per eliminare un pool di nodi da un cluster utente:

gkectl

  1. Assicurati che non siano in esecuzione carichi di lavoro sui nodi interessati.

  2. Rimuovi la definizione dalla sezione nodePools del file di configurazione del cluster utente.

  3. Aggiorna il cluster:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Sostituisci quanto segue:

    • [ADMIN_CLUSTER_KUBECONFIG] con il percorso del file kubeconfig per il cluster di amministrazione.

    • [USER_CLUSTER_CONFIG] con il percorso del file di configurazione del cluster utente.

Console

  1. Assicurati che non siano in esecuzione carichi di lavoro sui nodi interessati.

  2. Nella console, vai alla pagina Panoramica dei cluster Google Kubernetes Engine.

    Vai ai cluster GKE

  3. Seleziona il Google Cloud progetto in cui si trova il cluster utente.

  4. Nell'elenco dei cluster, fai clic sul nome del cluster, quindi su Visualizza dettagli nel riquadro Dettagli.

  5. Fai clic sulla scheda Nodi.

  6. Fai clic sul nome del pool di nodi che vuoi eliminare.

  7. Fai clic su Elimina.

  8. Fai clic su per tornare alla pagina precedente.

  9. La console Google Cloud mostra Stato cluster: modifiche in corso. Fai clic su Mostra dettagli per visualizzare la condizione Stato risorsa e i messaggi di stato.

Interfaccia a riga di comando gcloud

  1. (Facoltativo) Elenca i node pool per ottenere il nome del pool di nodi che vuoi eliminare:

    gcloud container vmware node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    
  2. Esegui questo comando per eliminare il pool di nodi:

    gcloud container vmware node-pools delete NODE_POOL_NAME \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

    Sostituisci quanto segue:

    • NODE_POOL_NAME: il nome del pool di nodi da eliminare.

    • USER_CLUSTER_NAME: il nome del cluster utente che contiene il pool di nodi.

    • LOCATION: la Google Cloud posizione associata al cluster utente.

Risoluzione dei problemi

  • In generale, il comando gkectl update cluster fornisce dettagli specifici in caso di errore. Se il comando è andato a buon fine e non vedi i nodi, puoi risolvere i problemi con la guida Diagnostica i problemi del cluster.

  • È possibile che le risorse del cluster siano insufficienti, ad esempio che non siano disponibili indirizzi IP durante la creazione o l'aggiornamento del pool di nodi. Per informazioni dettagliate sulla verifica della disponibilità degli indirizzi IP, consulta l'articolo Ridimensionamento di un cluster utente.

  • Puoi anche consultare Risolvere i problemi di aggiornamento di Google Distributed Cloud.

  • Non procedere oltre Creating node MachineDeployment(s) in user cluster….

    La creazione o l'aggiornamento dei pool di nodi nel cluster utente può richiedere un po' di tempo. Tuttavia, se il tempo di attesa è estremamente lungo e sospetti che qualcosa potrebbe non essere andato a buon fine, puoi eseguire i seguenti comandi:

    1. Esegui kubectl get nodes per ottenere lo stato dei nodi.
    2. Per tutti i nodi non pronti, esegui kubectl describe node NODE_NAME per ottenere i dettagli.