Scalabilità automatica pod orizzontale


Questa pagina fornisce una panoramica della scalabilità automatica orizzontale dei pod e spiega funziona. Leggi anche 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 del carico di lavoro o della memoria oppure in risposta alle metriche personalizzate segnalate da Kubernetes o da metriche esterne da origini esterne al cluster.

I cluster GKE con provisioning automatico dei nodi scalano automaticamente di nodi nel cluster in base alle modifiche al numero di pod. Per questo 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 dei suoi requisiti di risorse e di come potrebbero cambiare in base a modelli di utilizzo, dipendenze esterne o altri fattori. La scalabilità automatica orizzontale dei pod per garantire che il carico di lavoro funzioni in modo coerente in diverse situazioni e ti consente di controllare i costi pagando per la capacità aggiuntiva solo quando ti serve.

Non è sempre facile prevedere gli indicatori che mostrano se le tue carico di lavoro con risorse insufficienti o sottoutilizzate. Horizontal Pod Autoscaler può scalare automaticamente 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 utilizzata da un determinato pod supera un 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 segnalata da un oggetto Kubernetes in di un cluster, ad esempio la frequenza di richieste client al secondo o di scritture di I/O 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 un servizio esterne al cluster.

    Ad esempio, il carico di lavoro potrebbe aver bisogno di più CPU quando importi un numero elevato di richieste da una pipeline come Pub/Sub. Puoi creare un nuovo una metrica esterna per la dimensione della coda e configurare Horizontal Pod Autoscaler affinché 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 loop 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 CPU o memoria, viene utilizzato questo valore.
  • Se specifichi un valore percentuale per la CPU o la memoria, Horizontal Pod Autoscaler calcola il valore Valore di utilizzo medio come percentuale della CPU o della memoria del pod richieste.
  • Le metriche personalizzate ed esterne sono espresse come valori non elaborati o valori medi.

Il controller usa il valore medio o non elaborato di una metrica riportata per produrre un e utilizza questa razione per scalare automaticamente il carico di lavoro. Puoi leggere una descrizione del Algoritmo di 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 scala per determinare e gestire i nuovi carichi di lavoro. Viene selezionata la scala più grande per di scalabilità automatica.

Se per qualche motivo una o più metriche non sono disponibili, Horizontal Pod Autoscaler scala comunque verso l'alto in base alla dimensione più grande calcolata, ma non lo scale down.

Prevenire il thrashing

Il thrashing si riferisce a una situazione in cui Horizontal Pod Autoscaler tenta di eseguire successivamente la scalabilità automatica prima che il carico di lavoro finisca di rispondere alle azioni di scalabilità automatica precedenti. A evitare il thrashing, il Horizontal Pod Autoscaler sceglie il suggerimento più grande in base agli ultimi cinque minuti.

Limitazioni

  • Non utilizzare Horizontal Pod Autoscaler insieme al Gestore della scalabilità automatica pod verticale 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 orizzontale dei pod un ReplicaSet o un Replication Controller che lo supporta. Quando esegui un'azione aggiornato al Deployment o Replication Controller, viene sostituito da controller di replica. Configura invece la scalabilità automatica orizzontale dei pod il 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 fare lo scale down a zero pod e poi lo scale up di nuovo.
  • 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 di GKE 1.21 o precedente: periodo di ricalcolo dovrebbe 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:

  • Il numero di metriche su cui scalare: ogni metrica aggiunge una chiamata di recupero per i calcoli dei suggerimenti, influenzando il periodo di ricalcolo.
  • Latenza dello stack delle metriche personalizzate: i tempi di risposta superiori a circa 50 millisecondi sarebbero superiori a quelli osservati con le metriche standard di Kubernetes, con ripercussioni sul periodo di ricalcolo.

Interazione con HorizontalPodAutoscaler oggetti

Puoi configurare Horizontal Pod Autoscaler per un carico di lavoro e ottenere informazioni sulla scalabilità automatica degli eventi e cosa li ha causati, visitando il Carichi di lavoro nella 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