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 un altro nodo, il che potrebbe causare un una breve interruzione. Se i tuoi servizi non tollerano interruzioni, consigliamo di utilizzare il gestore della scalabilità automatica dei cluster.
Gli utenti o gli amministratori non gestiscono manualmente i nodi. Se la scalabilità automatica è abilitato per un pool di nodi, non puoi eseguire l'override del campo
replicas
del nodo piscina.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 il numero di nodi nel pool automaticamente, in base alle richieste di risorse (anziché le 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 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 dei cluster rimuove i nodi, fino al livello minimo. Se non è possibile eseguire lo svuotamento controllato di un nodo, e il disco collegato gestito da Kubernetes 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 a garantire che il gestore della scalabilità automatica dei cluster funziona 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
degli utenti non compromessi del cluster in un determinato momento deve essere almeno pari a 3. Questo
indica 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 pari a
almeno 3.
Il gestore della scalabilità automatica dei cluster prende in considerazione il costo relativo dei tipi di istanze nei vari pool di nodi e tenta di espandere il pool di nodi in modo da causare il minor spreco possibile.
Crea 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 si applica scalabilità automatica con la dimensione minima del pool di nodi pari a 1 e la dimensione massima del pool di nodi come 5.
Il valore di minReplicas
deve essere maggiore di 1. Un pool di nodi non può essere ridotto a zero.
Aggiungi 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 e 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
.
Controlla il comportamento del gestore della scalabilità automatica dei cluster
Puoi determinare l'azione del gestore della scalabilità automatica dei cluster in diversi modi.
Controllare i log del gestore della scalabilità automatica del 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 nel 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.
Controlla la mappa di configurazione
Il gestore della scalabilità automatica dei cluster pubblica l'kube-system/cluster-autoscaler-status
una mappa di configurazione.
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 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:
Pianificazione personalizzata con modifiche filtri non è supportato.
Lo scale up dei nodi non viene eseguito se i pod hanno un
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 dei cluster non può fare lo scale down completo esistente dopo lo scale down. 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. Consulta: Ho un paio di nodi con basso utilizzo, ma non è stato fatto lo scale down. Perché? Per aggirare questa limitazione, puoi configurare Budget per l'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 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 dei cluster rispetta le regole di pianificazione ed eliminazione sui pod. Queste limitazioni possono impedire l'eliminazione di un nodo da parte del gestore della scalabilità automatica. Potrebbe essere impedita l'eliminazione di un nodo se contiene un pod con 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 titolare ad esempio 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 comporta il superamento del budget, lo scale down del cluster non viene eseguito.
Ulteriori informazioni
Per saperne di più sul gestore della scalabilità automatica dei cluster e su come prevenire le interruzioni, consulta le seguenti domande nel 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?