Abilita la scalabilità automatica del cluster

Questo documento descrive la scalabilità automatica per un cluster utente in Google Distributed Cloud.

La scalabilità automatica dei cluster aumenta o diminuisce il numero di nodi in un pool di nodi in base alle esigenze dei tuoi carichi di lavoro.

Prima di iniziare

Scopri di più sulle limitazioni del gestore della scalabilità automatica dei cluster.

Il gestore della scalabilità automatica del cluster parte dalle seguenti ipotesi:

  • Tutti i pod replicati possono essere riavviati su un altro nodo, il che potrebbe causare una breve interruzione. Se i tuoi servizi non possono tollerare interruzioni, non ti consigliamo di utilizzare lo strumento di scalabilità automatica del cluster.

  • Gli utenti o gli amministratori non gestiscono manualmente i nodi. Se la scalabilità automatica è abilitata per unpool di nodil, non puoi eseguire l'override del campo replicas del node pool.

  • Tutti i nodi di un singolo pool di nodi hanno lo stesso insieme di etichette.

Come funziona la scalabilità automatica dei cluster

Il gestore della scalabilità automatica dei cluster funziona in base al pool di nodi. Quando attivi la scalabilità automatica per un pool di nodi, specifichi un numero minimo e massimo di nodi per il pool.

Il gestore della scalabilità automatica dei cluster aumenta o diminuisce automaticamente il numero di nodi nel pool, in base alle richieste di risorse (anziché all'utilizzo effettivo delle risorse) dei pod in esecuzione sui nodi. Controlla periodicamente lo stato di pod e nodi e interviene:

  • Se i pod non sono pianificabili perché non ci sono nodi sufficienti nel pool, il gestore della scalabilità automatica del cluster aggiunge nodi fino al massimo specificato.

  • Se i nodi sono sottoutilizzati e tutti i pod potrebbero essere pianificati con meno nodi nel pool, lo strumento di scalabilità automatica del cluster rimuove i nodi fino al minimo specificato. Se un nodo non può essere svuotato in modo controllato, viene terminato forzatamente e il disco gestito da Kubernetes collegato viene scollegato in modo sicuro.

Se i pod hanno richiesto risorse insufficienti (o non hanno modificato i valori predefiniti, che potrebbero essere insufficienti) e i nodi stanno riscontrando carenze, lo strumento di scalabilità automatica del cluster non corregge la situazione. Puoi contribuire a garantire che il gestore della scalabilità automatica del cluster funzioni in modo accurato effettuando richieste di risorse esplicite per tutti i tuoi carichi di lavoro.

Per un singolo pool di nodi, minReplicas deve essere ≥ 1. Tuttavia, la somma dei nodi del cluster di utenti non compromessi in un determinato momento deve essere almeno 3. Ciò significa che la somma dei valori minReplicas per tutti i node pool con scalabilità automatica, più la somma dei valori replicas per tutti i node pool senza scalabilità automatica, deve essere almeno 3.

Il gestore della scalabilità automatica del cluster considera il costo relativo dei tipi di istanza nei vari node pool e tenta di espandere il pool di nodi in modo da causare il minor spreco possibile.

Creazione di un cluster utente con scalabilità automatica

Per creare un cluster utente con la scalabilità automatica abilitata per un pool di nodi, compila la sezione autoscaling per il pool di nodi nel file di configurazione del cluster utente. Ad esempio:

nodePools:
- name: pool‐1
  …
  replicas: 3
  ...
  autoscaling:
    minReplicas: 1
    maxReplicas: 5

La configurazione precedente crea un pool di nodi con 3 repliche e applica la scalabilità automatica con la dimensione minimapool di nodil pari a 1 e la dimensione massimapool di nodil pari a 5.

Il valore di minReplicas deve essere ≥ 1. Un pool di nodi non può essere fare lo scale down a zero nodi.

Aggiungere un pool di nodi con scalabilità automatica

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

  1. Modifica il file di configurazione del cluster utente per aggiungere un nuovo pool di nodi e includi una sezione autoscaling per il pool. Imposta i valori di replicas, minReplicas e maxReplicas come preferisci. Ad esempio:

    nodePools:
    - name: my-new-node-pool
      …
      replicas: 3
      ...
      autoscaling:
        minReplicas: 2
        maxReplicas: 6
    
  2. Aggiorna il cluster:

    gkectl update cluster --config USER_CLUSTER_CONFIG \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

Abilitazione della scalabilità automatica per un pool di nodi esistente

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

  1. Modifica un nodePool specifico nel file di configurazione del cluster utente e includi la sezione autoscaling. Imposta i valori di minReplicas e maxReplicas come preferisci.

    nodePools:
    - name: my-existing-node-pool
      …
      replicas: 3
      ...
      autoscaling:
        minReplicas: 1
        maxReplicas: 5
    
  2. Aggiorna il cluster:

    gkectl update cluster --config USER_CLUSTER_CONFIG \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

Disabilitazione della scalabilità automatica per un pool di nodi esistente

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

  1. Modifica il file di configurazione del cluster utente e rimuovi la sezione autoscaling per il pool di nodi.

  2. Esegui gkectl update cluster.

Controlla il comportamento del gestore della scalabilità automatica del cluster

Puoi determinare cosa sta facendo il gestore della scalabilità automatica dei cluster in diversi modi.

Controlla i log del gestore della scalabilità automatica del cluster

Innanzitutto, trova il nome del pod del gestore della scalabilità automatica dei cluster:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods -n USER_CLUSTER_NAME | grep cluster-autoscaler

Controlla i log nel pod del gestore della scalabilità automatica dei cluster:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG logs cluster-autoscaler-POD_NAME --container cluster-autoscaler -n USER_CLUSTER_NAME

Sostituisci POD_NAME con il nome del pod del gestore della scalabilità automatica del cluster.

Controllare la mappa di configurazione

Lo strumento di scalabilità automatica del cluster pubblica la mappa di configurazione kube-system/cluster-autoscaler-status.

Per visualizzare la mappa di configurazione:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get configmap cluster-autoscaler-status -n kube-system -o yaml

Controlla gli eventi di scalabilità automatica del cluster.

Puoi controllare gli eventi di scalabilità automatica del cluster:

  • Sui pod (in particolare quelli che non possono essere pianificati o sui nodi sottoutilizzati)
  • Sui nodi
  • Nella mappa di configurazione kube-system/cluster-autoscaler-status.

Limitazioni

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

Risoluzione dei problemi

  • A volte, il gestore della scalabilità automatica del cluster non riesce a eseguire completamente lo scale down e dopo lo scale down esiste un nodo aggiuntivo. Ciò può verificarsi quando i pod di sistema richiesti vengono pianificati su nodi diversi, perché non esiste alcun trigger per lo spostamento di uno di questi pod in un nodo diverso. Vedi Ho un paio di nodi con un utilizzo ridotto, ma non vengono ridimensionati. Perché? Per ovviare a questa limitazione, puoi configurare un budget di interruzione dei pod.

  • Se riscontri problemi con la riduzione delle dimensioni del cluster, consulta la sezione Pianificazione e interruzione dei pod. Potresti dover aggiungere un PodDisruptionBudget per i Pod kube-system. Per maggiori informazioni sull'aggiunta manuale di un PodDisruptionBudget per i pod kube-system, consulta le domande frequenti sul gestore della scalabilità automatica dei cluster Kubernetes.

  • Durante lo scale down, il gestore della scalabilità automatica del cluster rispetta le regole di pianificazione e rimozione 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 qualsiasi di queste condizioni:

    • Le regole di affinità o anti-affinità del pod impediscono la riprogrammazione.

    • Il pod dispone di spazio di archiviazione locale.

    • Il pod non è gestito da un controller come un deployment, un StatefulSet, un job o un ReplicaSet.

    • Il pod si trova nello spazio dei nomi kube-system e non ha un PodDisruptionBudget

  • Il PodDisruptionBudget di un'applicazione potrebbe impedire la scalabilità automatica. Se l'eliminazione dei nodi causerebbe il superamento del budget, il cluster non viene fare lo scale down.

Ulteriori informazioni

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: