Scalabilità automatica orizzontale dei pod

Questa pagina fornisce una panoramica della scalabilità automatica orizzontale dei pod e spiega come funziona in Google Kubernetes Engine (GKE). Puoi anche leggere come configurare e utilizzare la scalabilità automatica orizzontale dei pod sui 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 segnalate da Kubernetes o metriche esterne 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 modifiche del numero di pod. Per questo motivo, ti consigliamo di utilizzare la scalabilità automatica orizzontale dei pod per tutti i cluster.

Perché utilizzare la scalabilità automatica orizzontale dei pod

Quando esegui il deployment iniziale del carico di lavoro in un cluster Kubernetes, potresti non essere sicuro dei requisiti delle risorse e di come questi requisiti potrebbero cambiare a seconda dei pattern di utilizzo, delle dipendenze esterne o di 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 solo la capacità aggiuntiva quando ne hai bisogno.

Non è sempre facile prevedere gli indicatori che mostrano se il carico di lavoro è sottoutilizzato o se le risorse sono insufficienti. 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 l'utilizzo di CPU o memoria utilizzata di un determinato pod supera una soglia. Questo può essere espresso come valore non elaborato o come percentuale della quantità richiesta dal pod per la risorsa.

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

    Questa opzione può essere utile se la tua applicazione è soggetta a colli di bottiglia di rete, anziché di CPU o memoria.

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

    Ad esempio, il carico di lavoro potrebbe richiedere più CPU quando acquisisce 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 che aumenti automaticamente il numero di pod quando le dimensioni della coda raggiungono una determinata soglia e che riduca 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 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 carico di lavoro. Ogni Horizontal Pod Autoscaler controlla periodicamente le metriche di un determinato carico di lavoro rispetto 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 CPU o 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 per una metrica segnalata per produrre una proporzione e la utilizza per scalare automaticamente il carico di lavoro. Puoi leggere una descrizione dell' algoritmo Horizontal Pod Autoscaler nella documentazione del progetto Kubernetes.

Risposta 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 di esse. Per l'azione di scalabilità automatica viene selezionata la scalabilità 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.

Prevenire il thrashing

Thrashing si riferisce a 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, Horizontal Pod Autoscaler sceglie la raccomandazione più grande da una finestra di stabilizzazione specificata. Questo comportamento è controllato dal campo scaleDown.stabilizationWindowSeconds nella specifica behavior di HPA, che per impostazione predefinita è di 300 secondi (cinque minuti) in GKE.

Per evitare che piccole fluttuazioni causino eventi di scalabilità non necessari, Horizontal Pod Autoscaler utilizza un valore di tolleranza del 10%. Per un determinato target, non viene eseguita alcuna azione di scalabilità se il rapporto tra il valore della metrica corrente e il valore della metrica target è compreso nel 10% di 1,0.

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. Puoi configurare la scalabilità automatica multidimensionale dei pod (in versione beta) per scalare orizzontalmente la CPU e verticalmente la memoria contemporaneamente.
  • Se hai un deployment, non configurare la scalabilità automatica orizzontale dei pod sul ReplicaSet o sul Replication Controller che lo supporta. Quando esegui un aggiornamento in sequenza sul deployment o sul Replication Controller, questo viene sostituito da un nuovo Replication Controller. Configura invece la scalabilità automatica orizzontale dei pod sul deployment stesso.
  • Non puoi utilizzare la scalabilità automatica orizzontale dei pod per i carichi di lavoro che non possono essere scalati, come i DaemonSet.
  • La scalabilità automatica orizzontale dei pod espone le metriche come risorse Kubernetes, il che impone limitazioni ai nomi delle metriche, ad esempio nessun carattere maiuscolo o "/". L'adattatore delle metriche potrebbe consentire la ridenominazione. Ad esempio, consulta l' prometheus-adapter as operator.
  • Horizontal Pod Autoscaler non esegue fare lo scale down se una delle metriche configurate per il monitoraggio non è disponibile. Per verificare se hai metriche non disponibili, consulta Visualizzazione dei dettagli di un Horizontal Pod Autoscaler.

Scalabilità

Sebbene Horizontal Pod Autoscaler non abbia un limite rigido al numero di oggetti HPA supportati, le sue prestazioni possono essere influenzate dall'aumento di questo numero. In particolare, il periodo tra i ricalcoli HPA potrebbe diventare più lungo dei 15 secondi standard.

  • Nella versione secondaria di GKE 1.22 o successive, il periodo di ricalcolo dovrebbe rimanere entro 15 secondi con un massimo di 300 oggetti HPA.
  • Nella versione secondaria di GKE 1.31 o successive, se è configurato il profilo HPA per le prestazioni, il periodo di ricalcolo dovrebbe rimanere entro 15 secondi con un massimo di 1000 oggetti HPA. Scopri come configurare il profilo HPA per le prestazioni.
  • Nella versione secondaria di GKE 1.33 o successive, se è configurato il profilo HPA per le prestazioni, il periodo di ricalcolo dovrebbe rimanere entro 15 secondi con un massimo di 5000 oggetti HPA. Il profilo HPA per le prestazioni è abilitato per impostazione predefinita su tutti i cluster che soddisfano i requisiti.

Anche i seguenti fattori possono influire sulle prestazioni:

Interagire 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 visitando la pagina Carichi di lavoro nellaconsole. 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 interagire con questi oggetti.

Puoi anche creare HorizontalPodAutoscaler oggetti utilizzando il kubectl autoscale comando.

Passaggi successivi