Gestore della scalabilità automatica dei cluster

Questa pagina spiega come ridimensionare automaticamente i pool di nodi del tuo cluster Google Kubernetes Engine (GKE) 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. Quando la domanda è bassa, il gestore della scalabilità automatica dei cluster ridimensiona al valore minimo specificato. Questo può aumentare la disponibilità dei carichi di lavoro quando ti serve, controllando al contempo i costi. Per scoprire come configurare il gestore della scalabilità automatica dei cluster, consulta la pagina sulla scalabilità automatica di un cluster.

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

Panoramica

Il gestore della scalabilità automatica del cluster di GKE ridimensiona automaticamente il numero di nodi in un determinato pool di nodi, in base alle esigenze dei tuoi carichi di lavoro. Non è necessario aggiungere o rimuovere manualmente i nodi o eseguire il provisioning eccessivo dei pool di nodi. Puoi invece specificare una dimensione 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 causare interruzioni temporanee. Ad esempio, se il carico di lavoro è costituito da un controller con una singola replica, il pod di tale replica può essere ripianificato su un nodo diverso se viene eliminato il nodo corrente. Prima di abilitare il gestore della scalabilità automatica dei cluster, progetta i carichi di lavoro per tollerare le potenziali interruzioni o assicurati che i pod critici non vengano interrotti.

Puoi aumentare le prestazioni del gestore della scalabilità automatica dei cluster con il streaming di immagini, che trasmette da remoto i dati immagine richiesti dalle immagini container idonee, salvando contemporaneamente l'immagine nella cache locale per consentire un 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 opera in base al pool di nodi. Quando configuri un pool di nodi con il gestore della scalabilità automatica dei cluster, specifichi le dimensioni 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 di 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 di pod e nodi e interviene:

  • Se i pod non sono pianificabili perché il pool di nodi 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 alle dimensioni minime del pool di nodi. Se su un nodo sono presenti pod che non possono essere spostati in altri nodi del cluster, il gestore della scalabilità automatica dei cluster non tenta di fare lo scale down di quel nodo. Se è possibile spostare i pod su altri nodi, ma non è possibile eseguire il svuotamento controllato del nodo dopo un periodo di timeout (attualmente 10 minuti), il nodo viene terminato forzatamente. Il periodo di tolleranza non è configurabile per i cluster GKE. Per ulteriori informazioni sul funzionamento dello scale down, consulta la documentazione del gestore della scalabilità automatica dei cluster.

Se i tuoi pod hanno richiesto un numero di risorse troppo basso (o non hanno modificato i valori predefiniti, il che potrebbe essere insufficiente) e i nodi presentano una carenza, il gestore della scalabilità automatica dei cluster non risolve la situazione. Puoi assicurarti che il gestore della scalabilità automatica dei cluster funzioni nel modo più accurato possibile inviando richieste esplicite di risorse per tutti i 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 potenziali interruzioni. Se i tuoi servizi non sono a tolleranza di errore, l'uso del gestore della scalabilità automatica dei cluster non è consigliato.
  • Gli utenti o gli amministratori non gestiscono manualmente i nodi; possono sostituire qualsiasi operazione di gestione manuale dei nodi 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 istanza nei vari pool e tenta di espandere il pool di nodi meno costoso possibile. 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 informazioni dai nodi esistenti nel cluster e nel pool di nodi. Il gestore della scalabilità automatica dei cluster rileva le modifiche manuali del nodo e del 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 dei cluster cerca di mantenere bilanciate le dimensioni di questi gruppi di istanze gestite quando lo scale up. Ciò consente di evitare una distribuzione non uniforme dei nodi tra i gruppi di istanze gestite in più zone di un pool di nodi. GKE non considera il criterio di scalabilità automatica durante 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 dei seguenti valori:

  • BALANCED: il gestore della scalabilità automatica prende in considerazione i requisiti dei pod e la disponibilità di risorse in ciascuna zona. Questo non garantisce che gruppi di nodi simili abbiano esattamente le stesse dimensioni, dato che il gestore della scalabilità automatica prende in considerazione molti fattori, tra cui la capacità disponibile in una determinata zona e affinità 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 tra le zone

Valori predefiniti

Per i pool di nodi Spot VM, il criterio di distribuzione predefinito per il 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 per il gestore della scalabilità automatica dei cluster è BALANCED.

Dimensione minima e massima del pool di nodi

Puoi specificare le dimensioni minima e massima per ogni pool di nodi nel cluster e il gestore della scalabilità automatica dei cluster prende decisioni di ridimensionamento all'interno di questi confini. Se la dimensione del pool di nodi corrente è inferiore al minimo specificato o superiore al valore massimo specificato quando abiliti la scalabilità automatica, il gestore della scalabilità automatica attende l'applicazione finché non è necessario un nuovo nodo nel pool di nodi o fino a quando un nodo può essere eliminato in modo sicuro dal pool di nodi.

Limiti di scalabilità automatica

Puoi impostare il numero minimo e massimo di nodi da utilizzare per la scalabilità automatica dei cluster durante 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 di nodi in tutte le zone.

Esempio di nodi minimo e massimo

Il comando seguente crea un cluster multizona a scalabilità automatica con sei nodi su tre zone, con un minimo 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 in 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 comando seguente, disponibile in GKE versione 1.24 o successive, crea inizialmente un cluster multizona con scalabilità automatica inizialmente con sei nodi su tre zone, con un minimo di tre nodi e un massimo di dodici nodi nel pool:

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 le zone.

Profili di scalabilità automatica

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

Puoi specificare il profilo di scalabilità automatica da utilizzare quando prendi queste decisioni. I profili attualmente disponibili sono:

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 per la pianificazione dei pod.

Il profilo di scalabilità automatica optimize-utilization aiuta il gestore della scalabilità automatica del 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

Considerare la pianificazione e l'interruzione dei pod

Quando viene fatto lo scale down, il gestore della scalabilità automatica dei cluster rispetta le regole di pianificazione e rimozione impostate sui pod. Queste limitazioni possono impedire l'eliminazione di un nodo dal 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 come 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 supererebbe il PodDisruptionBudget configurato.

Per saperne di più sul gestore della scalabilità automatica dei cluster e su come prevenire le interruzioni, consulta le seguenti domande poste 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 interrompe 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