Questa pagina fornisce una panoramica della scalabilità automatica pod verticale in Google Kubernetes Engine (GKE) e fornisce il materiale di riferimento per la risorsa personalizzata VerticalPodAutoscaler
e i tipi correlati.
La scalabilità automatica pod verticale fornisce suggerimenti per l'utilizzo delle risorse nel tempo. Per aumenti improvvisi nell'utilizzo delle risorse, utilizza Horizontal Pod Autoscaler.
Per scoprire come utilizzare la scalabilità automatica pod verticale, consulta Scalare le richieste e i limiti di risorse dei container.
Per conoscere le best practice per la scalabilità automatica, 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 pod verticale consente di analizzare e impostare le risorse di CPU e memoria richieste dai pod. Anziché dover configurare richieste e limiti di CPU e richieste e limiti di memoria aggiornati per i container nei tuoi pod, puoi configurare la scalabilità automatica dei pod verticali in modo da fornire valori consigliati per le richieste e i limiti di CPU e memoria che puoi usare per aggiornare manualmente i tuoi pod, oppure puoi configurare la scalabilità automatica pod verticale per aggiornare automaticamente i valori.
La scalabilità automatica pod verticale è abilitata per impostazione predefinita nei cluster Autopilot.
Scalabilità automatica pod verticale in modalità automatica
A causa delle limitazioni di Kubernetes, l'unico modo per modificare le richieste di risorse di un pod in esecuzione è ricreare il pod. Se crei un oggetto VerticalPodAutoscaler
con un valore di updateMode
pari a Auto
, VerticalPodAutoscaler
rimuove un pod
se ha bisogno di modificare le richieste di risorse del pod.
Per limitare il numero di riavvii dei pod, utilizza un budget per l'interruzione dei pod. Per assicurarti che il cluster sia in grado di gestire le nuove dimensioni dei tuoi carichi di lavoro, utilizza il gestore della scalabilità automatica dei cluster e il provisioning automatico dei nodi.
La scalabilità automatica pod verticale avvisa il gestore della scalabilità automatica dei cluster prima dell'aggiornamento e fornisce le risorse necessarie per il carico di lavoro ridimensionato prima di ricreare il carico di lavoro, in modo da ridurre al minimo i tempi di interruzione.
Vantaggi
La scalabilità automatica pod verticale offre i seguenti vantaggi:
- L'impostazione di richieste e limiti di risorse corretti per i carichi di lavoro migliora stabilità ed efficienza in termini di costi. Se le dimensioni delle risorse dei pod sono inferiori a quelle richieste dai carichi di lavoro, l'applicazione può essere limitata o non riuscita a causa di errori di esaurimento della memoria. Se le dimensioni delle tue risorse sono eccessive, hai sprechi e, di conseguenza, fatture più grandi.
- I nodi del cluster vengono usati in modo efficiente perché i pod usano esattamente ciò di cui hanno bisogno.
- I pod sono pianificati su nodi che dispongono delle risorse appropriate.
- Non è necessario eseguire attività di benchmarking dispendiose in termini di tempo per determinare i valori corretti per le richieste di CPU e memoria.
- Tempi di manutenzione ridotti perché il gestore della scalabilità automatica può regolare le richieste di CPU e memoria nel tempo senza alcuna azione da parte tua.
La scalabilità automatica dei pod verticali GKE offre i seguenti vantaggi rispetto al gestore della scalabilità automatica open source di Kubernetes:
- Tiene conto delle dimensioni massime dei nodi e delle quote delle risorse per determinare il target del suggerimento.
- Comunica al gestore della scalabilità automatica dei cluster di regolare la capacità del cluster.
- Utilizza i dati storici, fornendo le metriche raccolte prima di abilitare il gestore della scalabilità automatica pod verticale.
- Esegue i pod del gestore della scalabilità automatica pod verticale come processi del piano di controllo, anziché deployment sui nodi worker.
Limitazioni
- Per utilizzare la scalabilità automatica pod verticale con scalabilità automatica orizzontale dei pod, utilizza la scalabilità automatica dei pod multidimensionali. Puoi anche utilizzare la scalabilità automatica verticale dei pod con scalabilità automatica orizzontale dei pod su metriche personalizzate ed esterne.
- La scalabilità automatica pod verticale non è pronta per l'uso con carichi di lavoro basati su JVM a causa della visibilità limitata sull'utilizzo effettivo della memoria da parte del carico di lavoro.
- La scalabilità automatica pod verticale ha un'impostazione predefinita di due repliche minime affinché i deployment sostituiscano i pod con valori delle risorse rivisti. In GKE 1.22 e versioni successive, puoi ignorare 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 pod verticale funziona al meglio con carichi di lavoro omogenei a lunga esecuzione.
Riferimento API
Questo è il riferimento dell'API v1
. Consigliamo vivamente di utilizzare
questa versione dell'API.
VerticalPodAutoscaler v1 scalabilità automatica.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 di |
VerticalPodAutoscalerSpec v1 scalabilità automatica.k8s.io
Campi | |
---|---|
targetRef |
Riferimento al controller che gestisce l'insieme di pod che il gestore della scalabilità automatica potrà controllare, ad esempio un oggetto Deployment o StatefulSet.
Puoi puntare un |
updatePolicy |
Specifica se gli aggiornamenti consigliati vengono applicati all'avvio di un pod e se gli aggiornamenti consigliati vengono applicati durante la vita di un pod. |
resourcePolicy |
Specifica i criteri per la regolazione delle richieste di CPU e memoria per i singoli container. Il criterio delle risorse può essere utilizzato per impostare vincoli sui suggerimenti per i singoli container. Se non specificato, il gestore della scalabilità automatica calcola le risorse consigliate per tutti i container nel pod, senza vincoli aggiuntivi. |
recommenders |
Motore per suggerimenti responsabile della generazione dei suggerimenti per questo oggetto VPA. Lascia il campo vuoto per utilizzare il motore per suggerimenti predefinito fornito da GKE. In caso contrario, l'elenco può contenere esattamente una voce per un motore per suggerimenti alternativo fornito dall'utente. Funzionalità supportata a partire da GKE 1.22. |
VerticalPodAutoscalerList v1 scalabilità automatica.k8s.io
Campi | |
---|---|
|
gruppo, versione e tipo di API. |
metadata |
Metadati degli oggetti standard. |
items |
Un elenco di |
PodUpdatePolicy v1 scalabilità automatica.k8s.io
Campi | |
---|---|
updateMode |
Specifica se gli aggiornamenti consigliati vengono applicati all'avvio di un pod e se gli aggiornamenti consigliati vengono applicati durante la vita di un pod. I valori possibili sono "Off", "Initial", "Recreate" e "Auto". Se non specifichi un valore, il valore predefinito è "Automatico". |
minReplicas |
Numero minimo di repliche che devono essere attive affinché il programma di aggiornamento possa tentare l'eliminazione dei pod (in attesa di altri controlli come il budget per l'interruzione dei pod). Sono consentiti solo valori positivi. Il valore predefinito è il flag globale "--min-replicas", impostato su 2 in GKE. Funzionalità supportata a partire da GKE 1.22. |
PodResourcePolicy v1 scalabilità automatica.k8s.io
Campi | |
---|---|
containerPolicies |
Un array di criteri delle risorse per i singoli container. Può esistere al massimo una voce per ogni container denominato e, facoltativamente, una singola voce con carattere jolly con "containerName = '*'", che gestisce tutti i container che non hanno criteri individuali. |
ContainerResourcePolicy v1 scalabilità automatica.k8s.io
Campi | |
---|---|
containerName |
Il nome del container a cui si applica il criterio. Se non specificato, il criterio viene utilizzato come criterio predefinito. |
mode |
Specifica se gli aggiornamenti consigliati vengono applicati al container all'avvio e se gli aggiornamenti consigliati vengono applicati durante il ciclo di vita del container. I valori possibili sono "Off" e "Auto". Se non specifichi un valore, il valore predefinito è "Automatico". |
minAllowed |
Specifica la richiesta di CPU e la memoria minime consentite per il container. Per impostazione predefinita, non è applicato alcun importo minimo. |
maxAllowed |
Specifica la richiesta di CPU e la memoria massime consentite per il container. Per impostazione predefinita, non viene applicato un massimo. |
ControlledResources |
Specifica il tipo di suggerimenti che verranno calcolati (e possibilmente applicati) da |
VerticalPodAutoscalerRecommenderSelector v1 scalabilità automatica.k8s.io
Campi | |
---|---|
name |
Nome del motore per suggerimenti responsabile della generazione dei suggerimenti per questo oggetto. |
VerticalPodAutoscalerStatus v1 scalabilità automatica.k8s.io
Campi | |
---|---|
recommendation |
Le richieste di CPU e memoria consigliate più recenti. |
conditions |
Descrive lo stato attuale di |
RecommendedPodResources v1 scalabilità automatica.k8s.io
Campi | |
---|---|
containerRecommendation |
Un array di suggerimenti sulle risorse per i singoli container. |
RecommendedContainerResources v1 scalabilità automatica.k8s.io
Campi | |
---|---|
containerName |
Il nome del container a cui si applica il suggerimento. |
target |
La richiesta di CPU e la richiesta di memoria consigliate per il container. |
lowerBound |
La richiesta di CPU minima consigliata e la richiesta di memoria per il container. Non è garantito che questo importo sia sufficiente per la stabilità dell'applicazione. L'esecuzione con richieste di CPU e memoria ridotte potrebbe avere un impatto significativo sulle prestazioni o sulla disponibilità. |
upperBound |
La richiesta di CPU massima consigliata e la richiesta di memoria per il container. Le richieste di CPU e memoria superiori a questi valori potrebbero essere sprecate. |
uncappedTarget |
Il suggerimento sulle risorse più recente calcolato dal gestore della scalabilità automatica, in base all'utilizzo effettivo delle risorse, senza tenere conto di ContainerResourcePolicy. Se l'utilizzo effettivo delle risorse fa sì che la destinazione violi ContainerResourcePolicy, potrebbe essere diverso dal suggerimento vincolato. Questo campo non influisce sull'assegnazione effettiva delle risorse. Viene utilizzato solo come indicazione dello stato. |
VerticalPodAutoscalerCondition v1 scalabilità automatica.k8s.io
Campi | |
---|---|
type |
Il tipo di condizione descritto. I valori possibili sono "RecommendationProvided", "LowConfidence", "NoPods {2/}" e "FetchingCronologia". |
status |
Lo stato della condizione. I valori possibili sono Vero, Falso e Sconosciuto. |
lastTransitionTime |
L'ultima volta che la condizione ha effettuato una transizione da uno stato a un altro. |
reason |
Il motivo dell'ultima transizione da uno stato a un altro. |
message |
Una stringa leggibile che fornisce dettagli sull'ultima transizione da uno stato a un altro. |
Passaggi successivi
- Scopri le best practice per l'esecuzione di applicazioni Kubernetes con ottimizzazione dei costi su GKE.
- Scopri di più sul gestore della scalabilità automatica dei cluster.