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 carichi di lavoro.
Prima di iniziare
Scopri le limitazioni del gestore della scalabilità automatica dei cluster.
Il gestore della scalabilità automatica del cluster fa le 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 consigliamo di utilizzare l'autoscalabilità del cluster.
Gli utenti o gli amministratori non gestiscono manualmente i nodi. Se la scalabilità automatica è attivata 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 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 ed esegue azioni:
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 numero massimo specificato.
Se i nodi sono sottoutilizzati e tutti i pod possono essere pianificati con meno nodi nel pool, il gestore della scalabilità automatica del cluster rimuove i nodi fino al numero minimo specificato. Se un nodo non può essere drenato in modo corretto, viene terminato forzatamente e il disco gestito da Kubernetes collegato viene scollegato in modo sicuro.
Se i pod hanno richiesto risorse troppo poche (o non hanno modificato i valori predefiniti, che potrebbero essere insufficienti) e i nodi stanno riscontrando carenze, il cluster autoscaler non corregge la situazione. Puoi contribuire ad assicurare che il gestore della scalabilità automatica dei cluster funzioni con precisione 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
degli utenti non compromessi del cluster 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 replicas
per tutti i pool di nodi senza scalabilità automatica, deve essere almeno pari a 3.
Il gestore della scalabilità automatica del cluster prende in considerazione il costo relativo dei tipi di istanze nei vari node pool e tenta di espandere il node pool in modo da causare il minor spreco possibile.
Creare un cluster utente con la scalabilità automatica
Per creare un cluster utente con la scalabilità automatica abilitata per un node pool, compila la sezione
autoscaling
per il node pool 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 minReplicas
deve essere ≥ 1. Un pool di nodi non può essere fare lo scale down a zero.
Aggiungere un pool di nodi con scalabilità automatica
Per aggiungere un pool di nodi con scalabilità automatica a un cluster esistente:
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 direplicas
,minReplicas
emaxReplicas
come preferisci. Ad esempio:nodePools: - name: my-new-node-pool … replicas: 3 ... autoscaling: minReplicas: 2 maxReplicas: 6
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:
Modifica un
nodePool
specifico nel file di configurazione del cluster utente e include la sezioneautoscaling
. Imposta i valori diminReplicas
emaxReplicas
come preferisci.nodePools: - name: my-existing-node-pool … replicas: 3 ... autoscaling: minReplicas: 1 maxReplicas: 5
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 disattivare la scalabilità automatica per un pool di nodi specifico:
Modifica il file di configurazione del cluster utente e rimuovi la sezione
autoscaling
per il pool di nodi.Esegui
gkectl update cluster
.
Controllare il comportamento del gestore della scalabilità automatica del cluster
Puoi determinare cosa sta facendo il gestore della scalabilità automatica dei cluster in diversi modi.
Controllare i log del gestore della scalabilità automatica del cluster
Innanzitutto, individua 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 di 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:
- Nei pod (in particolare quelli che non possono essere pianificati o su 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:
La pianificazione personalizzata con filtri modificati non è supportata.
I nodi non vengono scalati se i pod hanno un valore di
PriorityClass
inferiore a-10
. Scopri di più in Come funziona il gestore della scalabilità automatica dei cluster con la priorità e la prelazione dei pod?.La scalabilità automatica per i pool di nodi Windows non è supportata.
Risoluzione dei problemi
A volte, il gestore della scalabilità automatica del cluster non può eseguire fare lo scale down completamente e dopo lo scale down esiste un nodo aggiuntivo. Ciò può verificarsi quando i pod di sistema richiesti sono pianificati su nodi diversi, perché non esiste alcun attivatore per lo spostamento di questi pod su un altro nodo. Vedi Ho un paio di nodi con un utilizzo ridotto, ma non sono ridotti. Perché? Per ovviare a questo limite, puoi configurare un budget di interruzione dei pod.
Se hai problemi con il ridimensionamento del cluster, consulta Pianificazione e interruzione dei pod. Potresti dover aggiungere un
PodDisruptionBudget
per i podkube-system
. Per maggiori informazioni sull'aggiunta manuale di unPodDisruptionBudget
per i podkube-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 di espulsione 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 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 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 comporta 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:
- Come funziona la riduzione?
- Il gestore della scalabilità automatica dei cluster funziona con PodDisruptionBudget in caso di riduzione?
- Quali tipi di pod possono impedire al gestore della scalabilità automatica dei cluster di rimuovere un nodo?