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:
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 valore
nodePool
specifico nel file di configurazione del cluster utente e includi 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 disabilitare la scalabilità automatica per un pool di nodi specifico:
Modifica il file di configurazione del cluster utente e rimuovi la sezione
autoscaling
per quel 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.
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:
La pianificazione personalizzata con filtri alterati non è supportata.
Non viene fatto lo scale up dei pod se il valore
PriorityClass
è inferiore a-10
. Scopri di più, consulta Come funziona il gestore della scalabilità automatica dei cluster con priorità e prerilascio 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 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 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 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:
- Come funziona lo scale down?
- Il gestore della scalabilità automatica dei cluster funziona con PodDisruptionBudget in scale down?
- Quali tipi di pod possono impedire al gestore della scalabilità automatica dei cluster di rimuovere un nodo?