Questa pagina fornisce una panoramica della scalabilità automatica dei pod verticali in Google Kubernetes Engine (GKE) e materiale di riferimento per la risorsa personalizzata VerticalPodAutoscaler
e i tipi correlati.
La scalabilità automatica dei pod verticali fornisce consigli per l'utilizzo delle risorse nel tempo. Per aumenti improvvisi dell'utilizzo delle risorse, utilizza Horizontal Pod Autoscaler.
Per scoprire come utilizzare la scalabilità automatica pod verticale, consulta Eseguire la scalabilità delle richieste e dei limiti delle risorse dei container.
Per conoscere le best practice per l'autoscaling, consulta Best practice per l'esecuzione di applicazioni Kubernetes con ottimizzazione dei costi su GKE.
Come funziona la scalabilità automatica pod verticale
La scalabilità automatica del pod verticale ti consente di analizzare e impostare le risorse di CPU e memoria richieste dai pod. Anziché dover impostare aggiornati limiti e richieste di CPU e limiti e richieste di memoria per i container nei tuoi pod, puoi configurare la scalabilità automatica pod verticale in modo da fornire valori consigliati per i limiti e le richieste di CPU e memoria che puoi utilizzare per aggiornare manualmente i pod oppure puoi configurare la scalabilità automatica pod verticale in modo da aggiornare automaticamente i valori.
La scalabilità automatica del pod verticale è abilitata per impostazione predefinita nei cluster Autopilot.
Scalabilità automatica del pod verticale in modalità Auto
A causa delle limitazioni di Kubernetes, l'unico modo per modificare le richieste di risorse di un
pod in esecuzione è ricrearlo. Se crei un oggetto VerticalPodAutoscaler
con un updateMode
di Auto
, VerticalPodAutoscaler
esegue l'espulsione di un pod
se deve modificare le richieste di risorse del pod.
Per limitare il numero di riavvii dei pod, utilizza un budget di interruzione dei pod. Per assicurarti che il cluster possa gestire le nuove dimensioni dei tuoi carichi di lavoro, utilizza il gestore della scalabilità automatica del cluster e il provisioning automatico dei nodi.
La scalabilità automatica del pod verticale invia una notifica al gestore della scalabilità automatica del cluster prima dell'aggiornamento e fornisce le risorse necessarie per il carico di lavoro ridimensionato prima di ricrearlo, in modo da ridurre al minimo il tempo di interruzione.
Vantaggi
La scalabilità automatica del pod verticale offre i seguenti vantaggi:
- Impostare richieste e limiti di risorse corretti per i tuoi carichi di lavoro migliora la stabilità e l'efficienza in termini di costi. Se le dimensioni delle risorse del pod sono inferiori a quelle richieste dai tuoi carichi di lavoro, l'applicazione può essere limitata o non riuscire a funzionare a causa di errori di esaurimento della memoria. Se le dimensioni delle risorse sono troppo grandi, si verificano sprechi e, di conseguenza, le fatture sono più alte.
- I nodi del cluster vengono utilizzati in modo efficiente perché i pod utilizzano esattamente ciò di cui hanno bisogno.
- I pod vengono pianificati sui nodi che dispongono delle risorse appropriate.
- Non devi eseguire attività di benchmarking che richiedono molto tempo per determinare i valori corretti per le richieste di CPU e memoria.
- Tempo di manutenzione ridotto perché lo strumento di scalabilità automatica può regolare le richieste di CPU e memoria nel tempo senza alcun intervento da parte tua.
La scalabilità automatica dei pod verticali di GKE offre i seguenti vantaggi rispetto al gestore della scalabilità automatica open source di Kubernetes:
- Tiene conto della dimensione massima del nodo e delle quote delle risorse per determinare il target del consiglio.
- Invia una notifica al gestore della scalabilità automatica dei cluster per aggiustare la capacità del cluster.
- Utilizza i dati storici, fornendo le metriche raccolte prima di attivare la scalabilità automatica dei pod verticali.
- Esegui i pod Vertical Pod Autoscaler come processi di piano di controllo, anziché come implementazioni sui nodi worker.
Limitazioni
- Per utilizzare la scalabilità automatica dei pod verticale con la scalabilità automatica dei pod orizzontale, utilizza la scalabilità automatica dei pod multidimensionale. Puoi anche utilizzare la scalabilità automatica dei pod verticale con la scalabilità automatica orizzontale dei pod su metriche personalizzate e esterne.
- La scalabilità automatica dei pod verticali non è pronta per l'utilizzo con i carichi di lavoro basati su JVM a causa della visibilità limitata sull'utilizzo effettivo della memoria del carico di lavoro.
- La scalabilità automatica dei pod verticali ha un'impostazione predefinita di due repliche minime per i deployment per sostituire i pod con valori delle risorse rivisti. Nella versione GKE 1.22 e successive, puoi sostituire questa impostazione specificando un valore per
minReplicas
nel campo PodUpdatePolicy.
Best practice
- Per evitare interruzioni degli aggiornamenti del cluster, ti consigliamo di mantenere il numero di oggetti
VerticalPodAutoscaler
per cluster inferiore a 1000. - La scalabilità automatica del pod verticale funziona al meglio con carichi di lavoro omogenei di lunga durata.
Riferimento API
Questo è il riferimento all'API v1
. Ti consigliamo vivamente di utilizzare questa versione dell'API.
VerticalPodAutoscaler v1 autoscaling.k8s.io
Campi | |
---|---|
|
Gruppo, versione e tipo di API. |
metadata |
Metadati degli oggetti standard. |
spec |
Il comportamento desiderato di |
status |
Lo stato osservato più di recente del |
VerticalPodAutoscalerSpec v1 autoscaling.k8s.io
Campi | |
---|---|
targetRef |
Riferimento al controller che gestisce l'insieme di pod da controllare per il gestore della scalabilità automatica, ad esempio un deployment o un StatefulSet.
Puoi indirizzare un |
updatePolicy |
Specifica se gli aggiornamenti consigliati vengono applicati all'avvio di un pod e se vengono applicati durante il ciclo di vita di un pod. |
resourcePolicy |
Specifica i criteri per la regolazione delle richieste di CPU e memoria per i singoli container. Il criterio della risorsa può essere utilizzato per impostare vincoli sui consigli per i singoli contenitori. Se non è specificato, il gestore della scalabilità automatica calcola le risorse consigliate per tutti i container del pod, senza vincoli aggiuntivi. |
recommenders |
Motore per suggerimenti responsabile della generazione di consigli per questo oggetto VPA. Lascia vuoto per utilizzare il recommender predefinito fornito da GKE. In caso contrario, l'elenco può contenere esattamente una voce per un recommender alternativo fornito dall'utente. Supportato a partire da GKE 1.22. |
VerticalPodAutoscalerList v1 autoscaling.k8s.io
Campi | |
---|---|
|
Gruppo, versione e tipo di API. |
metadata |
Metadati degli oggetti standard. |
items |
Un elenco di oggetti |
PodUpdatePolicy v1 autoscaling.k8s.io
Campi | |
---|---|
updateMode |
Specifica se gli aggiornamenti consigliati vengono applicati all'avvio di un pod e se vengono applicati durante il ciclo di vita di un pod. I valori possibili sono "Off", "Initial", "Recreate" e "Auto". Il valore predefinito è "Auto" se non specifichi un valore. |
minReplicas |
Numero minimo di repliche che devono essere attive affinché Updater possa tentare di eliminare il pod (in attesa di altri controlli come il budget di interruzione dei pod). Sono consentiti solo valori positivi. Il valore predefinito è il flag globale "--min-replicas", impostato su 2 in GKE. Supportato a partire da GKE 1.22. |
PodResourcePolicy v1 autoscaling.k8s.io
Campi | |
---|---|
containerPolicies |
Un array di criteri delle risorse per i singoli container. Può esserci al massimo una voce per ogni contenitore denominato e, facoltativamente, una singola voce jolly con "containerName = '*'", che gestisce tutti i contenitori che non hanno singoli criteri. |
ContainerResourcePolicy v1 autoscaling.k8s.io
Campi | |
---|---|
containerName |
Il nome del contenitore a cui si applica il criterio. Se non viene specificato, il criterio viene utilizzato come criterio predefinito. |
mode |
Specifica se gli aggiornamenti consigliati vengono applicati al contenitore all'avvio e se vengono applicati durante la vita del contenitore. I valori possibili sono "Off" e "Auto". Il valore predefinito è "Auto" se non specifichi un valore. |
minAllowed |
Specifica la richiesta di CPU e memoria minima consentita per il contenitore. Per impostazione predefinita, non viene applicato alcun importo minimo. |
maxAllowed |
Specifica la richiesta massima di CPU e memoria consentita per il contenitore. Per impostazione predefinita, non viene applicato alcun valore massimo. |
ControlledResources |
Specifica il tipo di consigli che verranno calcolati (e possibly applicati) da |
VerticalPodAutoscalerRecommenderSelector v1 autoscaling.k8s.io
Campi | |
---|---|
name |
Nome del recommender responsabile della generazione del consiglio per questo oggetto. |
VerticalPodAutoscalerStatus v1 autoscaling.k8s.io
Campi | |
---|---|
recommendation |
Le richieste di CPU e memoria consigliate più di recente. |
conditions |
Descrive lo stato attuale del |
RecommendedPodResources v1 autoscaling.k8s.io
Campi | |
---|---|
containerRecommendation |
Un array di consigli sulle risorse per i singoli contenitori. |
RecommendedContainerResources v1 autoscaling.k8s.io
Campi | |
---|---|
containerName |
Il nome del contenitore a cui si applica il consiglio. |
target |
La richiesta di CPU e memoria consigliata per il contenitore. |
lowerBound |
La richiesta di CPU e memoria minima consigliata per il contenitore. Non è garantito che questo importo sia sufficiente per la stabilità dell'applicazione. L'esecuzione con richieste di CPU e memoria inferiori è probabile che abbia un impatto significativo sulle prestazioni o sulla disponibilità. |
upperBound |
La richiesta di CPU e memoria massima consigliata per il contenitore. Le richieste di CPU e memoria superiori a questi valori potrebbero essere sprecate. |
uncappedTarget |
Il consiglio sulle risorse più recente calcolato dall'autoscalatore, basato sull'utilizzo effettivo delle risorse, senza tenere conto di ContainerResourcePolicy. Se l'utilizzo effettivo delle risorse causa la violazione del ContainerResourcePolicy da parte del target, il valore potrebbe essere diverso dal consiglio limitato. Questo campo non influisce sull'assegnazione effettiva delle risorse. Viene utilizzato solo come indicazione dello stato. |
VerticalPodAutoscalerCondition v1 autoscaling.k8s.io
Campi | |
---|---|
type |
Il tipo di condizione descritta. I valori possibili sono "RecommendationProvided", "LowConfidence", "NoPodsMatched" e "FetchingHistory". |
status |
Lo stato della condizione. I valori possibili sono True, False e Unknown. |
lastTransitionTime |
L'ultima volta che la condizione ha eseguito la transizione da uno stato all'altro. |
reason |
Il motivo dell'ultima transizione da uno stato all'altro. |
message |
Una stringa leggibile che fornisce dettagli sull'ultima transizione da uno stato all'altro. |
Passaggi successivi
- Scopri le best practice per l'esecuzione di applicazioni Kubernetes con ottimizzazione dei costi su GKE.
- Scopri di più su Cluster Autoscaler.