Questa pagina fornisce una panoramica della scalabilità automatica orizzontale dei pod e spiega come funziona in Google Kubernetes Engine (GKE). Puoi anche scoprire come configurare e utilizzare la scalabilità automatica pod orizzontale sui tuoi cluster.
Horizontal Pod Autoscaler modifica la forma del tuo carico di lavoro Kubernetes aumentando o diminuendo automaticamente il numero di pod in risposta al consumo di CPU o memoria del carico di lavoro oppure in risposta a metriche personalizzate registrate da Kubernetes o a metriche esterne provenienti da origini esterne al cluster.
I cluster GKE con provisioning automatico dei nodi scalano automaticamente il numero di nodi nel cluster in base alle modifiche del numero di pod. Per questo motivo, ti consigliamo di utilizzare scalabilità automatica orizzontale dei pod per tutti i cluster.
Perché utilizzare scalabilità automatica orizzontale dei pod
Quando esegui per la prima volta il deployment del tuo carico di lavoro in un cluster Kubernetes, potresti non essere sicuro dei relativi requisiti di risorse e di come questi requisiti potrebbero cambiare a seconda dei pattern di utilizzo, delle dipendenze esterne o di altri fattori. La scalabilità automatica dei pod orizzontali contribuisce a garantire il funzionamento coerente del carico di lavoro in situazioni diverse e ti consente di controllare i costi pagando solo la capacità aggiuntiva quando ti serve.
Non è sempre facile prevedere gli indicatori che mostrano se il tuo carico di lavoro è sottoutilizzato o sottodimensionato. Horizontal Pod Autoscaler può scalare automaticamente il numero di pod nel tuo carico di lavoro in base a una o più metriche dei seguenti tipi:
Utilizzo effettivo delle risorse: quando l'utilizzo della CPU o della memoria di un determinato pod supera una soglia. Questo valore può essere espresso come valore non elaborato o come percentuale della quantità richiesta dal pod per la risorsa.
Metriche personalizzate: basate su qualsiasi metrica registrata da un oggetto Kubernetes in un cluster, ad esempio la frequenza delle richieste client al secondo o le scritture I/O al secondo.
Questa opzione può essere utile se la tua applicazione è soggetta a colli di bottiglia della rete, piuttosto che della CPU o della memoria.
Metriche esterne: basate su una metrica di un'applicazione o di un servizio esterno al cluster.
Ad esempio, il tuo carico di lavoro potrebbe richiedere più CPU durante l'importazione di un numero elevato di richieste da una pipeline come Pub/Sub. Puoi creare una metrica esterna per le dimensioni della coda e configurare Horizontal Pod Autoscaler in modo da aumentare automaticamente il numero di pod quando le dimensioni della coda raggiungono una determinata soglia e ridurre il numero di pod quando le dimensioni della coda diminuiscono.
Puoi combinare un Horizontal Pod Autoscaler con un Vertical Pod Autoscaler, con alcune limitazioni.
Come funziona scalabilità automatica orizzontale dei pod
Ogni Horizontal Pod Autoscaler configurato funziona utilizzando un ciclo di controllo. Esiste un Horizontal Pod Autoscaler separato per ogni flusso di lavoro. Ogni Horizontal Pod Autoscaler controlla periodicamente le metriche di un determinato carico di lavoro rispetto alle soglie target che hai configurato e modifica automaticamente la forma del carico di lavoro.
Risorse per pod
Per le risorse allocate per pod, come la CPU, il controller esegue query sull'API delle metriche delle risorse per ogni container in esecuzione nel pod.
- Se specifichi un valore non elaborato per la CPU o la memoria, viene utilizzato il valore.
- Se specifichi un valore percentuale per la CPU o la memoria, il Horizontal Pod Autoscaler calcola il valore di utilizzo medio come percentuale delle richieste di CPU o memoria del pod.
- Le metriche personalizzate ed esterne sono espresse come valori non elaborati o medi.
Il controller utilizza il valore medio o non elaborato di una metrica registrata per produrre un rapporto e utilizza questo rapporto per eseguire la scalabilità automatica del carico di lavoro. Puoi leggere una descrizione dell'algoritmo Horizontal Pod Autoscaler nella documentazione del progetto Kubernetes.
Rispondere a più metriche
Se configuri un workload per la scalabilità automatica in base a più metriche, Horizontal Pod Autoscaler valuta ogni metrica separatamente e utilizza l'algoritmo di scalabilità per determinare la nuova scala del workload in base a ciascuna. Per l'azione di scalabilità automatica viene selezionata la scala più grande.
Se una o più metriche non sono disponibili per qualche motivo, Horizontal Pod Autoscaler esegue comunque lo scale up in base alla dimensione più grande calcolata, ma non esegue lo scale down.
Evitare il thrashing
Con thrashing si indica una situazione in cui Horizontal Pod Autoscaler tenta di eseguire azioni di scalabilità automatica successive prima che il carico di lavoro finisca di rispondere alle azioni di scalabilità automatica precedenti. Per evitare il thrashing, il gestore della scalabilità automatica dei pod orizzontale sceglie il consiglio più grande in base agli ultimi cinque minuti.
Limitazioni
- Non utilizzare Horizontal Pod Autoscaler insieme a Vertical Pod Autoscaler su CPU o memoria. Puoi utilizzare il Horizontal Pod Autoscaler con il gestore della scalabilità automatica verticale dei pod per altre metriche.
- Se hai un deployment, non configurare scalabilità automatica orizzontale dei pod orizzontale sul ReplicaSet o sul controller di replica di supporto. Quando esegui un aggiornamento graduale del deployment o del controller di replica, questo viene sostituito da un nuovo controller di replica. Configura invece la scalabilità automatica orizzontale dei pod sul deployment stesso.
- Non puoi utilizzare la scalabilità automatica dei pod orizzontali per i carichi di lavoro che non possono essere scalati, come i DaemonSet.
- Non puoi utilizzare metriche personalizzate o esterne con la scalabilità automatica orizzontale dei pod per fare lo scale down il numero di pod a zero e poi riaumentarlo.
- La scalabilità automatica dei pod orizzontali espone le metriche come risorse Kubernetes, il che impone limitazioni ai nomi delle metriche, ad esempio l'assenza di lettere maiuscole o caratteri "/".
L'adattatore delle metriche potrebbe consentire la ridenominazione. Ad esempio, consulta l'operatore
prometheus-adapter
as
. - Horizontal Pod Autoscaler non eseguirà fare lo scale down se una delle metriche che è configurato per monitorare non è disponibile. Per verificare se hai metriche non disponibili, consulta Visualizzare i dettagli di un Horizontal Pod Autoscaler.
Scalabilità
Horizontal Pod Autoscaler non ha un limite rigido per il numero supportato di oggetti HPA. Tuttavia, oltre un determinato numero di oggetti HPA, il periodo tra i ricomputi dell'HPA potrebbe diventare più lungo dei 15 secondi standard.
- Versione secondaria di GKE 1.22 o successiva: il periodo di ricalcolo deve rimanere entro 15 secondi con un massimo di 300 oggetti HPA.
- Versione minore GKE 1.31 o successiva: il periodo di ricalcolo deve rimanere entro 15 secondi con un massimo di 1000 oggetti HPA se è configurato il profilo HPA per le prestazioni. Scopri come configurare il profilo HPA per il rendimento.
Anche i seguenti fattori possono influire sul rendimento:
- Scalabilità su più metriche: ogni metrica aggiunge una chiamata di recupero per i calcoli dei consigli, che influisce sul periodo di ricalcolo.
- La latenza della pila di metriche personalizzate: i tempi di risposta superiori a circa 50 millisecondi sono superiori a quelli in genere osservati con le metriche Kubernetes standard e influiscono sul periodo di ricalcolo.
Interazione con gli oggetti HorizontalPodAutoscaler
Puoi configurare un Horizontal Pod Autoscaler per un carico di lavoro e ottenere informazioni sugli eventi di scalabilità automatica e sulle relative cause nella pagina Carichi di lavoro della console Google Cloud.
Ogni Horizontal Pod Autoscaler esiste nel cluster come oggetto HorizontalPodAutoscaler
. Puoi utilizzare comandi come
kubectl get hpa
o kubectl describe hpa HPA_NAME
per dialogare con questi oggetti.
Puoi anche creare oggetti HorizontalPodAutoscaler
utilizzando il
comando kubectl autoscale
.
Passaggi successivi
- Scopri come configurare la scalabilità automatica del pod orizzontale
- Scopri come scalare manualmente un'applicazione
- Scopri di più su Vertical Pod Autoscaler
- Scopri di più su Cluster Autoscaler