Abilita 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 le limitazioni del gestore della scalabilità automatica dei cluster.

Il gestore della scalabilità automatica dei cluster fa le seguenti ipotesi:

  • Tutti i pod replicati possono essere riavviati su qualche altro nodo, il che potrebbe causare una breve interruzione. Se i tuoi servizi non possono tollerare le interruzioni, non è consigliabile utilizzare il gestore della scalabilità automatica dei cluster.

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

  • Tutti i nodi in 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 abiliti 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 abbastanza nodi nel pool, il gestore della scalabilità automatica dei cluster aggiunge nodi fino al valore massimo specificato.

  • Se i nodi sono sottoutilizzati e tutti i pod possono essere pianificati con meno nodi nel pool, il gestore della scalabilità automatica dei cluster rimuove i nodi, fino al minimo specificato. Se non è possibile svuotare correttamente un nodo, questo viene terminato forzatamente e il disco collegato gestito da Kubernetes viene scollegato in sicurezza.

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

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

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

Crea un cluster utente con scalabilità automatica

Per creare un cluster utente con scalabilità automatica abilitata per un pool di nodi, compila la sezione autoscaling relativa al 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 una dimensione minima del pool di nodi pari a 1 e una dimensione massima del pool di nodi pari a 5.

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

Aggiungi 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 valore 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 quel pool di nodi.

  2. Esegui gkectl update cluster.

Controlla il comportamento del gestore della scalabilità automatica dei cluster

Puoi determinare l'azione del gestore della scalabilità automatica dei cluster in diversi modi.

Controlla i log del gestore della scalabilità automatica dei cluster

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

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

Controlla i log sul pod del gestore della scalabilità automatica del 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.

Controlla la mappa di configurazione

Il gestore della scalabilità automatica dei 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 con 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 di kube-system/cluster-autoscaler-status.

Limitazioni

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

Risoluzione dei problemi

  • A volte, il gestore della scalabilità automatica dei cluster non può fare lo scale down completo e, dopo lo scale down, esiste un nodo in più. Questo può verificarsi quando i pod di sistema richiesti sono pianificati su nodi diversi, perché non esiste un trigger per lo spostamento di questi pod in un nodo diverso. Vedi Ho un paio di nodi con basso utilizzo, ma non è stato fatto lo scale down. Perché? Per aggirare questa limitazione, puoi configurare un budget di interruzione dei pod.

  • Se hai problemi con la scalabilità del cluster, consulta Pianificazione e interruzione dei pod. Potresti dover aggiungere un valore 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 dei cluster rispetta le regole di pianificazione ed eliminazione impostate sui pod. Queste restrizioni possono impedire l'eliminazione di un nodo da parte del gestore della scalabilità automatica. È possibile 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.

    • Il pod ha uno spazio di archiviazione locale.

    • Il pod non è gestito da un controller come un oggetto Deployment, StatefulSet, Job o 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 causa il superamento del budget, lo fare lo scale down del cluster non viene eseguito.

Ulteriori informazioni

Per ulteriori informazioni 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: