Scalabilità automatica pod orizzontale


Questa pagina fornisce una panoramica della scalabilità automatica orizzontale dei pod e spiega come funziona. Puoi anche leggere come configurare e utilizzare la scalabilità automatica orizzontale dei pod sui tuoi cluster.

Horizontal Pod Autoscaler modifica la forma del carico di lavoro Kubernetes aumentando o diminuendo automaticamente il numero di pod in risposta al consumo di CPU o memoria del carico di lavoro o in risposta a metriche personalizzate segnalate dall'interno di Kubernetes o da metriche esterne 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 nel numero di pod. Per questo motivo, consigliamo di utilizzare la scalabilità automatica orizzontale dei pod per tutti i cluster.

Perché utilizzare la 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 requisiti per le risorse e di come potrebbero cambiare a seconda di pattern di utilizzo, dipendenze esterne o altri fattori. La scalabilità automatica orizzontale dei pod contribuisce a garantire che il carico di lavoro funzioni in modo coerente in diverse situazioni e ti consente di controllare i costi pagando per la capacità extra solo quando ne hai bisogno.

Non è sempre facile prevedere gli indicatori che mostrano se il carico di lavoro è insufficiente o sottoutilizzato. Horizontal Pod Autoscaler può scalare automaticamente il numero di pod nel carico di lavoro in base a una o più metriche dei seguenti tipi:

  • Utilizzo effettivo delle risorse: quando la CPU o la memoria di un determinato pod supera una soglia. Può essere espresso come valore non elaborato o come percentuale della quantità di richieste del pod per quella risorsa.

  • Metriche personalizzate: basate su qualsiasi metrica riportata da un oggetto Kubernetes in un cluster, come la frequenza di richieste del client al secondo o le scritture di I/O al secondo.

    Questo può essere utile se la tua applicazione è soggetta a colli di bottiglia di rete, piuttosto che CPU o memoria.

  • Metriche esterne: basate su una metrica di un'applicazione o un servizio esterno al cluster.

    Ad esempio, il tuo carico di lavoro potrebbe aver bisogno di più CPU durante l'importazione di un numero elevato di richieste da una pipeline come Pub/Sub. Puoi creare una metrica esterna per la dimensione della coda e configurare il Horizontal Pod Autoscaler in modo da aumentare automaticamente il numero di pod quando la dimensione della coda raggiunge una determinata soglia e ridurre il numero di pod quando la dimensione della coda si riduce.

Puoi combinare un Horizontal Pod Autoscaler con uno del gestore della scalabilità automatica dei pod verticali, con alcune limitazioni.

Come funziona la 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 verifica periodicamente le metriche di un determinato carico di lavoro in base alle soglie target configurate e modifica automaticamente la forma del carico di lavoro.

Risorse per pod

Per le risorse allocate per pod, come la CPU, il controller esegue una query sull'API delle metriche delle risorse per ogni container in esecuzione nel pod.

  • Se specifichi un valore non elaborato per CPU o memoria, viene utilizzato il valore.
  • Se specifichi un valore percentuale per la CPU o la memoria, Horizontal Pod Autoscaler calcola il valore di utilizzo medio come percentuale delle richieste di CPU o memoria del pod.
  • Le metriche personalizzate ed esterne vengono espresse come valori non elaborati o valori medi.

Il controller utilizza il valore medio o non elaborato di una metrica registrata per produrre un rapporto e utilizza questa razione per scalare automaticamente il carico di lavoro. Puoi leggere una descrizione dell'algoritmo Horizontal Pod Autoscaler nella documentazione del progetto Kubernetes.

Rispondere a più metriche

Se configuri un carico di lavoro 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 scalabilità del carico di lavoro in base a ciascuna. Per l'azione di scalabilità automatica viene selezionata la scala più grande.

Se per qualche motivo una o più metriche non sono disponibili, Horizontal Pod Autoscaler esegue comunque lo scale up in base alla dimensione massima calcolata, ma non lo scale down.

Prevenzione del thrashing

Per minaccia si intende 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 precedenti azioni di scalabilità automatica. Per prevenire il thrashing, Horizontal Pod Autoscaler sceglie il suggerimento più ampio in base agli ultimi cinque minuti.

Limitazioni

  • Non utilizzare Horizontal Pod Autoscaler insieme a Vertical Pod Autoscaler su CPU o memoria. Puoi utilizzare Horizontal Pod Autoscaler con Vertical Pod Autoscaler per altre metriche.
  • Se hai un deployment, non configurare la scalabilità automatica orizzontale dei pod sul ReplicaSet o sul controller di replica supportato. Quando esegui un aggiornamento in sequenza sul controller di deployment o di replica, questo viene sostituito da un nuovo controller di replica. Puoi invece configurare scalabilità automatica orizzontale dei pod sul deployment stesso.
  • Non puoi utilizzare la scalabilità automatica orizzontale dei pod per carichi di lavoro che non possono essere scalati, ad esempio i DaemonSet.

Scalabilità

Horizontal Pod Autoscaler non ha un limite fisso al numero di oggetti HPA supportati. Tuttavia, al di sopra di un determinato numero di oggetti HPA, il periodo tra i ricalcoli HPA potrebbe diventare più lungo dei 15 secondi standard.

  • GKE versione secondaria 1.21 o precedente: il periodo di ricalcolo deve rimanere entro 15 secondi con un massimo di 100 oggetti HPA.
  • GKE secondaria versione 1.22 o successiva: il periodo di ricalcolo deve rimanere entro 15 secondi con un massimo di 300 oggetti HPA.

Anche i seguenti fattori possono influire sulle prestazioni:

  • Il numero di metriche da scalare in base: ogni metrica aggiunge una chiamata di recupero per i calcoli dei suggerimenti, che incidono sul periodo di ricalcolo.
  • La latenza dello stack delle metriche personalizzate: i tempi di risposta superiori a circa 50 millisecondi sono superiori rispetto a quelli osservati normalmente con le metriche Kubernetes standard, con ripercussioni sul periodo di ricalcolo.

Interazione con HorizontalPodAutoscaler oggetti

Puoi configurare un Horizontal Pod Autoscaler per un carico di lavoro e ottenere informazioni sugli eventi di scalabilità automatica e sulla loro causa visitando la pagina Carichi di lavoro nella console Google Cloud.

Ogni Horizontal Pod Autoscaler esiste nel cluster come un oggetto HorizontalPodAutoscaler. Puoi usare comandi come kubectl get hpa o kubectl describe hpa HPA_NAME per interagire con questi oggetti.

Puoi anche creare oggetti HorizontalPodAutoscaler utilizzando il comando kubectl autoscale.

Passaggi successivi