Utilizzare il provisioning automatico dei nodi


Questa pagina spiega come utilizzare il provisioning automatico dei nodi nei cluster Google Kubernetes Engine (GKE) standard. Prima di leggere questa pagina, assicurati di conoscere il provisioning automatico dei nodi.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:

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

Requisiti

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

  • Versione 1.27.6 e successive o 1.28 e successive per Cloud TPU v4 e v5e.
  • Versione 1.28.7-gke.1020000 o successiva e 1.29.2-gke.1035000 o successiva per Cloud TPU v5p.
  • Versione 1.31.1-gke.1146000 o successive per Cloud TPU v6e in anteprima.

Abilita provisioning automatico dei nodi

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

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

Devi pianificare attentamente l'intervallo di indirizzi IP del nodo. Puoi espandere l'intervallo di indirizzi IP dei nodi dopo aver creato un cluster. Tuttavia, ti consigliamo di non espandere l'intervallo di indirizzi IP del nodo dopo aver creato il cluster, in quanto dovrai aggiornare le regole del firewall per includere il nuovo intervallo come origine. Puoi espandere l'intervallo di indirizzi IP del pod utilizzando il CIDR multi-pod disgiunto con il provisioning automatico dei nodi.

gcloud

Per abilitare il provisioning automatico dei nodi, esegui il seguente 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: il numero minimo di gigabyte di memoria nel cluster.
  • MAXIMUM_CPU: il numero massimo di core nel cluster.
  • MAXIMUM_MEMORY: il numero massimo di gigabyte di memoria nel cluster.

Il seguente esempio 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 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, svolgi i passaggi che seguono:

  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 per il provisioning automatico

L'autoprovisioning 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. In un singolo file di configurazione è possibile specificare più impostazioni. In questo caso, tutte queste impostazioni verranno modificate quando viene applicato il file di configurazione.

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

Esempio 1: l'applicazione del seguente file di configurazione abilita la riparazione e l'upgrade automatici dei nodi per tutti i nuovi pool di nodi creati tramite il provisioning automatico dei nodi:

management:
  autoRepair: true
  autoUpgrade: true

Esempio 2: l'applicazione del seguente file di configurazione modificherebbe le seguenti impostazioni:

  • Imposta i limiti di risorse per CPU, memoria e GPU. Il provisioning automatico dei nodi non creerà un nodo se le dimensioni totali del cluster superano i limiti di risorse specificati.
  • Attiva la riparazione e l'upgrade automatici dei nodi per tutti i nuovi pool di nodi creati tramite il 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 la dimensione del disco di avvio su 100 GB per tutti i nuovi pool di nodi creati tramite il provisioning automatico dei nodi.
resourceLimits:
  - resourceType: 'cpu'
    minimum: 4
    maximum: 10
  - resourceType: 'memory'
    maximum: 64
  - resourceType: 'nvidia-tesla-t4'
    maximum: 4
management:
  autoRepair: true
  autoUpgrade: true
shieldedInstanceConfig:
  enableSecureBoot: true
  enableIntegrityMonitoring: true
diskSizeGb: 100

Per utilizzare un file di configurazione di provisioning automatico:

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

  2. Applica la configurazione al cluster eseguendo il seguente 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 esamina i requisiti dei pod nel cluster per determinare quale tipo di nodi è più adatto a questi pod. Tuttavia, alcune impostazioni del pool di nodi non sono specificate direttamente dai pod (ad esempio le impostazioni relative agli upgrade dei nodi). Puoi definire 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 del nodo da utilizzare per tutti i nuovi pool di nodi di cui è stato eseguito il provisioning automatico utilizzando la 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 del nodo predefinito, esegui il seguente 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 del nodo da utilizzare utilizzando un file di configurazione. La seguente configurazione YAML specifica che per i nuovi pool di nodi con provisioning automatico, il tipo di immagine è cos_containerd e sono associati limiti di risorse per CPU e memoria. Per attivare il provisioning automatico, devi specificare i valori massimi per CPU e memoria.

  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 delle impostazioni predefinite dell'identità per i pool di nodi di cui è stato eseguito il provisioning automatico

Le autorizzazioni per le risorse Google Cloud sono fornite dalle identità.

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 il seguente 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 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 il seguente 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 con provisioning automatico. Per specificare più ambiti, separali con una virgola (ad esempio, SCOPE1, SCOPE2,...).

L'esempio seguente imposta l'ambito predefinito sul 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'identità predefinita utilizzata dal provisioning automatico dei nodi utilizzando un file di configurazione. La seguente configurazione YAML imposta l'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 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 di provisioning automatico:

  1. Crea un file di configurazione che specifichi i valori predefiniti per le identità in una posizione dove l'gcloud CLI possa accedervi.

  2. Applica la configurazione al cluster eseguendo il seguente 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 node pool con provisioning automatico.

Puoi attivare 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 del tuo progetto principale.
  • LOCATION: la posizione del mazzo di chiavi.
  • KEY_RING: il nome del tuo mazzo di chiavi.
  • KEY_NAME: il nome della chiave.

Per utilizzare un file di configurazione di provisioning automatico:

  1. Crea un file di configurazione che specifichi una chiave CMEK in una posizione a cui può accedere la gcloud CLI.

  2. Applica la configurazione al cluster eseguendo il seguente 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à dei nodi

Il provisioning automatico dei nodi supporta la creazione di node pool conavvio protetto e monitoraggio dell'integrità abilitati.

Puoi attivare l'avvio protetto e il monitoraggio dell'integrità utilizzando un file di configurazione. La seguente configurazione YAML attiva il Boot sicuro e disattiva il monitoraggio dell'integrità:

  shieldedInstanceConfig:
    enableSecureBoot: true
    enableIntegrityMonitoring: false

Per utilizzare un file di configurazione di provisioning automatico:

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

  2. Applica la configurazione al cluster eseguendo il seguente 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 automatici dei nodi

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

gcloud

Per abilitare la riparazione e l'upgrade automatici per tutti i nuovi pool di nodi con provisioning automatico, esegui il seguente comando:

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

Sostituisci CLUSTER_NAME con il nome del cluster.

Per disattivare la riparazione e l'upgrade automatici per tutti i nuovi pool di nodi con provisioning automatico, esegui il seguente 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 attivare o disattivare la riparazione automatica e l'upgrade automatico dei nodi utilizzando un file di configurazione. La seguente configurazione YAML attiva la riparazione automatica e disattiva l'upgrade automatico:

  management:
    autoRepair: true
    autoUpgrade: false

Per utilizzare un file di configurazione di provisioning automatico:

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

  2. Applica la configurazione al cluster eseguendo il seguente 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.

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

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

gcloud

Per specificare le impostazioni di upgrade per l'aumento improvviso della domanda per tutti i nuovi node pool di cui è stato eseguito il provisioning automatico, esegui il seguente 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 non essere disponibili contemporaneamente durante gli upgrade.

File

Puoi specificare le impostazioni di upgrade per l'aumento improvviso della domanda per tutti i nuovi pool di nodi di cui è stato eseguito il provisioning automatico utilizzando un file di configurazione come il seguente:

  upgradeSettings:
    maxSurgeUpgrade: 1
    maxUnavailableUpgrade: 2

Per utilizzare un file di configurazione di provisioning automatico:

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

  2. Applica la configurazione al cluster eseguendo il seguente 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 picco per i nuovi pool di nodi con provisioning automatico, esegui il seguente comando:

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

Sostituisci CLUSTER_NAME con il nome del cluster.

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

Utilizzare gli upgrade blue-green per i nuovi pool di nodi di cui è stato eseguito il provisioning automatico

Puoi utilizzare gli upgrade blue-green per tutti i nuovi pool di nodi di cui è stato eseguito il provisioning automatico utilizzando gcloud CLI. Con gli upgrade blue-green, 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 con provisioning automatico esistente, consulta Attivare o disattivare l'upgrade per picco per un pool di nodi esistente e Aggiornare una strategia di upgrade blue-green per un 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 del 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 è 1. Se il valore è impostato su zero, la fase di svuotamento del pool blu verrà ignorata.
  • BATCH_PERCENT: la percentuale di nodi blu da svuotare in un batch durante la fase di svuotamento del pool blu. Deve essere compreso nell'intervallo [0,0, 1,0].
  • BATCH_SOAK_DURATION: la durata in secondi da attendere dopo lo svuotamento di ogni batch. Il valore predefinito è zero.
  • NODE_POOL_SOAK_DURATION: la durata in secondi da attendere dopo aver completato lo svuotamento di tutti i batch. Il valore predefinito è 3600 secondi.

Le impostazioni predefinite per gli upgrade blu/verdi sono:

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

Aggiornare un cluster in modo da utilizzare gli upgrade blue-green per i nuovi pool di nodi con provisioning automatico

I seguenti comandi utilizzano gcloud container clusters update per aggiornare la strategia di upgrade dei nodi per i nuovi pool di nodi con provisioning automatico.

Puoi utilizzare questi flag anche quando:

Per aggiornare un cluster in modo che utilizzi gli upgrade blue-green con le impostazioni predefinite per i nuovi pool di nodi con provisioning automatico, utilizza questo comando:

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

Puoi aggiornare un cluster in modo da utilizzare gli upgrade blue-green 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 un numero assoluto di nodi come dimensione del batch:

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 batch basata su percentuale, sostituendo batch-node-count nell'ultimo comando con batch-percent e utilizzando un numero decimale compreso tra 0 e 1 (ad es. 25% è 0.25). Per scoprire come vengono impostate le dimensioni batch basate su percentuale, consulta Aggiornare un pool di nodi con l'upgrade blue/green 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 riserva una parte del disco di avvio del nodo per le funzioni kubelet. Per saperne di più, consulta Spazio di archiviazione temporaneo basato sul disco di avvio del nodo.

La seguente configurazione YAML consente al provisioning automatico dei nodi di creare pool di nodi con dischi SSD da 100 GB:

  diskSizeGb: 100
  diskType: pd-ssd

Specifica quanto segue:

  • diskSizeGb: le dimensioni del disco, specificate in GB.
  • diskType: il tipo di disco, che può essere uno dei seguenti valori:
    • pd-balanced (valore predefinito)
    • pd-standard
    • pd-ssd. Nella versione 1.22 e precedenti di GKE, se specifichi pd-ssd, il provisioning automatico dei nodi prende in considerazione solo tipi di macchine N1 durante la creazione dei pool di nodi.

Per utilizzare un file di configurazione di provisioning automatico:

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

  2. Applica la configurazione al cluster eseguendo il seguente 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.

Separa i pod gestiti da GKE dai tuoi workload

In qualità di amministratore del cluster, potresti voler separare i pod gestiti da GKE dai tuoi carichi di lavoro. Questa separazione consente di evitare problemi di riduzione se nel cluster sono presenti nodi sottoutilizzati su cui sono in esecuzione pod di sistema.

Il seguente esempio mostra come separare i pod gestiti dai carichi di lavoro utilizzando una combinazione di provisioning automatico dei nodi e incompatibilità e tolleranze Kubernetes.

  1. Crea un cluster con un pool di nodi predefinito di e2-standard-2 VM e applica un inquinamento dei nodi che consente di eseguire solo i carichi di lavoro di sistema GKE su questi nodi:

    gcloud container clusters create test-cluster \
        --machine-type=e2-standard-2 \
        --node-taints=components.gke.io/gke-managed-components=true:NoSchedule
    
  2. Abilita il provisioning automatico dei nodi per il cluster:

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

    Il cluster può scalare da una dimensione totale di 1 CPU e 1 gigabyte di memoria a un massimo di 10 CPU e 64 gigabyte di memoria.

  3. Testa 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 di carico di lavoro di test nel cluster con un'etichetta nodeSelector e un'alterazione del nodo di dedicated: ui-team. Senza il provisioning automatico dei nodi, questo pod del carico di lavoro non può essere pianificato poiché nessun pool di nodi ha l'etichetta corretta e le mancate corrispondenze.

  4. Applica il manifest al cluster:

    kubectl apply -f nginx.yaml
    

    L'output è simile al seguente:

    pod/nginx created
    
  5. Visualizza 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
    

Il cluster separa i tuoi workload dai pod GKE gestiti.

Limita il tempo di esecuzione dei nodi di cui è stato eseguito il provisioning automatico

In GKE versione 1.31.1-gke.1146000 e versioni successive, puoi limitare il tempo di esecuzione dei nodi di cui è stato eseguito il provisioning automatico utilizzando il selettore di nodi cloud.google.com/gke-max-run-duration-seconds. Aggiungi il seguente campo al manifest:

spec:
  nodeSelector:
    cloud.google.com/gke-max-run-duration-seconds: "MAX_RUN_DURATION"

Sostituisci MAX_RUN_DURATION con la durata in secondi per cui vuoi che il nodo di cui è stato eseguito il provisioning automatico venga eseguito prima di essere terminato automaticamente. Per informazioni sulle limitazioni, consulta Limitazioni di MaxRunDuration.

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

Puoi attivare il provisioning automatico dei nodi e configurare GKE in modo da eseguire automaticamente il provisioning di acceleratori GPU o Cloud TPU per garantire la capacità necessaria per pianificare i carichi di lavoro di AI/ML.

Configurazione dei limiti della GPU

Quando utilizzi il provisioning automatico dei nodi con le GPU, puoi impostare il limite massimo per ogni tipo di GPU nel cluster utilizzando l'interfaccia a riga di comando gcloud o la console Google Cloud. Il conteggio del limite 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 come 1. Per configurare più tipi di GPU, devi utilizzare un file di configurazione.

Per elencare i tipi di risorse 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: il 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 GPU per il tipo di acceleratore GPU nvidia-tesla-t4 nel cluster dev-cluster:

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

File

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

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

Per utilizzare un file di configurazione di provisioning automatico:

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

  2. Applica la configurazione al cluster eseguendo il seguente 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 attivare il provisioning automatico dei nodi con risorse GPU, svolgi i seguenti 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 T4) 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 da installare automaticamente da GKE nei nodi GPU con provisioning automatico. Aggiungi il seguente campo al 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 tuo nodo. Se ometti il nodeSelector nel manifest, questa è l'opzione predefinita.
  • latest: la versione del driver più recente disponibile per la versione GKE del tuo nodo.

Configurazione delle Cloud 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 pod in modo che utilizzino le risorse TPU utilizzando 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 scelto:
      • Per selezionare la TPU v4, utilizza tpu-v4-podslice.
      • 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
      • Per selezionare TPU v5p con un tipo di macchina che inizia con ct5p-, utilizza tpu-v5p-slice.
      • Per selezionare la TPU v6e, utilizza tpu-v6e-slice. TPU v6e è in anteprima.
    • 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 MINIMUM_ACCELERATOR è inferiore al numero di chip TPU nella sezione.count
    • MAXIMUM_ACCELERATOR: il numero massimo di chip TPU nel cluster.
      • Se la configurazione del pod richiede una sezione TPU multi-host, GKE la crea in modo atomico. Imposta il valore count sufficientemente alto da consentire il provisioning di tutti i chip TPU della topologia specificata. Il numero di chip in ogni sezione TPU equivale al prodotto della topologia. Ad esempio, se la topologia della sezione TPU multi-host è 2x2x2, il numero di chip TPU è pari a 8, pertanto 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 dev-cluster cluster. Ad esempio, è 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. Crea una specifica di deployment che generi un pod che 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 TPU per nodo.

File

Puoi assegnare limiti per 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 di provisioning automatico:

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

  2. Applica la configurazione al cluster eseguendo il seguente 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à del provisioning automatico dei nodi

Imposti le zone in cui il provisioning automatico dei nodi può creare nuovi node pool. 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à per il 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 node pool, 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 node pool, puoi utilizzare un file di configurazione.

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

    autoprovisioningLocations:
      - ZONE

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

Per utilizzare un file di configurazione di provisioning automatico:

  1. Crea un file di configurazione in una posizione dove 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 più vicini fisicamente 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 di 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 deve essere eseguito insieme nello stesso gruppo di posizionamenti compatti.

  • 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 del gruppo di posizionamento 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 ulteriori informazioni, scopri come definire il posizionamento compatto per i nodi GKE.

Disattivazione del provisioning automatico dei nodi

Quando disattivi il provisioning automatico dei nodi per un cluster, i node pool non vengono più provisioning automatico.

gcloud

Per disattivare il provisioning automatico dei nodi per un cluster, esegui il seguente 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.

Marcatura del pool di nodi come sottoposto a provisioning automatico

Dopo aver abilitato il provisioning automatico dei nodi nel cluster, puoi specificare i pool di nodi di cui viene eseguito il provisioning automatico. Un pool di nodi con provisioning automatico viene eliminato automaticamente quando non viene utilizzato da nessun workload.

Per contrassegnare un pool di nodi come sottoposto a provisioning automatico, esegui il seguente comando:

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

Sostituisci NODE_POOL_NAME con il nome del pool di nodi.

Contrassegnare il pool di nodi come non sottoposto a provisioning automatico

Per contrassegnare un pool di nodi come non sottoposto a provisioning automatico, esegui il seguente 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 personalizzata

Puoi scegliere una serie di macchine Compute Engine specifica, ad esempio n2 o t2d, per i tuoi carichi di lavoro impostando uno dei seguenti campi nel manifest:

  • Imposta l'affinità dei nodi con la chiave cloud.google.com/machine-family, l'operatore In e il valore della famiglia di macchine desiderata (ad esempio, n2).
  • Aggiungi un nodeSelector con la chiave cloud.google.com/machine-family e il valore della 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 serie di macchine specificata. Se specifichi più voci per matchExpressions, GKE sceglie arbitrariamente una serie di macchine dalle voci specificate.

Controllare gli attributi dei nodi utilizzando una classe di calcolo personalizzata

Per un maggiore controllo sugli attributi dei node pool di cui è stato eseguito il provisioning automatico, crea e utilizza le classi di calcolo personalizzate. Le classi di calcolo personalizzate ti consentono di configurare i comportamenti di scalabilità, ad esempio le priorità di riserva quando scegli i tipi di macchine per i nodi o soglie di utilizzo delle risorse specifiche che attivano il consolidamento dei carichi di lavoro sui nodi per liberare le risorse inutilizzate. Le classi di calcolo personalizzate sono disponibili per l'utilizzo in GKE 1.30.3-gke.1451000 e versioni successive.

Per scoprire le funzionalità delle classi di calcolo personalizzate e come utilizzarle con il provisioning automatico dei nodi, consulta Informazioni sulle classi di calcolo personalizzate.

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 (opzione consigliata) o a livello di cluster.

Passaggi successivi