Scalabilità automatica pod orizzontale


Questa pagina fornisce una panoramica della scalabilità automatica dei pod orizzontali 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 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 il provisioning automatico dei nodi scalano automaticamente il numero di nodi nel cluster in base alle variazioni del numero di pod. Per questo motivo, ti consigliamo di utilizzare la scalabilità automatica dei pod orizzontale 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 relativi requisiti di risorse e di come questi requisiti potrebbero cambiare a seconda dei pattern di utilizzo, delle dipendenze esterne o di altri fattori. Orizzontale La scalabilità automatica dei pod aiuta a garantire che il carico di lavoro funzioni in modo coerente situazioni diverse e consente di controllare i costi pagando solo quando 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. Può essere espresso come valore non elaborato o come percentuale del delle richieste dei pod per quella 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.

    Ciò può essere utile se la tua applicazione è soggetta a colli di bottiglia della rete, rispetto alla CPU o alla 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 un nuovo per la dimensione della coda e configurare Horizontal Pod Autoscaler in modo che aumentare il numero di pod quando le dimensioni della coda raggiungono una determinata soglia e per ridurre il numero di pod quando le dimensioni della coda si riducono.

Puoi combinare Horizontal Pod Autoscaler e Vertical Pod Autoscaler, nonché 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 viene periodicamente confronta le metriche di un determinato carico di lavoro con le soglie target che configuri, e modifica automaticamente la forma del carico di lavoro.

Risorse per pod

Per le risorse allocate per ogni pod, ad esempio CPU, il controller esegue query l'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 gestore della scalabilità automatica dei pod orizzontali 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 carico di lavoro per la scalabilità automatica in base a più metriche, Horizontal Pod Autoscaler valuta ogni metrica separatamente e utilizza la scalabilità per determinare la nuova scalabilità dei carichi di lavoro in base a ciascuno. Per l'azione di scalabilità automatica viene selezionata la scala più grande.

Se per qualche motivo una o più metriche non sono disponibili, il report Il gestore della scalabilità automatica dei pod continua a scalare verso l'alto in base alla dimensione più grande calcolata, ma non lo scale down.

Prevenire 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 lo schiacciamento, la modalità Orizzontale Il gestore della scalabilità automatica dei pod sceglie il suggerimento più grande in base agli ultimi cinque minuti.

Limitazioni

  • Non utilizzare Horizontal Pod Autoscaler insieme a Vertical Pod Autoscaler su CPU o memoria. Per altre metriche, puoi utilizzare Horizontal Pod Autoscaler con Vertical Pod Autoscaler.
  • Se hai un deployment, non configurare la scalabilità automatica del pod orizzontale sul ReplicaSet o sul controller di replica di supporto. Quando esegui un'azione aggiornato al Deployment o Replication Controller, viene sostituito da controller di replica. Configura invece la scalabilità automatica del pod orizzontale sul deployment stesso.
  • Non puoi utilizzare la scalabilità automatica orizzontale dei pod per carichi di lavoro che non possono essere scalati, come gli oggetti DaemonSet.
  • Non puoi utilizzare metriche personalizzate o esterne con la scalabilità automatica orizzontale dei pod per ridurre il numero di pod a zero e poi riaumentarlo.
  • La scalabilità automatica orizzontale dei pod espone metriche come risorse Kubernetes, Impongono limitazioni ai nomi delle metriche, ad esempio l'uso di lettere maiuscole o "/" caratteri. L'adattatore per le metriche potrebbe consentire la ridenominazione. Ad esempio, vedi Operatore prometheus-adapter as.

Scalabilità

Horizontal Pod Autoscaler non ha un limite rigido al numero supportato Oggetti HPA. Tuttavia, al di sopra di un certo numero di oggetti HPA, il periodo tra I ricalcoli HPA potrebbero superare i 15 secondi standard.

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

Anche i seguenti fattori possono influire sulle prestazioni:

  • 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 HorizontalPodAutoscaler oggetti

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 usare comandi come kubectl get hpa o kubectl describe hpa HPA_NAME per interagiscono con questi oggetti.

Puoi anche creare oggetti HorizontalPodAutoscaler utilizzando il metodo Comando kubectl autoscale.

Passaggi successivi