Utilizzare il provisioning automatico dei nodi


Questa pagina spiega come utilizzare il provisioning automatico dei nodi nei cluster Google Kubernetes Engine (GKE) standard. Dovresti già conoscere il concetto di provisioning automatico dei nodi.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

  • Abilita l'API Google Kubernetes Engine.
  • Abilita l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e initialize gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente eseguendo gcloud components update.

Requisiti

Il provisioning automatico dei nodi è disponibile nelle seguenti release di GKE:

  • Versione 1.11.2-gke.25 e successive per i cluster di zona.
  • Versione 1.12.x e successive per i cluster a livello di regione.
  • Versione 1.27.6 e successive o 1.28 e successive, per Cloud TPU v4 e v5e.
  • Versione 1.28.7-gke.1020000 o successive e 1.29.2-gke.1035000 o successive per Cloud TPU v5p.

Abilita provisioning automatico dei nodi

Puoi abilitare il provisioning automatico dei nodi su un cluster con gcloud CLI o con la console Google Cloud.

Il provisioning automatico dei nodi presenta le seguenti limitazioni delle risorse:

Devi pianificare con attenzione l'intervallo di indirizzi IP del nodo. Puoi espandere l'intervallo di indirizzi IP del nodo dopo aver creato un cluster. Tuttavia, ti consigliamo di non espandere l'intervallo di indirizzi IP del nodo dopo aver creato il cluster, poiché devi aggiornare le regole firewall per includere il nuovo intervallo come origine. Puoi espandere l'intervallo di indirizzi IP dei pod utilizzando il CIDR di più pod discontigui con il provisioning automatico dei nodi.

gcloud

Per abilitare il provisioning automatico dei nodi, esegui questo comando:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --min-cpu MINIMUM_CPU \
    --min-memory MIMIMUM_MEMORY \
    --max-cpu MAXIMUM_CPU \
    --max-memory MAXIMUM_MEMORY \
    --autoprovisioning-scopes=https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring,https://www.googleapis.com/auth/devstorage.read_only

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster per abilitare il provisioning automatico dei nodi.
  • MINIMUM_CPU: il numero minimo di core nel cluster.
  • MINIMUM_MEMORY: numero minimo di gigabyte di memoria nel cluster.
  • MAXIMUM_CPU: il numero massimo di core nel cluster.
  • MAXIMUM_MEMORY: numero massimo di gigabyte di memoria nel cluster.

L'esempio seguente abilita il provisioning automatico dei nodi su dev-cluster e consente la scalabilità tra una dimensione totale del cluster di 1 CPU e 1 gigabyte di memoria fino a un massimo di 10 CPU e 64 gigabyte di memoria:

gcloud container clusters update dev-cluster \
    --enable-autoprovisioning \
    --min-cpu 1 \
    --min-memory 1 \
    --max-cpu 10 \
    --max-memory 64

Console

Per abilitare il provisioning automatico dei nodi:

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Fai clic sul nome del cluster.

  3. Nella sezione Automazione, in Provisioning automatico dei nodi, fai clic su Modifica.

  4. Seleziona la casella di controllo Abilita provisioning automatico dei nodi.

  5. Imposta l'utilizzo minimo e massimo di CPU e memoria per il cluster.

  6. Fai clic su Salva modifiche.

Utilizzo di un file di configurazione del provisioning automatico

Il provisioning automatico dei nodi può essere configurato utilizzando un file di configurazione YAML. Il file di configurazione può contenere una sola riga se viene utilizzato per modificare una singola impostazione. È possibile specificare più impostazioni in un unico file di configurazione. In questo caso, tutte queste impostazioni verranno modificate quando il file di configurazione viene applicato.

Alcune configurazioni avanzate possono essere specificate solo utilizzando un file di configurazione.

Esempio 1: l'applicazione del seguente file di configurazione consente la riparazione e l'upgrade automatico dei nodi per qualsiasi nuovo pool di nodi creato dal provisioning automatico dei nodi:

management:
  autoRepair: true
  autoUpgrade: true

Esempio 2: L'applicazione del seguente file di configurazione modificherà le seguenti impostazioni:

  • Imposta i limiti delle risorse per CPU, memoria e GPU. Il provisioning automatico dei nodi non crea un nodo se la dimensione totale del cluster supera i limiti di risorse specificati.
  • Abilita la riparazione e l'upgrade automatico dei nodi per tutti i nuovi pool di nodi creati dal provisioning automatico dei nodi.
  • Abilita Avvio protetto e monitoraggio dell'integrità per tutti i nuovi pool di nodi creati dal provisioning automatico dei nodi.
  • Imposta le dimensioni del disco di avvio su 100 GB per tutti i nuovi pool di nodi creati dal provisioning automatico dei nodi.
resourceLimits:
  - resourceType: 'cpu'
    minimum: 4
    maximum: 10
  - resourceType: 'memory'
    maximum: 64
  - resourceType: 'nvidia-tesla-k80'
    maximum: 4
management:
  autoRepair: true
  autoUpgrade: true
shieldedInstanceConfig:
  enableSecureBoot: true
  enableIntegrityMonitoring: true
diskSizeGb: 100

Per utilizzare un file di configurazione del provisioning automatico:

  1. Crea un file con la configurazione desiderata in una posizione in cui gcloud CLI può accedervi.

  2. Applica la configurazione al cluster eseguendo questo comando:

    gcloud container clusters update CLUSTER_NAME \
       --enable-autoprovisioning \
       --autoprovisioning-config-file FILE_NAME

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del cluster.
    • FILE_NAME: il nome del file di configurazione.

    Per ulteriori informazioni, consulta la documentazione di gcloud container clusters update.

Impostazioni predefinite del provisioning automatico

Il provisioning automatico dei nodi controlla i requisiti dei pod nel cluster per determinare il tipo di nodi più adatto a quei pod. Tuttavia, alcune impostazioni dei pool di nodi non sono specificate direttamente dai pod (ad esempio quelle relative agli upgrade dei nodi). Puoi impostare valori predefiniti per queste impostazioni, che verranno applicati a tutti i pool di nodi appena creati.

Impostazione del tipo di immagine del nodo predefinito

Puoi specificare il tipo di immagine dei nodi da utilizzare per tutti i nuovi pool di nodi di cui è stato eseguito il provisioning automatico utilizzando gcloud CLI o un file di configurazione. Questa impostazione è disponibile solo per i cluster GKE versione 1.20.6-gke.1800 e successive.

gcloud

Per impostare il tipo di immagine predefinito dei nodi, esegui questo comando:

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning \
  --autoprovisioning-image-type IMAGE_TYPE

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster.
  • IMAGE_TYPE: il tipo di immagine del nodo, che può essere uno dei seguenti:

    • cos_containerd: Container-Optimized OS con containerd.
    • ubuntu_containerd: Ubuntu con containerd.

File

Per tutti i nuovi pool di nodi di cui è stato eseguito il provisioning automatico, puoi specificare il tipo di immagine dei nodi da utilizzare utilizzando un file di configurazione. La seguente configurazione YAML specifica che per i nuovi pool di nodi di cui è stato eseguito il provisioning automatico, il tipo di immagine è cos_containerd e ha limiti di risorse associati per CPU e memoria. Devi specificare i valori massimi per CPU e memoria per abilitare il provisioning automatico.

  1. Salva la configurazione YAML:

    resourceLimits:
      - resourceType: 'cpu'
        minimum: 4
        maximum: 10
      - resourceType: 'memory'
        maximum: 64
    imageType: 'cos_containerd'
    
  2. Applica la configurazione:

    gcloud container clusters update CLUSTER_NAME \
      --enable-autoprovisioning \
      --autoprovisioning-config-file FILE_NAME
    

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del cluster.
    • FILE_NAME: il nome del file di configurazione.

Impostazione dei valori predefiniti delle identità per i pool di nodi di cui è stato eseguito il provisioning automatico

Le autorizzazioni per le risorse Google Cloud sono fornite dalle identities.

Puoi specificare l'identità predefinita (un account di servizio o uno o più ambiti) per i nuovi pool di nodi di cui è stato eseguito il provisioning automatico utilizzando gcloud CLI o tramite un file di configurazione.

gcloud

Per specificare l'account di servizio IAM predefinito utilizzato dal provisioning automatico dei nodi, esegui questo comando:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning --autoprovisioning-service-account=SERVICE_ACCOUNT

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster.
  • SERVICE_ACCOUNT: il nome dell'account di servizio predefinito.

L'esempio seguente imposta test-service-account@google.com come account di servizio predefinito nel cluster dev-cluster:

gcloud container clusters update dev-cluster \
    --enable-autoprovisioning --autoprovisioning-service-account=test-service-account@google.com

Per specificare gli ambiti predefiniti utilizzati dal provisioning automatico dei nodi, esegui questo comando:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning --autoprovisioning-scopes=SCOPE

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster.
  • SCOPE: gli ambiti Google Cloud utilizzati dai pool di nodi di cui è stato eseguito il provisioning automatico. Per specificare più ambiti, separali con una virgola (ad esempio, SCOPE1, SCOPE2,...).

L'esempio seguente imposta l'ambito predefinito nel cluster dev-cluster su devstorage.read_only:

gcloud container clusters update dev-cluster \
    --enable-autoprovisioning \
    --autoprovisioning-scopes=https://www.googleapis.com/auth/pubsub,https://www.googleapis.com/auth/devstorage.read_only

File

Puoi specificare l'impostazione predefinita dell'identità utilizzata dal provisioning automatico dei nodi utilizzando un file di configurazione. La seguente configurazione YAML imposta un account di servizio IAM:

  serviceAccount: SERVICE_ACCOUNT

Sostituisci SERVICE_ACCOUNT con il nome dell'account di servizio predefinito.

In alternativa, puoi utilizzare la seguente configurazione YAML per specificare gli ambiti predefiniti utilizzati dal provisioning automatico dei nodi:

  scopes: SCOPE

Sostituisci SCOPE con l'ambito di Google Cloud utilizzato dai pool di nodi di cui è stato eseguito il provisioning automatico. Per specificare più ambiti, separali con una virgola (ad esempio, SCOPE1, SCOPE2,...).

Per utilizzare un file di configurazione del provisioning automatico:

  1. Creare un file di configurazione specificando i valori predefiniti dell'identità in una posizione in cui gcloud CLI può accedervi.

  2. Applica la configurazione al cluster eseguendo questo comando:

    gcloud container clusters update CLUSTER_NAME \
       --enable-autoprovisioning \
       --autoprovisioning-config-file FILE_NAME

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster.
  • FILE_NAME: il nome del file di configurazione.

Chiavi di crittografia gestite dal cliente (CMEK)

Puoi specificare le chiavi di crittografia gestite dal cliente (CMEK) utilizzate dai nuovi pool di nodi di cui è stato eseguito il provisioning automatico.

Puoi abilitare la crittografia gestita dal cliente per le unità di avvio utilizzando un file di configurazione. La seguente configurazione YAML imposta la chiave CMEK:

  bootDiskKmsKey: projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME

Sostituisci quanto segue:

  • KEY_PROJECT_ID: l'ID progetto chiave.
  • LOCATION: la posizione del keyring.
  • KEY_RING: il nome del keyring.
  • KEY_NAME: il nome della chiave.

Per utilizzare un file di configurazione del provisioning automatico:

  1. Crea un file di configurazione specificando una chiave CMEK in una posizione in cui gcloud CLI può accedervi.

  2. Applica la configurazione al cluster eseguendo questo comando:

    gcloud container clusters update CLUSTER_NAME \
       --enable-autoprovisioning \
       --autoprovisioning-config-file FILE_NAME

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del cluster.
    • FILE_NAME: il nome del file di configurazione.

Integrità del nodo

Il provisioning automatico dei nodi supporta la creazione di pool di nodi in cui sono abilitati avvio protetto e monitoraggio dell'integrità.

Puoi attivare l'avvio protetto e il monitoraggio dell'integrità utilizzando un file di configurazione. La seguente configurazione YAML abilita l'avvio protetto e disabilita il monitoraggio dell'integrità:

  shieldedInstanceConfig:
    enableSecureBoot: true
    enableIntegrityMonitoring: false

Per utilizzare un file di configurazione del provisioning automatico:

  1. Copia la configurazione sopra riportata in un file in una posizione in cui può accedervi gcloud CLI. Modifica i valori di enableSecureBoot e enableIntegrityMonitoring. Salva il file.

  2. Applica la configurazione al cluster eseguendo questo comando:

    gcloud container clusters update CLUSTER_NAME \
       --enable-autoprovisioning \
       --autoprovisioning-config-file FILE_NAME

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del cluster.
    • FILE_NAME: il nome del file di configurazione.

Riparazione e upgrade automatico dei nodi

Il provisioning automatico dei nodi supporta la creazione di pool di nodi con la riparazione automatica dei nodi e l'upgrade automatico dei nodi abilitati.

gcloud

Per abilitare la riparazione e l'upgrade automatico per tutti i nuovi pool di nodi di cui è stato eseguito il provisioning automatico, esegui questo comando:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning --enable-autoprovisioning-autorepair \
    --enable-autoprovisioning-autoupgrade

Sostituisci CLUSTER_NAME con il nome del cluster.

Per disabilitare la riparazione e l'upgrade automatici per tutti i nuovi pool di nodi di cui è stato eseguito il provisioning automatico, esegui questo comando:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning --no-enable-autoprovisioning-autorepair \
    --no-enable-autoprovisioning-autoupgrade

Sostituisci CLUSTER_NAME con il nome del cluster.

File

Puoi abilitare o disabilitare la riparazione e l'upgrade automatico dei nodi utilizzando un file di configurazione. La seguente configurazione YAML abilita la riparazione automatica e disabilita l'upgrade automatico:

  management:
    autoRepair: true
    autoUpgrade: false

Per utilizzare un file di configurazione del provisioning automatico:

  1. Copia la configurazione sopra riportata in un file in una posizione in cui può accedervi gcloud CLI. Modifica i valori di autoUpgrade e autoRepair. Salva il file.

  2. Applica la configurazione al cluster eseguendo questo comando:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --autoprovisioning-config-file FILE_NAME

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster.
  • FILE_NAME: il nome del file di configurazione.

Utilizza gli upgrade di sovraccarico per i nuovi pool di nodi di cui è stato eseguito il provisioning automatico

Puoi specificare le impostazioni di upgrade di picco su tutti i nuovi pool di nodi di cui è stato eseguito il provisioning automatico utilizzando gcloud CLI o un file di configurazione. Per impostazione predefinita, GKE imposta la strategia di upgrade dei nodi su upgrade di sovraccarico.

gcloud

Per specificare le impostazioni di upgrade di Surge per tutti i nuovi pool di nodi di cui è stato eseguito il provisioning automatico, esegui questo comando:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --autoprovisioning-max-surge-upgrade MAX_SURGE \
    --autoprovisioning-max-unavailable-upgrade MAX_UNAVAILABLE

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster.
  • MAX_SURGE: il numero massimo di nodi che possono essere aggiunti al pool di nodi durante gli upgrade.
  • MAX_UNAVAILABLE: il numero massimo di nodi nel pool di nodi che possono essere non disponibili contemporaneamente durante gli upgrade.

File

Puoi specificare le impostazioni di upgrade di Surge per tutti i nuovi pool di nodi di cui è stato eseguito il provisioning automatico utilizzando un file di configurazione come segue:

  upgradeSettings:
    maxSurgeUpgrade: 1
    maxUnavailableUpgrade: 2

Per utilizzare un file di configurazione del provisioning automatico:

  1. Copia la configurazione riportata sopra in un file in una posizione a cui gcloud può accedervi. Modifica i valori di maxSurgeUpgrade e maxUnavailableUpgrade. Salva il file.

  2. Applica la configurazione al cluster eseguendo questo comando:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --autoprovisioning-config-file FILE_NAME

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster.
  • FILE_NAME: il nome del file di configurazione.

Per ulteriori informazioni, consulta la documentazione di gcloud container clusters update.

Per tornare a utilizzare gli upgrade di sovraccarico per i nuovi pool di nodi di cui è stato eseguito il provisioning automatico, esegui questo comando:

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning \
  --enable-autoprovisioning-surge-upgrade

Sostituisci CLUSTER_NAME con il nome del cluster.

Facoltativamente, puoi includere i flag per impostazioni specifiche, come nei comandi precedenti. GKE riutilizza la configurazione precedente per la strategia di upgrade, se impostata.

Utilizza gli upgrade blu/verde per i nuovi pool di nodi di cui è stato eseguito il provisioning automatico

Puoi utilizzare gli upgrade blu/verde per tutti i nuovi pool di nodi di cui è stato eseguito il provisioning automatico utilizzando gcloud CLI. Con gli upgrade blu/verde, puoi utilizzare le impostazioni predefinite o ottimizzarle per il tuo ambiente. Per scoprire di più sugli upgrade blu/verde, consulta Upgrade blu/verde.

Per aggiornare la strategia di upgrade dei nodi per qualsiasi pool di nodi di cui è stato eseguito il provisioning automatico, consulta Attivare o disattivare l'upgrade di incremento per un pool di nodi esistente e Aggiornare una strategia di upgrade blu/verde per il pool di nodi esistente.

Nei comandi elencati di seguito vengono utilizzate le seguenti variabili:

  • CLUSTER_NAME: il nome del cluster per il pool di nodi.
  • COMPUTE_ZONE: la zona per il cluster.
  • NODE_POOL_NAME: il nome del pool di nodi.
  • NUMBER_NODES: il numero di nodi nel pool di nodi in ciascuna delle zone del cluster.
  • BATCH_NODE_COUNT: il numero di nodi blu da svuotare in un batch durante la fase di svuotamento del pool blu. Il valore predefinito è uno. Se il valore è impostato su zero, la fase di svuotamento del pool blu verrà saltata.
  • BATCH_PERCENT: la percentuale di nodi blu da svuotare in un batch durante la fase di svuotamento del pool blu. Deve essere compresa tra 0,0 e 1,0.
  • BATCH_SOAK_DURATION: la durata in secondi di attesa dopo ogni svuotamento batch. Il valore predefinito è zero.
  • NODE_POOL_SOAK_DURATION: la durata in secondi di attesa dopo il completamento dello svuotamento di tutti i batch. Il valore predefinito è 3600 secondi.

Le impostazioni predefinite per gli upgrade blu/verde sono:

  • BATCH_NODE_COUNT = 1
  • BATCH_SOAK_DURATION = 0 secondi
  • NODE_POOL_SOAK_DURATION = 3600 secondi (1 ora)

Aggiorna un cluster per utilizzare upgrade blu/verde per i nuovi pool di nodi di cui è stato eseguito il provisioning automatico

I comandi seguenti utilizzano gcloud container clusters update per aggiornare la strategia di upgrade dei nodi per i nuovi pool di nodi di cui è stato eseguito il provisioning automatico.

Puoi utilizzare questi flag anche nei casi in cui:

Per aggiornare un cluster in modo da utilizzare upgrade blu/verde con impostazioni predefinite per i nuovi pool di nodi di cui è stato eseguito il provisioning automatico, utilizza questo comando:

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning \
  --enable-autoprovisioning-blue-green-upgrade

Puoi aggiornare un cluster per utilizzare upgrade blu/verde con impostazioni specifiche per i nuovi pool di nodi di cui è stato eseguito il provisioning automatico. Questi comandi possono essere utilizzati anche senza il flag --enable-autoprovisioning-blue-green-upgrade per aggiornare le impostazioni.

Il seguente comando utilizza BATCH_NODE_COUNT per impostare una dimensione batch per il conteggio assoluto dei nodi:

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning \
  --enable-autoprovisioning-blue-green-upgrade \
  --autoprovisioning-node-pool-soak-duration=NODE_POOL_SOAK_DURATION \
  --autoprovisioning-standard-rollout-policy=batch-node-count=BATCH_NODE_COUNT,batch-soak-duration=BATCH_SOAK_DURATION

Puoi anche utilizzare BATCH_PERCENT per impostare una dimensione del batch in percentuale, sostituendo batch-node-count nell'ultimo comando con batch-percent e utilizzando un numero decimale compreso tra 0 e 1 (ad esempio, il 25% è 0.25). Per sapere come sono impostate le dimensioni batch basate su percentuale, consulta Aggiornare un pool di nodi con upgrade blu/verde utilizzando dimensioni batch basate su percentuale.

Dischi di avvio personalizzati

Il provisioning automatico dei nodi supporta la creazione di pool di nodi con dischi di avvio personalizzati.

Puoi personalizzare l'impostazione del disco di avvio utilizzando un file di configurazione. GKE prenota una parte del disco di avvio del nodo per le funzioni kubelet. Per maggiori informazioni, consulta l'articolo Archiviazione temporanea supportata dal disco di avvio del nodo.

La seguente configurazione YAML fa sì che il provisioning automatico dei nodi crei pool di nodi con dischi SSD da 100 GB:

  diskSizeGb: 100
  diskType: pd-ssd

Specifica quanto segue:

  • diskSizeGb: la dimensione del disco specificata in GB.
  • diskType: il tipo di disco, che può avere uno dei seguenti valori:
    • pd-balanced (valore predefinito)
    • pd-standard
    • pd-ssd. In GKE 1.22 e versioni precedenti, se specifichi pd-ssd, il provisioning automatico dei nodi considera solo i tipi di macchine N1 durante la creazione dei pool di nodi.

Per utilizzare un file di configurazione del provisioning automatico:

  1. Crea un file con la configurazione del disco di avvio desiderata in una posizione in cui può accedervi gcloud CLI.

  2. Applica la configurazione al cluster eseguendo questo comando:

    gcloud container clusters update CLUSTER_NAME \
       --enable-autoprovisioning \
       --autoprovisioning-config-file FILE_NAME

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del cluster.
    • FILE_NAME: il nome del file di configurazione.

Separazione di kube-system pod dai carichi di lavoro

In qualità di amministratore del cluster, puoi separare i pod kube-system dai tuoi carichi di lavoro. Questa configurazione impedisce che il cluster abbia problemi di scale down sui nodi sottoutilizzati con pod kube-system in esecuzione.

L'esempio seguente mostra come separare i pod kube-system dai carichi di lavoro del cluster utilizzando una combinazione di provisioning automatico dei nodi e tolleranze per le incompatibilità.

  1. Crea un cluster con un pool di nodi predefinito di e2-standard-2 VM:

    gcloud container clusters create test --machine-type=e2-standard-2
    
  2. Applica un'incompatibilità al pool di nodi default-pool:

    kubectl taint nodes -l cloud.google.com/gke-nodepool=default-pool CriticalAddonsOnly=true:NoSchedule
    

    L'output è simile al seguente:

    node/gke-test-default-pool-66fd7aed-7xbd tainted
    node/gke-test-default-pool-66fd7aed-kg1x tainted
    node/gke-test-default-pool-66fd7aed-ljc7 tainted
    
  3. Abilita il provisioning automatico dei nodi per il tuo cluster:

    gcloud container clusters update test \
        --enable-autoprovisioning \
        --min-cpu 1 \
        --min-memory 1 \
        --max-cpu 10 \
        --max-memory 64 \
        --autoprovisioning-scopes= \
          https://www.googleapis.com/auth/logging.write,\
          https://www.googleapis.com/auth/monitoring, \
          https://www.googleapis.com/auth/devstorage.read_only
    

    Il cluster è in grado di scalare da una dimensione totale del cluster di 1 CPU a 1 gigabyte di memoria fino a un massimo di 10 CPU e 64 gigabyte di memoria.

  4. Verifica questa configurazione salvando il seguente manifest di esempio come nginx.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        env: test
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
      tolerations:
      - key: dedicated
        operator: Equal
        value: ui-team
        effect: NoSchedule
      nodeSelector:
        dedicated: ui-team
    

    Questo manifest esegue il deployment di un pod del carico di lavoro di test nel cluster con un'etichetta nodeSelector e un'incompatibilità dei nodi pari a dedicated: ui-team. Senza il provisioning automatico dei nodi, questo pod dei carichi di lavoro non può essere pianificato poiché nessun pool di nodi ha l'etichetta e le incompatibilità appropriate.

  5. Applica il manifest al cluster:

    kubectl apply -f nginx.yaml
    

    L'output è simile al seguente:

    pod/nginx created
    
  6. Guarda il nuovo pool di nodi che corrisponde all'etichetta ui-team:

    kubectl get node --selector=dedicated=ui-team
    

    L'output è simile al seguente:

    NAME                                            STATUS   ROLES    AGE   VERSION
    gke-test-nap-e2-medium-14b723z1-19f89fa8-jmhr   Ready    <none>   14s   v1.21.11-gke.900
    

Con il provisioning automatico dei nodi e le tolleranze per le incompatibilità, il tuo cluster separa kube-system dai pod dei carichi di lavoro.

Utilizza gli acceleratori per i nuovi pool di nodi di cui è stato eseguito il provisioning automatico

Puoi abilitare il provisioning automatico dei nodi e configurare GKE per il provisioning automatico degli acceleratori GPU o Cloud TPU per garantire la capacità necessaria per pianificare i carichi di lavoro AI/ML.

Configurazione dei limiti di GPU

Quando utilizzi il provisioning automatico dei nodi con le GPU, puoi impostare il limite massimo per ciascun tipo di GPU nel cluster utilizzando gcloud CLI o la console Google Cloud. Il numero dei limiti di GPU è il numero massimo di GPU. Ad esempio, ai fini di questo limite, una VM con 16 GPU viene conteggiata come 16 e non 1. Per configurare più tipi di GPU, devi utilizzare un file di configurazione.

Per elencare i resourceType disponibili, esegui gcloud compute accelerator-types list.

gcloud

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --max-cpu MAXIMUM_CPU \
    --max-memory MAXIMUM_MEMORY \
    --min-accelerator type=GPU_TYPE,count=MINIMUM_ACCELERATOR \
    --max-accelerator type=GPU_TYPE,count=MAXIMUM_ACCELERATOR

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster.
  • MAXIMUM_CPU: il numero massimo di core nel cluster.
  • MAXIMUM_MEMORY: numero massimo di gigabyte di memoria nel cluster.
  • GPU_TYPE: il tipo di GPU.
  • MINIMUM_ACCELERATOR: il numero minimo di acceleratori GPU nel cluster.
  • MAXIMUM_ACCELERATOR: il numero massimo di acceleratori GPU nel cluster.

L'esempio seguente imposta i limiti di GPU per il tipo di acceleratore GPU nvidia-tesla-k80 nel cluster dev-cluster:

gcloud container clusters update dev-cluster \
    --enable-autoprovisioning \
    --max-cpu 10 \
    --max-memory 64 \
    --min-accelerator type=nvidia-tesla-k80,count=1 \
    --max-accelerator type=nvidia-tesla-k80,count=4

File

Puoi utilizzare un file di configurazione per impostare i limiti di carico per più tipi di GPU. La seguente configurazione YAML configura due diversi tipi di GPU:

  resourceLimits:
    - resourceType: 'cpu'
      minimum: 4
      maximum: 10
    - resourceType: 'memory'
      maximum: 64
    - resourceType: 'nvidia-tesla-k80'
      maximum: 4
    - resourceType: 'nvidia-tesla-v100'
      maximum: 2

Per utilizzare un file di configurazione del provisioning automatico:

  1. Copia la configurazione sopra riportata in un file in una posizione in cui può accedervi gcloud CLI. Modifica i valori di cpu e memory. Aggiungi tutti i valori necessari per resourceType. Salva il file.

  2. Applica la configurazione al cluster eseguendo questo comando:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --autoprovisioning-config-file FILE_NAME

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster.
  • FILE_NAME: il nome del file di configurazione.

Per ulteriori informazioni, consulta la documentazione di gcloud container clusters update.

Console

Per abilitare il provisioning automatico dei nodi con le risorse GPU, segui questi passaggi:

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Fai clic sul nome del cluster.

  3. Nella sezione Automazione, in Provisioning automatico dei nodi, fai clic su Modifica.

  4. Seleziona la casella di controllo Abilita provisioning automatico dei nodi.

  5. Imposta l'utilizzo minimo e massimo di CPU e memoria per il cluster.

  6. Fai clic su Aggiungi risorsa.

  7. Seleziona il tipo di GPU (ad esempio, NVIDIA TESLA K80) che vuoi aggiungere. Imposta il numero minimo e massimo di GPU da aggiungere al cluster.

  8. Accetta le limitazioni delle GPU in GKE.

  9. Fai clic su Salva modifiche.

Scegli una versione del driver da installare

In GKE versione 1.29.2-gke.1108000 e successive, puoi selezionare una versione del driver GPU che GKE possa installarla automaticamente nei nodi GPU di cui è stato eseguito il provisioning automatico. Aggiungi il seguente campo al file manifest:

spec:
  nodeSelector:
    cloud.google.com/gke-gpu-driver-version: "DRIVER_VERSION"

Sostituisci DRIVER_VERSION con uno dei seguenti valori:

  • default: il driver stabile predefinito per la versione GKE del nodo. Se ometti il nodeSelector nel manifest, questa è l'opzione predefinita.
  • latest: la versione più recente disponibile del driver per la versione GKE del nodo.

Configurazione delle Cloud TPU

A partire dalla versione 1.28 di GKE, puoi utilizzare il provisioning automatico dei nodi con le Cloud TPU. Tuttavia, v5p non è supportata per il provisioning automatico dei nodi e la scalabilità automatica dei cluster. Definisci i limiti delle TPU a livello di cluster e crea i pool di nodi TPU. Per scoprire di più su come funziona il provisioning automatico dei nodi con le TPU, consulta Acceleratori di machine learning supportati.

Crea un cluster e configura i tuoi pod per l'utilizzo delle risorse TPU mediante gcloud CLI. Per configurare più tipi di TPU, devi utilizzare un file di configurazione.

gcloud

  1. Crea un cluster e definisci i limiti di TPU:

    gcloud container clusters create CLUSTER_NAME \
        --enable-autoprovisioning \
        [--min-cpu  MINIMUM_CPU ] \
        --max-cpu MAXIMUM_CPU \
        [--min-memory MINIMUM_MEMORY ] \
        --max-memory MAXIMUM_MEMORY \
        [--min-accelerator=type=TPU_TYPE,count= MINIMUM_ACCELERATOR ] \
        --max-accelerator=type=TPU_TYPE,count= MAXIMUM_ACCELERATOR
    

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del cluster.
    • MINIMUM_CPU: il numero minimo di vCPU nel cluster.
    • MAXIMUM_CPU: il numero massimo di vCPU nel cluster.
    • MINIMUM_MEMORY:il numero minimo di gigabyte di memoria nel cluster.
    • MAXIMUM_MEMORY: il numero massimo di gigabyte di memoria nel cluster.
    • TPU_TYPE: il tipo di TPU che scegli. Utilizza tpu-v4-podslice per selezionare TPU v4. Per selezionare TPU v5e con un tipo di macchina che inizia con ct5lp-, utilizza tpu-v5-lite-podslice. Per selezionare TPU v5e con un tipo di macchina che inizia con ct5l-, utilizza tpu-v5-lite-device.
    • MINIMUM_ACCELERATOR: il numero minimo di chip TPU nel cluster.
      • Tieni presente che l'utilizzo di MINIMUM_ACCELERATOR potrebbe bloccare fare lo scale down delle sezioni TPU multi-host anche se count è inferiore al numero di chip TPU nella sezione.
    • MAXIMUM_ACCELERATOR: il numero massimo di chip TPU nel cluster.
      • Se la configurazione del pod richiede una sezione TPU multi-host, GKE la crea a livello atomico. Imposta il valore del conteggio su un valore sufficientemente elevato da consentire il provisioning di tutti i chip TPU della topologia specificata. Il numero di chip in ogni sezione TPU è uguale al prodotto della topologia. Ad esempio, se la topologia della sezione TPU multi-host è 2x2x2, il numero di chip TPU è uguale a 8, quindi MAXIMUM_ACCELERATOR deve essere superiore a 8.

    L'esempio seguente imposta i limiti TPU per i tipi di macchine ct5lp-hightpu-1t, ct5lp-hightpu-4t e ct5lp-hightpu-8t nel cluster dev-cluster. Ad esempio, è stato possibile eseguire il provisioning di un massimo di dieci macchine ct5lp-hightpu-4t, ciascuna con 4 chip TPU, 112 vCPU e 192 GiB di memoria.

    gcloud container clusters create dev-cluster-inference \
          --enable-autoprovisioning \
          --min-cpu 0 \
          --max-cpu 1120 \
          --min-memory 0 \
          --max-memory 1920 \
          --min-accelerator=type=tpu-v5-lite-podslice,count=0 \
          --max-accelerator=type=tpu-v5-lite-podslice,count=40
    
  2. Creare una specifica del deployment in modo che un pod richieda risorse TPU. Ad esempio, il seguente manifest causerà il provisioning di quattro nodi ct5lp-hightpu-4t da parte di GKE:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tpu-workload
      labels:
        app: tpu-workload
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: nginx-tpu
      template:
        metadata:
          labels:
            app: nginx-tpu
        spec:
          nodeSelector:
            cloud.google.com/gke-tpu-accelerator: tpu-v5-lite-podslice
            cloud.google.com/gke-tpu-topology:  2x2
            cloud.google.com/reservation-name: my-reservation
          containers:
          - name: nginx
            image: nginx:1.14.2
            resources:
              requests:
                google.com/tpu: 4
              limits:
                google.com/tpu: 4
            ports:
            - containerPort: 80
    

    Nel campo nodeSelector, definisci il tipo di TPU, la topologia TPU e il numero di acceleratori, dove:

    • cloud.google.com/gke-tpu-accelerator: definisce il tipo di TPU. Ad esempio, tpu-v4-podslice.
    • cloud.google.com/gke-tpu-topology: definisce la topologia TPU, ad esempio 2x2x1 o 4x4x8.

    Per utilizzare una prenotazione esistente con il tuo carico di lavoro, specifica un'etichetta aggiuntiva nel campo nodeSelector: * cloud.google.com/reservation-name: definisce il nome della prenotazione utilizzata da GKE per il provisioning automatico dei nodi.

    In limits: google.com/tpu definisci il numero di chip per nodo.

File

Puoi assegnare limiti a più tipi di TPU utilizzando un file di configurazione. La seguente configurazione YAML configura due diversi tipi di TPU:

  resourceLimits:
    - resourceType: 'cpu'
      maximum: 10000
    - resourceType: 'memory'
      maximum: 10000
    - resourceType: 'tpu-v4-podslice'
      maximum: 32
    - resourceType: 'tpu-v5-lite'
      maximum: 64

Per utilizzare un file di configurazione del provisioning automatico:

  1. Copia la configurazione sopra riportata in un file in una posizione in cui può accedervi gcloud CLI. Modifica i valori di resourceType e maximum. Aggiungi tutti i valori necessari per resourceType. Salva il file.

  2. Applica la configurazione al cluster eseguendo questo comando:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --autoprovisioning-config-file FILE_NAME

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster.
  • FILE_NAME: il nome del file di configurazione.

Per ulteriori informazioni, consulta la documentazione di gcloud container clusters update.

Località di provisioning automatico dei nodi

Puoi impostare le zone in cui il provisioning automatico dei nodi può creare nuovi pool di nodi. Le località regionali non sono supportate. Le zone devono appartenere alla stessa regione del cluster, ma non sono limitate alle località dei nodi definite a livello di cluster. La modifica delle località di provisioning automatico dei nodi non influisce sui pool di nodi esistenti.

Per impostare le località in cui il provisioning automatico dei nodi può creare nuovi pool di nodi, utilizza gcloud CLI o un file di configurazione.

gcloud

Esegui questo comando:

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning --autoprovisioning-locations=ZONE

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster.
  • ZONE: la zona in cui il provisioning automatico dei nodi può creare nuovi pool di nodi. Per specificare più zone, separale con una virgola (ad esempio, ZONE1, ZONE2,...).

File

Per impostare le località in cui il provisioning automatico dei nodi può creare nuovi pool di nodi, puoi utilizzare un file di configurazione.

Aggiungi la seguente configurazione YAML che imposta la nuova posizione dei pool di nodi:

    autoprovisioningLocations:
      - ZONE

Sostituisci ZONE con la zona in cui il provisioning automatico dei nodi può creare nuovi pool di nodi. Per specificare più zone, aggiungine altre all'elenco. Salva il file.

Per utilizzare un file di configurazione del provisioning automatico:

  1. Crea un file di configurazione in una posizione a cui gcloud CLI possa accedervi.

  2. Applica la configurazione al cluster:

    gcloud container clusters update CLUSTER_NAME \
        --enable-autoprovisioning \
        --autoprovisioning-config-file FILE_NAME
    

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del cluster.
    • FILE_NAME: il percorso del file di configurazione.

Nodi fisicamente più vicini con posizionamento compatto

A partire dalla versione 1.25 di GKE, il provisioning automatico dei nodi supporta il criterio di posizionamento compatto. Con il criterio di posizionamento compatto, puoi indicare a GKE di creare pool di nodi più vicini tra loro all'interno di una zona.

Per definire un criterio di posizionamento compatto, aggiungi un nodeSelector alla specifica del pod con le seguenti chiavi:

  • cloud.google.com/gke-placement-group è l'identificatore che assegni al gruppo di pod che devono essere eseguiti insieme, nello stesso gruppo di posizionamenti compatto.

  • cloud.google.com/machine-family è il nome della famiglia di macchine. Per ulteriori informazioni, consulta le famiglie di macchine che supportano il posizionamento compatto.

L'esempio seguente imposta un criterio di posizionamento compatto con un identificatore di gruppo di posizionamenti placement-group-1 e una famiglia di macchine c2:

apiVersion: v1
kind: Pod
metadata:
  ...
spec:
  ...
  nodeSelector:
    cloud.google.com/gke-placement-group: placement-group-1
    cloud.google.com/machine-family: c2

Per maggiori informazioni, consulta l'articolo su come definire un posizionamento compatto per i nodi GKE.

Disabilitazione del provisioning automatico dei nodi

Quando disabiliti il provisioning automatico dei nodi per un cluster, per i pool di nodi non viene più eseguito il provisioning automatico.

gcloud

Per disabilitare il provisioning automatico dei nodi per un cluster, esegui questo comando:

gcloud container clusters update CLUSTER_NAME \
  --no-enable-autoprovisioning

Sostituisci CLUSTER_NAME con il nome del cluster.

File

Per disattivare il provisioning automatico dei nodi utilizzando la console Google Cloud:

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Fai clic sul nome del cluster.

  3. Nella sezione Automazione, in Provisioning automatico dei nodi, fai clic su Modifica.

  4. Deseleziona la casella di controllo Abilita provisioning automatico dei nodi.

  5. Fai clic su Salva modifiche.

Contrassegno del pool di nodi come provisioning automatico

Dopo aver abilitato il provisioning automatico dei nodi sul cluster, puoi specificare per quali pool di nodi viene eseguito il provisioning automatico. Un pool di nodi di cui è stato eseguito il provisioning automatico viene eliminato automaticamente quando non è utilizzato da nessun carico di lavoro.

Per contrassegnare un pool di nodi come provisioning automatico, esegui questo comando:

gcloud container node-pools update NODE_POOL_NAME \
  --enable-autoprovisioning

Sostituisci NODE_POOL_NAME con il nome del pool di nodi.

Contrassegno del pool di nodi come senza provisioning automatico

Per contrassegnare un pool di nodi come non provisioning automatico, esegui questo comando:

gcloud container node-pools update NODE_POOL_NAME \
  --no-enable-autoprovisioning

Sostituisci NODE_POOL_NAME con il nome del pool di nodi.

Utilizzo di una famiglia di macchine personalizzate

A partire dalla versione 1.19.7-gke.800 di GKE, puoi scegliere una famiglia di macchine per i tuoi carichi di lavoro. La famiglia di macchine T2D è supportata in GKE versione 1.22 e successive.

Per scegliere una famiglia di macchine per i tuoi carichi di lavoro, esegui una delle seguenti attività:

  • Imposta l'affinità del nodo con la chiave cloud.google.com/machine-family, l'operatore In e il valore corrispondente alla famiglia di macchine desiderata (ad esempio n2).
  • Aggiungi un elemento nodeSelector con la chiave cloud.google.com/machine-family e il valore corrispondente alla famiglia di macchine desiderata.

Ecco un esempio che imposta nodeAffinity su una famiglia di macchine di n2:

spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: cloud.google.com/machine-family
            operator: In
            values:
            - n2

Dopo aver applicato le modifiche, il provisioning automatico dei nodi sceglie il pool di nodi migliore con un tipo di macchina all'interno della famiglia di macchine specificata. Se per l'espressione di corrispondenza vengono utilizzati più valori, verrà scelto arbitrariamente un valore.

Piattaforma CPU minima

Il provisioning automatico dei nodi supporta la creazione di pool di nodi con una piattaforma CPU minima specificata. Puoi specificare la piattaforma CPU minima a livello di carico di lavoro (consigliato) o a livello di cluster.

Passaggi successivi