Scalabilità automatica di un cluster


Questa pagina mostra come scalare automaticamente i cluster Google Kubernetes Engine (GKE) standard. Per scoprire come funziona il gestore della scalabilità automatica dei cluster, consulta Gestore della scalabilità automatica dei cluster.

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

Utilizzo del gestore della scalabilità automatica dei cluster

Le seguenti sezioni spiegano come utilizzare il gestore della scalabilità automatica dei cluster.

Creazione di un cluster con scalabilità automatica

Puoi creare un cluster con scalabilità automatica abilitata utilizzando Google Cloud CLI o la console Google Cloud.

gcloud

Per creare un cluster con scalabilità automatica abilitata, utilizza il flag --enable-autoscaling e specifica --min-nodes e --max-nodes:

gcloud container clusters create CLUSTER_NAME \
    --enable-autoscaling \
    --num-nodes NUM_NODES \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    --region=COMPUTE_REGION

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster da creare.
  • NUM_NODES: il numero di nodi da creare in ciascuna località.
  • MIN_NODES: il numero minimo di nodi da scalare automaticamente per il pool di nodi specificato per zona. Per specificare il numero minimo di nodi per l'intero pool di nodi in GKE 1.24 e versioni successive, utilizza --total-min-nodes. I flag --total-min-nodes e --total-max-nodes si escludono a vicenda con i flag --min-nodes e --max-nodes.
  • MAX_NODES: il numero massimo di nodi da scalare automaticamente per il pool di nodi specificato per zona. Per specificare il numero massimo di nodi per l'intero pool di nodi in GKE 1.24 e versioni successive, utilizza --total-max-nodes. I flag --total-min-nodes e --total-max-nodes si escludono a vicenda con i flag --min-nodes e --max-nodes.
  • COMPUTE_REGION: la regione di Compute Engine per il nuovo cluster. Per i cluster di zona, utilizza --zone=COMPUTE_ZONE.

Esempio: creazione di un cluster con scalabilità automatica dei nodi abilitata e numero minimo e massimo di nodi

Il seguente comando crea un cluster con 90 nodi o 30 nodi in ognuna delle tre zone presenti nella regione. La scalabilità automatica dei nodi è abilitata e ridimensiona il numero di nodi in base al carico del cluster. Il gestore della scalabilità automatica dei cluster può ridurre le dimensioni del pool di nodi predefinito a 15 nodi o aumentarlo fino a un massimo di 50 nodi per zona.

gcloud container clusters create my-cluster --enable-autoscaling \
    --num-nodes=30 \
    --min-nodes=15 --max-nodes=50 \
    --region=us-central

Esempio: creazione di un cluster con la scalabilità automatica dei nodi abilitata e i nodi totali

Il seguente comando crea un cluster con 30 nodi o 10 nodi in ognuna delle tre zone presenti nella regione. La scalabilità automatica dei nodi è abilitata e ridimensiona il numero di nodi in base al carico del cluster. In questo esempio, la dimensione totale del cluster può essere compresa tra 10 e 60 nodi, indipendentemente dalla distribuzione tra zone.

gcloud container clusters create my-cluster --enable-autoscaling \
    --num-nodes 10 \
    --region us-central1 \
    --total-min-nodes 10  --total-max-nodes 60

Console

Per creare un nuovo cluster in cui la scalabilità automatica è abilitata per il pool di nodi predefinito:

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

    Vai a Google Kubernetes Engine

  2. Fai clic su Crea.

  3. Configura il cluster come preferisci.

  4. Nel riquadro di navigazione, in Pool di nodi, fai clic su default-pool.

  5. Seleziona la casella di controllo Abilita scalabilità automatica.

  6. Modifica i valori dei campi Numero minimo di nodi e Numero massimo di nodi come preferisci.

  7. Fai clic su Crea.

Aggiunta di un pool di nodi con scalabilità automatica

Puoi creare un pool di nodi con scalabilità automatica abilitata utilizzando gcloud CLI o la console Google Cloud.

gcloud

Per aggiungere un pool di nodi con scalabilità automatica a un cluster esistente, utilizza il comando seguente:

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --enable-autoscaling \
    --min-nodes=MIN_NODES \
    --max-nodes=MAX_NODES \
    --region=COMPUTE_REGION

Sostituisci quanto segue:

  • POOL_NAME: il nome del pool di nodi desiderato.
  • CLUSTER_NAME: il nome del cluster in cui viene creato il pool di nodi.
  • MIN_NODES: il numero minimo di nodi da scalare automaticamente per il pool di nodi specificato per zona. Per specificare il numero minimo di nodi per l'intero pool di nodi in GKE 1.24 e versioni successive, utilizza --total-min-nodes. I flag --total-min-nodes e --total-max-nodes si escludono a vicenda con i flag --min-nodes e --max-nodes.
  • MAX_NODES: il numero massimo di nodi da scalare automaticamente per il pool di nodi specificato per zona. Per specificare il numero massimo di nodi per l'intero pool di nodi in GKE 1.24 e versioni successive, utilizza --total-max-nodes. I flag --total-min-nodes e --total-max-nodes si escludono a vicenda con i flag --min-nodes e --max-nodes.
  • COMPUTE_REGION: la regione di Compute Engine per il nuovo cluster. Per i cluster di zona, utilizza --zone=COMPUTE_ZONE.

Esempio: aggiunta di un pool di nodi con scalabilità automatica dei nodi abilitata

Il seguente comando crea un pool di nodi con scalabilità automatica dei nodi che scala il pool di nodi fino a un massimo di 5 nodi e a un minimo di 1 nodo:

gcloud container node-pools create my-node-pool \
    --cluster my-cluster \
    --enable-autoscaling \
    --min-nodes 1 --max-nodes 5 \
    --zone us-central1-c

Console

Per aggiungere un pool di nodi con scalabilità automatica a un cluster esistente:

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

    Vai a Google Kubernetes Engine

  2. Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.

  3. Fai clic su Aggiungi pool di nodi.

  4. Configura il pool di nodi come preferisci.

  5. In Dimensioni, seleziona la casella di controllo Abilita scalabilità automatica.

  6. Modifica i valori dei campi Numero minimo di nodi e Numero massimo di nodi come preferisci.

  7. Fai clic su Crea.

Abilitazione della scalabilità automatica per un pool di nodi esistente

Puoi abilitare la scalabilità automatica per un pool di nodi esistente utilizzando gcloud CLI o la console Google Cloud.

gcloud

Per abilitare la scalabilità automatica per un pool di nodi esistente, utilizza il seguente comando:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoscaling \
    --node-pool=POOL_NAME \
    --min-nodes=MIN_NODES \
    --max-nodes=MAX_NODES \
    --region=COMPUTE_REGION

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster da aggiornare.
  • POOL_NAME: il nome del pool di nodi desiderato. Se hai un solo pool di nodi, fornisci default-pool come valore.
  • MIN_NODES: il numero minimo di nodi da scalare automaticamente per il pool di nodi specificato per zona. Per specificare il numero minimo di nodi per l'intero pool di nodi in GKE 1.24 e versioni successive, utilizza --total-min-nodes. I flag --total-min-nodes e --total-max-nodes si escludono a vicenda con i flag --min-nodes e --max-nodes.
  • MAX_NODES: il numero massimo di nodi da scalare automaticamente per il pool di nodi specificato per zona. Per specificare il numero massimo di nodi per l'intero pool di nodi in GKE 1.24 e versioni successive, utilizza --total-max-nodes. I flag --total-min-nodes e --total-max-nodes si escludono a vicenda con i flag --min-nodes e --max-nodes.
  • COMPUTE_REGION: la regione di Compute Engine per il nuovo cluster. Per i cluster di zona, utilizza --zone=COMPUTE_ZONE.

Console

Per abilitare la scalabilità automatica per un pool di nodi esistente:

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

    Vai a Google Kubernetes Engine

  2. Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.

  3. Fai clic sulla scheda Nodi.

  4. In Pool di nodi, fai clic sul nome del pool di nodi che vuoi modificare, poi fai clic su Modifica.

  5. In Dimensioni, seleziona la casella di controllo Abilita scalabilità automatica.

  6. Modifica i valori dei campi Numero minimo di nodi e Numero massimo di nodi come preferisci.

  7. Fai clic su Salva.

Verifica dell'abilitazione della scalabilità automatica per il pool di nodi esistente

Per verificare che il cluster utilizzi la scalabilità automatica, puoi utilizzare Google Cloud CLI o la console Google Cloud.

gcloud

Descrivi i pool di nodi nel cluster:

gcloud container node-pools describe NODE_POOL_NAME --cluster=CLUSTER_NAME |grep autoscaling -A 1

Sostituisci quanto segue:

  • POOL_NAME: il nome del nuovo pool di nodi che scegli.
  • CLUSTER_NAME: il nome del cluster.

Se la scalabilità automatica è abilitata, l'output è simile al seguente:

autoscaling:
  enabled: true

Console

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

    Vai a Google Kubernetes Engine

  2. Nell'elenco dei cluster, fai clic sul nome del cluster che vuoi verificare.

  3. Fai clic sulla scheda Nodi.

  4. In Pool di nodi, verifica lo stato Autoscalling del pool di nodi.

Creazione di un pool di nodi che dà la priorità all'ottimizzazione delle prenotazioni inutilizzate

Puoi utilizzare il flag --location_policy=ANY quando crei un pool di nodi per indicare al gestore della scalabilità automatica dei cluster di assegnare la priorità all'utilizzo delle prenotazioni inutilizzate:

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location_policy=ANY

Sostituisci quanto segue:

  • POOL_NAME: il nome del nuovo pool di nodi che scegli.
  • CLUSTER_NAME: il nome del cluster.

Disabilitazione della scalabilità automatica per un pool di nodi esistente

Puoi disabilitare la scalabilità automatica per un pool di nodi esistente utilizzando gcloud CLI o la console Google Cloud.

gcloud

Per disabilitare la scalabilità automatica per un pool di nodi specifico, utilizza il flag --no-enable-autoscaling:

gcloud container clusters update CLUSTER_NAME \
    --no-enable-autoscaling \
    --node-pool=POOL_NAME \
    --region=COMPUTE_REGION

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster da aggiornare.
  • POOL_NAME: il nome del pool di nodi desiderato.
  • COMPUTE_REGION: la regione di Compute Engine per il nuovo cluster. Per i cluster di zona, utilizza --zone=COMPUTE_ZONE.

Le dimensioni del cluster sono fisse in base all'attuale dimensione predefinita del pool di nodi, che è possibile aggiornare manualmente.

Console

Per disabilitare la scalabilità automatica per un pool di nodi specifico:

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

    Vai a Google Kubernetes Engine

  2. Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.

  3. Fai clic sulla scheda Nodi.

  4. In Pool di nodi, fai clic sul nome del pool di nodi che vuoi modificare, quindi su Modifica.

  5. In Dimensioni, deseleziona la casella di controllo Abilita scalabilità automatica.

  6. Fai clic su Salva.

Ridimensionamento di un pool di nodi

Per i cluster con scalabilità automatica abilitata, il gestore della scalabilità automatica ridimensiona automaticamente i pool di nodi entro i limiti specificati dai valori di dimensione minima (--min-nodes) e dimensione massima (--max-nodes) o di dimensione totale minima (--total-min-nodes) e dimensione totale massima (--total-max-nodes). Questi flag si escludono a vicenda. Non puoi ridimensionare manualmente un pool di nodi modificando questi valori.

Se vuoi ridimensionare manualmente un pool di nodi nel cluster in cui la scalabilità automatica è abilitata, esegui queste operazioni:

  1. Disabilita la scalabilità automatica sul pool di nodi.
  2. Ridimensiona manualmente il cluster.
  3. Riattiva la scalabilità automatica e specifica la dimensione minima e massima del pool di nodi.

Impedisce la pianificazione dei pod sui nodi selezionati

Puoi utilizzare le incompatibilità startup o status per impedire la pianificazione dei pod sui nodi selezionati, a seconda del caso d'uso.

Questa funzionalità è disponibile in GKE 1.28 e versioni successive.

Incompatibilità delle startup

Utilizza le incompatibilità startup quando è presente un'operazione da completare prima di poter eseguire qualsiasi pod sul nodo. Ad esempio, i pod non devono essere eseguiti fino al termine dell'installazione dei driver sul nodo.

Il gestore della scalabilità automatica dei cluster considera i nodi incompatibili con le incompatibilità di startup come non pronti, ma viene preso in considerazione durante la logica di scale up, supponendo che vengano pronti a breve.

Le incompatibilità all'avvio sono definite come tutte le incompatibilità con il prefisso startup-taint.cluster-autoscaler.kubernetes.io/.

Incompatibilità dello stato

Utilizza le incompatibilità status quando GKE non deve utilizzare un determinato nodo per eseguire i pod.

Il gestore della scalabilità automatica dei cluster considera come pronti i nodi incompatibili con le incompatibilità di status, ma li ignora durante la logica di scale up. Anche se il nodo incompatibile è pronto, non deve essere eseguito alcun pod. Se i pod hanno bisogno di più risorse, GKE fa lo scale up del cluster e ignora i nodi incompatibili.

Le incompatibilità dello stato sono definite come tutte le incompatibilità con il prefisso status-taint.cluster-autoscaler.kubernetes.io/.

Ignora le incompatibilità

Le incompatibilità sono definite come tutte le incompatibilità con il prefisso ignore-taint.cluster-autoscaler.kubernetes.io/.

Risoluzione dei problemi

Controlla se il problema che stai riscontrando è causato da una delle limitazioni per il gestore della scalabilità automatica dei cluster. In caso contrario, consulta le seguenti informazioni sulla risoluzione dei problemi per il gestore della scalabilità automatica dei cluster:

Il cluster non è in scalabilità

Dopo che il cluster fa correttamente lo scale up e poi ha tentato di fare lo scale down, i nodi sottoutilizzati rimangono abilitati e impediscono lo scale down del cluster. Questo errore si verifica per uno dei seguenti motivi:

  • Le restrizioni possono impedire l'eliminazione di un nodo da parte del gestore della scalabilità automatica. GKE potrebbe impedire l'eliminazione di un nodo se contiene un pod con una delle seguenti condizioni:

    • Le regole di affinità o anti-affinità del pod impediscono la ripianificazione.
    • In GKE 1.21 e versioni precedenti, il pod dispone di spazio di archiviazione locale.
    • Il pod non è gestito da un controller, ad esempio un deployment, uno StatefulSet, un job o un ReplicaSet.

    Per risolvere il problema, configura le regole di pianificazione ed eliminazione del gestore della scalabilità automatica dei cluster sui tuoi pod. Per ulteriori informazioni, consulta la sezione Pianificazione e interruzione dei pod.

  • I pod di sistema sono in esecuzione su un nodo. Per verificare che i nodi stiano eseguendo kube-system pod, segui questi passaggi:

    1. Vai alla pagina Esplora log nella console Google Cloud.

      Vai a Esplora log

    2. Fai clic su Query Builder.

    3. Utilizza la query seguente per trovare tutti i record dei log dei criteri di rete:

        - resource.labels.location="CLUSTER_LOCATION"
        resource.labels.cluster_name="CLUSTER_NAME"
        logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fcluster-autoscaler-visibility"
        jsonPayload.noDecisionStatus.noScaleDown.nodes.node.mig.nodepool="NODE_POOL_NAME"
      

      Sostituisci quanto segue:

      • CLUSTER_LOCATION: la regione in cui si trova il cluster.
      • CLUSTER_NAME: il nome del cluster.
      • PROJECT_ID: l'ID del progetto in cui viene creato il cluster.
      • NODE_POOL_NAME: il nome del pool di nodi.

        Se ci sono kube-system pod in esecuzione sul tuo pool di nodi, l'output include quanto segue:

        "no.scale.down.node.pod.kube.system.unmovable"
        

    Per risolvere il problema, devi:

Dimensioni del pool di nodi non corrispondenti

Quando configuri la dimensione del pool di nodi, si verifica il seguente problema:

  • La dimensione di un pool di nodi esistente è inferiore al numero minimo di nodi che hai specificato per il cluster.

Nell'elenco seguente vengono descritte le possibili cause comuni di questo comportamento:

  • Hai specificato un nuovo numero minimo di nodi quando il numero esistente di nodi è maggiore.
  • Hai fatto manualmente lo scale down del pool di nodi o del gruppo di istanze gestite sottostante. Questa operazione manuale specificava il numero di nodi inferiore al numero minimo di nodi.
  • Hai eseguito il deployment delle VM spot prerilasciate all'interno del pool di nodi.
  • Il pod dispone di 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 archiviazione locale non bloccano più lo scale down.
  • Il pod ha l'annotazione "cluster-autoscaler.kubernetes.io/safe-to-evict": "false".

    Per ulteriori passaggi per la risoluzione dei problemi durante gli eventi di fare lo scale down, consulta Mancato scale down del cluster.

  • Durante lo scale down, il gestore della scalabilità automatica dei cluster rispetta il periodo di tolleranza per la terminazione dei pod, fino a un massimo di 10 minuti. Dopo 10 minuti, i pod vengono Terminati forzatamente.

  • Potresti notare che la dimensione del pool di nodi è inferiore al numero minimo di nodi specificato per il cluster. Questo comportamento si verifica perché il gestore della scalabilità automatica utilizza il parametro del numero minimo di nodi solo quando deve determinare uno scale down. Di seguito sono riportate le possibili cause comuni di questo comportamento.

Per risolvere il problema, aumenta manualmente la dimensione del pool di nodi fino ad almeno il numero minimo di nodi. Per ulteriori informazioni, consulta l'articolo su come ridimensionare manualmente un cluster.

Per saperne di più sul gestore della scalabilità automatica dei cluster e sulla prevenzione delle interruzioni, consulta le seguenti domande nelle Domande frequenti sul gestore della scalabilità automatica dei cluster Kubernetes:

Passaggi successivi