Gestire i pool di nodi in un cluster

Un node pool è un gruppo di nodi all'interno di un cluster che condividono la stessa configurazione. Tutti i nodi nel cluster devono appartenere a un pool di nodi. In un cluster Google Distributed Cloud esistono tre tipi di node pool: control plane, bilanciatore del carico e worker.

Questa pagina descrive come controllare lo stato dei pool di nodi worker e come aggiungere, aggiornare e rimuovere i pool di nodi worker.

Scegliere uno strumento per gestire i pool di nodi

La modalità di gestione dei pool di nodi dipende dal tipo di cluster e, per i cluster utente, se il cluster è 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 bmctl, 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 kubectl sulla workstation di amministrazione per gestire i node pool. Utilizzi anche kubectl per gestire i node pool per tutti i tipi di cluster che possono contenere node pool worker (cluster ibridi, autonomi e utente).

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

  1. Accedi con il tuo account Google

    gcloud auth login
    
  2. Aggiorna i componenti:

    gcloud components update
    

Controllare lo stato del nodo

Prima di aggiungere o rimuovere i pool di nodi, controlla lo stato dei nodi e dei rispettivi pool di nodi.

kubectl

Con kubectl, puoi ottenere lo stato dei nodi in uno spazio dei nomi specifico o nell'intero cluster. L'esempio seguente mostra lo stato dei pool di nodi nello spazio dei nomi del cluster cluster-abm-cluster:

kubectl get nodepools.baremetal.cluster.gke.io -n cluster-abm-cluster

Il sistema restituisce risultati simili ai seguenti:

NAME                    READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
abm-cluster             3       0             0         0                  0
default-pool            2       0             0         0                  0
backup-pool             3       0             0         0                  0

Ogni colonna della tabella indica i diversi stati in cui può trovarsi un nodo. Ogni riga della tabella indica il numero di nodi per pool di nodi in ciascuno degli stati dei nodi.

Quando aggiungi un nodo, inizialmente lo stato è Reconciling durante il provisioning. Una volta che il nodo fa parte del cluster, il suo stato diventa Ready.

Puoi anche controllare lo stato dei nodi nel cluster eseguendo questo comando:

kubectl get nodes --kubeconfig=PATH_TO_KUBECONFIG

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, poi su Più dettagli nel riquadro Dettagli.

  4. Fai clic sulla scheda Nodi.

    Viene visualizzato un elenco di node pool.

Elenco dei nodi dello screenshot

Interfaccia a riga di comando gcloud

  1. Elenca i node pool nel cluster:

    gcloud container bare-metal node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

    Sostituisci quanto segue:

    • USER_CLUSTER_NAME: il nome del cluster utenti che contiene i node pool.

    • FLEET_HOST_PROJECT_ID: l'ID del progetto in cui è stato creato il cluster.

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

  2. Descrivi un pool di nodi:

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

    Sostituisci NODE_POOL_NAME con il nome del pool di nodi.

Se hai bisogno di ulteriori informazioni su come diagnosticare i cluster, consulta la pagina Creazione di snapshot per la diagnosi dei cluster.

Aggiungi un nuovo pool di nodi

kubectl

Tieni presente le seguenti regole quando aggiungi un pool di nodi a un cluster:

  • Un cluster di amministrazione può contenere un pool di nodi del bilanciatore del carico e un node pool del piano di controllo, ma non può contenere un pool di nodi worker: il tentativo di aggiungere un node pool worker a un cluster di amministrazione genera un errore.

  • Un cluster può contenere un solo pool di nodi del piano di controllo e un solo pool di nodi del bilanciamento del carico. Non puoi aggiungere al cluster altri pool di nodi del control plane o del bilanciamento del carico.

Per aggiungere nuovi pool di nodi a un cluster, crea una nuova risorsa nodepools.baremetal.cluster.gke.io nel cluster. Nell'esempio seguente, al manifest viene aggiunto un nuovo pool di nodi denominato "machine-learning-pool". Il nuovo pool di nodi è composto da due nodi con indirizzi IP 10.200.0.7 e 10.200.0.8:

apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
  name: machine-learning-pool
  namespace: cluster-abm-cluster
spec:
  clusterName: abm-cluster
  nodes:
  - address: 10.200.0.7
  - address: 10.200.0.8
  taints:
  - key: TAINT_KEY
    value: TAINT_VALUE
    effect: NoSchedule
  labels:
    key1: LABEL_1
    key2: LABEL_2

Archivia la configurazione in un file denominato machine-learning-pool.yaml e applicala al cluster con il comando seguente:

kubectl apply -f machine-learning-pool.yaml

Quando aggiungi un pool di nodi a un cluster, devi tenere conto dei seguenti fattori:

  • Le configurazioni NodePool.spec.taints e NodePool.spec.labels vengono riconciliate con i nodi. Vengono rimossi tutti i taint e le etichette aggiunti direttamente ai nodi. Il piano di controllo non rimuove i taint e le etichette che aggiungi direttamente durante il processo di sincronizzazione. Per ignorare questo passaggio di riconciliazione, puoi annotare il nodo con baremetal.cluster.gke.io/label-taint-no-sync.

  • La risorsa del pool di nodi deve essere creata nello stesso spazio dei nomi del cluster associato e deve fare riferimento al nome del cluster nel campo spec.clusterName.

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, poi su Più dettagli nel riquadro Dettagli.

  4. Fai clic su Aggiungi pool di nodi.

  5. Inserisci un nome per il pool di nodi.

  6. Nel campo Indirizzo nodo 1, inserisci l'indirizzo IP della macchina del nodo worker.

    Se devi aggiungere più di una macchina nodo di lavoro, fai clic su Aggiungi indirizzo.

  7. (Facoltativo) Aggiungi etichette Kubernetes e/o incompatibilità di Kubernetes.

  8. Fai clic su Crea.

Lo stato del pool di nodi viene visualizzato nella scheda Nodi. Potresti dover aggiornare la pagina per visualizzare lo stato aggiornato.

Interfaccia a riga di comando gcloud

gcloud container bare-metal node-pools create NODE_POOL_NAME \
  --cluster=USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --location=LOCATION \
  --node-configs-from-file=NODE_POOL_CONFIG

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 utente.

  • FLEET_HOST_PROJECT_ID: l'ID del progetto in cui è stato creato il cluster.

  • LOCATION: la Google Cloud posizione che hai specificato durante la creazione del cluster.

  • NODE_POOL_CONFIG: il percorso di un file di configurazione che descrive il pool di nodi. Ad esempio:

    nodeConfigs:
    - nodeIP: 10.200.0.10
      labels:
        key1: value1
        key2: value2
    - nodeIP: 10.200.0.11
      labels:
        key3: value3
        key4: value4
    

(Facoltativo) Puoi specificare quanto segue:

applicato 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.

  • --validate-only Specifica questo flag se vuoi convalidare l'aggiornamento ma non apportare modifiche.

Aggiornamento di un pool di nodi

kubectl

Per aggiornare un pool di nodi, modifica la risorsa nodepools.baremetal.cluster.gke.io nel cluster. Puoi aggiornare la risorsa direttamente utilizzando kubectl edit oppure puoi aggiornare il file YAML e utilizzare kubectl apply.

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, poi su Più dettagli nel riquadro Dettagli.

  4. Fai clic sulla scheda Nodi.

  5. Nell'elenco, fai clic sul pool di nodi che vuoi aggiornare.

  6. Nella pagina Dettagli del pool di nodi, fai clic su Modifica.

  7. Modifica le impostazioni in base alle tue esigenze e fai clic su Salva.

Interfaccia a riga di comando gcloud

  1. Se vuoi, elenca i node pool sul cluster per ottenere il nome pool di nodi che vuoi aggiornare.

    gcloud container bare-metal node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

    Sostituisci quanto segue:

    • USER_CLUSTER_NAME: il nome del cluster utenti che contiene i node pool.

    • FLEET_HOST_PROJECT_ID: l'ID del progetto in cui è stato creato il cluster.

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

  2. Esegui questo comando:

    gcloud container bare-metal node-pools update NODE_POOL_NAME  \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION \
      --node-configs-from-file=NODE_CONFIG_FILE
    

    Sostituisci quanto segue:

    • NODE_POOL_NAME con il nome del pool di nodi.

    • NODE_CONFIG_FILE: il percorso di un file di configurazione che descrive il pool di nodi. Ad esempio:

    nodeConfigs:
      - nodeIP: 10.200.0.10
        labels:
          key1: value1
      - nodeIP: 10.200.0.11
    

(Facoltativo) Puoi specificare quanto segue:

  • --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 del 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.

  • --validate-only Specifica questo flag se vuoi convalidare l'aggiornamento ma non apportare modifiche.

Ad esempio:

gcloud container bare-metal node-pools create default-pool \
    --cluster=user-cluster-1  \
    --location=us-west1 \
    --node-configs-from-file=node-pool-config.yaml \
    --node-taints=key1=val1:NoSchedule,key2=val2:NoExecute

Rimuovere un pool di nodi

kubectl

Rimuovi i node pool con kubectl delete. Ad esempio, per rimuovere il pool di nodi aggiunto nella sezione precedente, machine-learning-pool, utilizza il seguente comando:

kubectl delete nodepool machine-learning-pool -n cluster-abm-cluster

Tieni presente che i pool di nodi del control plane e del bilanciatore del carico sono fondamentali per il funzionamento di un cluster e di conseguenza non possono essere rimossi da un 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, poi su Più dettagli nel riquadro Dettagli.

  4. Fai clic sulla scheda Nodi e poi sul pool di nodi che vuoi eliminare.

  5. Fai clic su Elimina.

  6. Nella finestra di dialogo di conferma, inserisci il nome del pool di nodi e fai clic su Conferma.

Interfaccia a riga di comando gcloud

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

Sostituisci quanto segue:

  • NODE_POOL_NAME con il nome del pool di nodi.

  • USER_CLUSTER_NAME: il nome del cluster utenti che contiene i node pool.

  • FLEET_HOST_PROJECT_ID: l'ID del progetto in cui è stato creato il cluster.

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

La rimozione di un pool di nodi worker in un cluster può causare interruzioni dei pod. Se è presente un budget di interruzione dei pod (PDB), potresti non riuscire a rimuovere un pool di nodi. Per ulteriori informazioni sulle norme di interruzione dei pod, consulta la sezione Rimozione dei nodi bloccati dal budget di interruzione dei pod.

Passaggi successivi

Se i requisiti del workload cambiano dopo la creazione dei node pool, puoi aggiornare unpool di nodil worker per aggiungere o rimuovere nodi. Per aggiungere o rimuovere nodi da un worker pool di nodil, vedi Aggiungere o rimuovere nodi in un cluster.