Controlla la pianificazione con incompatibilità e tolleranze

Questa pagina fornisce una panoramica di taint e tolleranze su Google Distributed Cloud. Quando pianifichi i carichi di lavoro da implementare sul cluster, le incompatibilità dei nodi ti aiutano a controllare su quali nodi possono essere eseguiti.

Panoramica

Quando invii un carico di lavoro da eseguire in un cluster, lo scheduler determina dove posizionare i pod associati al carico di lavoro. Lo scheduler è libero di posizionare un pod su qualsiasi nodo che soddisfi i requisiti di CPU, memoria e risorse personalizzate del pod.

Se il tuo cluster esegue una serie di workload, potresti voler esercitare un certo controllo su quali workload possono essere eseguiti su un determinato pool di nodi.

Un'incompatibilità dei nodi ti consente di contrassegnare un nodo in modo che lo scheduler ne eviti o impedisca l'utilizzo per determinati pod. Una funzionalità complementare, le tolleranze, ti consente di designare i pod che possono essere utilizzati su nodi "incompatibili".

Incompatibilità e tolleranze lavorano insieme per garantire che i pod non vengano pianificati su nodi inappropriati.

Le incompatibilità sono coppie chiave-valore associate a un effetto. La tabella seguente elenca gli effetti disponibili:

Effetto Descrizione
NoSchedule I pod che non tollerano questa incompatibilità non vengono pianificati sul nodo; i pod esistenti non vengono rimossi dal nodo.
PreferNoSchedule Kubernetes evita di pianificare pod che non tollerano questa incompatibilità sul nodo.
NoExecute Il pod viene rimosso dal nodo se è già in esecuzione sul nodo, mentre non viene pianificato sul nodo se non è ancora in esecuzione sul nodo stesso.

Vantaggi dell'impostazione di taint dei nodi in Google Distributed Cloud

Anche se puoi impostare i taint dei nodi utilizzando il comando kubectl taint, l'utilizzo di gkectl o della console Google Cloud per impostare un taint del nodo presenta i seguenti vantaggi rispetto a kubectl:

  • I taint vengono conservati quando un nodo viene riavviato o sostituito.
  • I taint vengono creati automaticamente quando un nodo viene aggiunto a un pool di nodi.
  • Quando utilizzi gkectl per aggiungere taint, questi vengono creati automaticamente durante la scalabilità automatica del cluster. La scalabilità automatica per i pool di nodi creati nella consoleGoogle Cloud non è attualmente disponibile.

Imposta incompatibilità dei nodi

Puoi impostare i taint dei nodi in un pool di nodi quando crei un cluster utente o dopo la creazione del cluster. Questa sezione mostra l'aggiunta di taint ai cluster già creati, ma la procedura è simile quando si creano nuovi cluster.

Puoi aggiungere un nuovo node pool e impostare un taint oppure puoi aggiornare un node pool esistente e impostare un taint. Prima di aggiungere un altro pool di nodi, verifica che nel cluster siano disponibili IP sufficienti.

Se hai creato il cluster nella console Google Cloud , puoi utilizzare la consoleGoogle Cloud per aggiungere o aggiornare un pool di nodi.

Imposta taint in un nuovo pool di nodi

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 Repliche, 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), fai clic su + Aggiungi taint. Inserisci Chiave, Valore ed Effetto per la taint. Ripeti l'operazione se necessario.

  7. (Facoltativo) Fai clic su + Aggiungi etichette Kubernetes. Inserisci la Chiave e il Valore per l'etichetta. Ripeti queste operazioni in base alle necessità.

  8. Fai clic su Crea.

  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.

Riga di comando

  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.

  2. Compila la sezione nodePools[i].taints. Ad esempio:

    nodePools:
    - name: "my-node-pool"
      taints:
      - key: "staging"
        value: "true"
        effect: "NoSchedule"
    
  3. (Facoltativo) Compila le seguenti sezioni:

    • nodePools[i].labels
    • nodePools[i].bootDiskSizeGB
    • nodePools[i].osImageType
    • nodePools[i].vsphere.datastore
    • nodePools[i].vsphere.tags
  4. 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.

Imposta incompatibilità in un pool di nodi esistente

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 da modificare.

  6. Fai clic su Modifica accanto alla sezione Metadati del node pool (facoltativo) e fai clic su + Aggiungi taint. Inserisci Chiave, Valore ed Effetto per la taint. Ripeti l'operazione se necessario.

  7. Fai clic su Fine.

  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.

Riga di comando

  1. Nel file di configurazione del cluster utente, vai alla sezione nodePools del pool di nodi che vuoi aggiornare.

  2. Compila il nodePools[i].taints Ad esempio:

    nodePools:
    - name: "my-node-pool"
      taints:
      - key: "staging"
        value: "true"
        effect: "NoSchedule"
    
  3. 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.

Configurare i pod per tollerare un'incompatibilità

Puoi configurare i pod in modo che tollerino un'incompatibilità includendo il campo tolerations nella specifica dei pod. Nell'esempio seguente, il pod può essere pianificato su un nodo con l'incompatibilità dedicated=experimental:NoSchedule:

tolerations:
- key: dedicated
  operator: Equal
  value: experimental
  effect: NoSchedule

Per altri esempi, vedi Incompatibilità e tolleranze.