Informazioni sulla scalabilità automatica dei cluster


Questa pagina spiega in che modo Google Kubernetes Engine (GKE) ridimensiona automaticamente i pool di nodi del tuo cluster standard in base alle esigenze dei tuoi carichi di lavoro. Quando la domanda è elevata, il gestore della scalabilità automatica dei cluster aggiunge nodi al pool. Per scoprire come configurare il gestore della scalabilità automatica dei cluster, consulta la pagina relativa alla scalabilità automatica di un cluster.

Con i cluster Autopilot, non devi preoccuparti di eseguire il provisioning dei nodi o della gestione dei pool di nodi, poiché il provisioning viene eseguito automaticamente dal pool di nodi tramite il provisioning automatico dei nodi e scalato automaticamente per soddisfare i requisiti dei carichi di lavoro.

Perché utilizzare il gestore della scalabilità automatica dei cluster

Il gestore della scalabilità automatica dei cluster di GKE ridimensiona automaticamente il numero di nodi in un determinato pool di nodi in base alle esigenze dei tuoi carichi di lavoro. Quando la domanda è bassa, il gestore della scalabilità automatica dei cluster torna a una dimensione minima designata. Questo può aumentare la disponibilità dei tuoi carichi di lavoro quando ne hai bisogno, controllando al contempo i costi. Non è necessario aggiungere o rimuovere manualmente i nodi o eseguire un provisioning eccessivo dei pool di nodi. Devi invece specificare le dimensioni minima e massima per il pool di nodi, mentre il resto è automatico.

Se le risorse vengono eliminate o spostate durante la scalabilità automatica del cluster, i carichi di lavoro potrebbero subire interruzioni temporanee. Ad esempio, se il carico di lavoro è costituito da un controller con un'unica replica, il pod della replica potrebbe essere ripianificato su un nodo diverso se viene eliminato il nodo attuale. Prima di abilitare il gestore della scalabilità automatica dei cluster, progetta i tuoi carichi di lavoro per tollerare potenziali interruzioni o assicurarti che i pod critici non vengano interrotti.

Puoi aumentare le prestazioni del gestore della scalabilità automatica dei cluster con il streaming di immagini, che permette di inviare da remoto flussi di dati delle immagini richieste dalle immagini container idonee e di memorizzarle nella cache locale per consentire l'avvio più rapido dei carichi di lavoro su nuovi nodi.

Come funziona il gestore della scalabilità automatica dei cluster

Il gestore della scalabilità automatica dei cluster funziona in base al pool di nodi. Quando configuri un pool di nodi con il gestore della scalabilità automatica dei cluster, specifichi una dimensione minima e massima per il pool di nodi.

Il gestore della scalabilità automatica dei cluster aumenta o diminuisce automaticamente le dimensioni del pool di nodi aggiungendo o rimuovendo istanze di macchine virtuali (VM) nel gruppo di istanze gestite (MIG) sottostante di Compute Engine per il pool di nodi. Il gestore della scalabilità automatica dei cluster prende queste decisioni per la scalabilità in base alle richieste di risorse (anziché all'utilizzo effettivo delle risorse) dei pod in esecuzione sui nodi del pool di nodi. Controlla periodicamente lo stato dei pod e dei nodi e interviene:

  • Se i pod non sono pianificabili perché il numero di nodi nel pool non è sufficiente, il gestore della scalabilità automatica dei cluster aggiunge nodi fino alla dimensione massima del pool di nodi.
  • Se i nodi sono sottoutilizzati e tutti i pod possono essere pianificati anche con meno nodi nel pool di nodi, il gestore della scalabilità automatica dei cluster rimuove i nodi fino alla dimensione minima del pool di nodi. Se su un nodo ci sono pod che non possono essere spostati su altri nodi del cluster, il gestore della scalabilità automatica dei cluster non tenta di fare lo scale down del nodo. Se i pod possono essere spostati su altri nodi, ma non è possibile svuotare liberamente il nodo dopo un periodo di timeout (attualmente di 10 minuti), il nodo viene forzato. Il periodo di tolleranza non è configurabile per i cluster GKE. Per ulteriori informazioni su come funziona lo scale down, consulta la documentazione del gestore della scalabilità automatica dei cluster.

Se i tuoi pod hanno richiesto un numero troppo ridotto di risorse (o non hanno modificato i valori predefiniti, valore potenzialmente insufficiente) e i tuoi nodi stanno registrando carenze, il gestore della scalabilità automatica dei cluster non risolve la situazione. Puoi contribuire a garantire che il gestore della scalabilità automatica dei cluster funzioni nel modo più accurato possibile inviando richieste di risorse esplicite per tutti i tuoi carichi di lavoro.

Criteri operativi

Il gestore della scalabilità automatica dei cluster fa le seguenti ipotesi durante il ridimensionamento di un pool di nodi:

  • Tutti i pod replicati possono essere riavviati su un altro nodo, causando potenziale interruzione. Se i servizi non sono a tolleranza di interruzione, non è consigliabile utilizzare il gestore della scalabilità automatica dei cluster.
  • Gli utenti o gli amministratori non gestiscono manualmente i nodi e possono eseguire l'override di qualsiasi operazione di gestione dei nodi manuale eseguita.
  • Tutti i nodi in un singolo pool di nodi hanno lo stesso insieme di etichette.
  • Il gestore della scalabilità automatica dei cluster considera il costo relativo dei tipi di istanze nei vari pool e tenta di espandere il pool di nodi meno costoso. Viene preso in considerazione il costo ridotto dei pool di nodi contenenti VM Spot.
  • Le etichette aggiunte manualmente dopo la creazione iniziale del cluster o del pool di nodi non vengono monitorate. Ai nodi creati dal gestore della scalabilità automatica dei cluster vengono assegnate etichette specificate con --node-labels al momento della creazione del pool di nodi.
  • Nella versione 1.21 o precedenti di GKE, il gestore della scalabilità automatica dei cluster considera le informazioni di incompatibilità dei nodi esistenti di un pool di nodi per rappresentare l'intero pool di nodi. A partire dalla versione 1.22 di GKE, il gestore della scalabilità automatica dei cluster combina le informazioni dei nodi esistenti nel cluster e nel pool di nodi. Il gestore della scalabilità automatica dei cluster rileva le modifiche manuali al nodo e al pool di nodi per fare lo scale up.

Equilibrio tra zone

Se il pool di nodi contiene più gruppi di istanze gestite con lo stesso tipo di istanza, il gestore della scalabilità automatica del cluster cerca di mantenere le dimensioni di questi gruppi di istanze gestite quando viene fatto lo scale up. In questo modo è possibile impedire una distribuzione irregolare dei nodi tra gruppi di istanze gestite in più zone di un pool di nodi. GKE non considera il criterio di scalabilità automatica quando esegue lo scale down.

Criteri di posizione

A partire dalla versione 1.24.1-gke.800 di GKE, puoi modificare il criterio di località del gestore della scalabilità automatica dei cluster GKE. Puoi controllare il criterio di distribuzione del gestore della scalabilità automatica dei cluster specificando il flag location_policy con uno qualsiasi dei seguenti valori:

  • BALANCED: il gestore della scalabilità automatica considera i requisiti dei pod e la disponibilità di risorse in ogni zona. Ciò non garantisce che gruppi di nodi simili avranno esattamente le stesse dimensioni, poiché il gestore della scalabilità automatica considera molti fattori, tra cui la capacità disponibile in una determinata zona e affinità di zona dei pod che hanno attivato lo scale up.
  • ANY: il gestore della scalabilità automatica dà la priorità all'utilizzo delle prenotazioni e degli account inutilizzati per i vincoli attuali delle risorse disponibili.

    Questo criterio è consigliato se utilizzi VM Spot o se vuoi usare prenotazioni VM diverse dalle zone

Valori predefiniti

Per i pool di nodi Spot VM, il criterio di distribuzione predefinito del gestore della scalabilità automatica dei cluster è ANY. In questo criterio, le VM Spot hanno un rischio inferiore di essere prerilasciate.

Per i pool di nodi non prerilasciabili, il criterio di distribuzione predefinito del gestore della scalabilità automatica dei cluster è BALANCED.

Dimensione minima e massima del pool di nodi

Durante la creazione di un nuovo pool di nodi, puoi specificare le dimensioni minima e massima per ciascun pool; inoltre, il gestore della scalabilità automatica del cluster prende decisioni di scalabilità all'interno di questi vincoli di scalabilità. Per aggiornare le dimensioni minime, ridimensiona manualmente il cluster entro i nuovi vincoli dopo aver specificato il nuovo valore minimo. Il gestore della scalabilità automatica dei cluster prende quindi decisioni di scalabilità in base ai nuovi vincoli.

Dimensione del pool di nodi attuale Azione del gestore della scalabilità automatica dei cluster Vincoli di scalabilità
Inferiore al minimo specificato Il gestore della scalabilità automatica dei cluster fa lo scale up per eseguire il provisioning dei pod in attesa. La scalabilità verso il basso è disabilitata. Il pool di nodi non esegue lo scale down al di sotto del valore specificato.
Sono state specificate le dimensioni minima e massima specificate Il gestore della scalabilità automatica dei cluster fa lo scale up o lo scale down in base alla domanda. Il pool di nodi rimane entro i limiti specificati.
Superiore al massimo specificato Il gestore della scalabilità automatica dei cluster fa lo scale down solo dei nodi che possono essere rimossi in sicurezza. La scalabilità verso il basso è disabilitata. Il pool di nodi non scala sopra il valore specificato.

Tieni presente che il gestore della scalabilità automatica dei cluster non scala mai automaticamente a zero nodi: uno o più nodi devono essere sempre disponibili nel cluster per eseguire i pod di sistema.

Il gestore della scalabilità automatica dei cluster ha le seguenti avvertenze quando esegue lo scale up da zero nodi:

  • In GKE 1.21 e versioni precedenti, il gestore della scalabilità automatica dei cluster non può fare lo scale up di un cluster senza nodi.
  • In GKE 1.22 e versioni successive, il gestore della scalabilità automatica dei cluster e il provisioning automatico dei nodi supportano lo scale up da zero dei cluster di nodi.

Per scoprire di più sulle decisioni del gestore della scalabilità automatica, consulta le limitazioni del gestore della scalabilità automatica dei cluster.

Limiti di scalabilità automatica

Puoi impostare il numero minimo e massimo di nodi che il gestore della scalabilità automatica dei cluster deve utilizzare per la scalabilità di un pool di nodi. Utilizza i flag --min-nodes e --max-nodes per impostare il numero minimo e massimo di nodi per zona

A partire dalla versione 1.24 di GKE, puoi utilizzare i flag --total-min-nodes e --total-max-nodes per i nuovi cluster. Questi flag impostano il numero minimo e massimo del numero totale di nodi nel pool in tutte le zone.

Esempio di nodi minimo e massimo

Il seguente comando crea un cluster multi-zona a scalabilità automatica con inizialmente sei nodi su tre zone, con un massimo di un nodo per zona e un massimo di quattro nodi per zona:

gcloud container clusters create example-cluster \
    --num-nodes=2 \
    --zone=us-central1-a \
    --node-locations=us-central1-a,us-central1-b,us-central1-f \
    --enable-autoscaling --min-nodes=1 --max-nodes=4

In questo esempio, la dimensione totale del cluster può essere compresa tra tre e dodici nodi, distribuiti tra le tre zone. In caso di errore di una delle zone, la dimensione totale del cluster può essere compresa tra due e otto nodi.

Esempio di nodi totali

Il seguente comando, disponibile in GKE versione 1.24 o successive, crea inizialmente un cluster multi-zonal a scalabilità automatica con sei nodi in tre zone, con un minimo di tre nodi e un massimo di dodici nodi nel pool di nodi in tutte le zone:

gcloud container clusters create example-cluster \
    --num-nodes=2 \
    --zone=us-central1-a \
    --node-locations=us-central1-a,us-central1-b,us-central1-f \
    --enable-autoscaling --total-min-nodes=3 --total-max-nodes=12

In questo esempio, la dimensione totale del cluster può essere compresa tra tre e dodici nodi, indipendentemente dalla distribuzione tra zone.

Profili di scalabilità automatica

La decisione su quando rimuovere un nodo è un compromesso tra l'ottimizzazione per l'utilizzo o la disponibilità delle risorse. La rimozione dei nodi sottoutilizzati migliora l'utilizzo del cluster, ma potrebbe essere necessario attendere il nuovo provisioning delle risorse prima che possano essere eseguite.

Puoi specificare il profilo di scalabilità automatica da utilizzare per prendere tali decisioni. I profili attualmente disponibili sono:

  • balanced: il profilo predefinito.
  • optimize-utilization: dai la priorità all'ottimizzazione dell'utilizzo piuttosto che alla conservazione delle risorse di riserva nel cluster. Quando è selezionato, il gestore della scalabilità automatica dei cluster fa lo scale down del cluster in modo più aggressivo: può rimuovere più nodi e rimuovere i nodi più velocemente.

In GKE 1.18 e versioni successive, quando abiliti il profilo di scalabilità automatica optimize-utilization, GKE preferisce pianificare i pod in nodi che hanno già un'allocazione elevata di CPU o memoria. In GKE 1.22 e versioni successive, se il profilo di scalabilità automatica optimize-utilization è abilitato, GKE considera anche l'allocazione elevata della GPU durante la pianificazione dei pod.

Il profilo di scalabilità automatica optimize-utilization aiuta il gestore della scalabilità automatica dei cluster a identificare e rimuovere i nodi sottoutilizzati. Per ottenere questa ottimizzazione, GKE imposta il nome dello scheduler nella specifica del pod su gke.io/optimize-utilization-scheduler. I pod che specificano uno scheduler personalizzato non sono interessati.

Il seguente comando abilita il profilo di scalabilità automatica optimize-utilization in un cluster esistente:

gcloud container clusters update CLUSTER_NAME \
    --autoscaling-profile optimize-utilization

Considerazione della pianificazione e dell'interruzione dei pod

Durante lo scale down, il gestore della scalabilità automatica dei cluster rispetta le regole di pianificazione ed eliminazione impostate sui pod. Queste limitazioni possono impedire l'eliminazione di un nodo da parte del gestore della scalabilità automatica. L'eliminazione di un nodo potrebbe essere impedita se contiene un pod con una delle seguenti condizioni:

  • Le regole di affinità o anti-affinità del pod impediscono la ripianificazione.
  • Il pod non è gestito da un controller, ad esempio Deployment, StatefulSet, Job o ReplicaSet.
  • Il pod ha spazio di archiviazione locale e la versione del piano di controllo GKE è precedente alla 1.22. Nei cluster GKE con piano di controllo versione 1.22 o successive, i pod con spazio di archiviazione locale non bloccano più lo scale down.
  • Il pod ha l'annotazione "cluster-autoscaler.kubernetes.io/safe-to-evict": "false".
  • L'eliminazione del nodo supera il PodDisruptionBudget configurato.

Per saperne di più sul gestore della scalabilità automatica dei cluster e su come prevenire le interruzioni, consulta le seguenti domande nelle Domande frequenti sul gestore della scalabilità automatica dei cluster:

Informazioni aggiuntive

Puoi trovare ulteriori informazioni sul gestore della scalabilità automatica dei cluster nelle Domande frequenti sulla scalabilità automatica nel progetto Kubernetes open source.

Limitazioni

Il gestore della scalabilità automatica dei cluster presenta le seguenti limitazioni:

Problemi noti

  • Nella versione del piano di controllo GKE precedente alla 1.22, il gestore della scalabilità automatica dei cluster GKE smette di fare lo scale up di tutti i pool di nodi sui cluster vuoti (zero nodi). Questo comportamento non si verifica in GKE 1.22 e versioni successive.

Passaggi successivi