Scalabilità automatica pod verticale


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

  • 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

TypeMeta

gruppo, versione e tipo di API.

metadata

ObjectMeta

Metadati degli oggetti standard.

spec

VerticalPodAutoscalerSpec

Il comportamento desiderato di VerticalPodAutoscaler.

status

VerticalPodAutoscalerStatus

Lo stato osservato più di recente di VerticalPodAutoscaler.

VerticalPodAutoscalerSpec v1 scalabilità automatica.k8s.io

Campi
targetRef

CrossVersionObjectReference

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 VerticalPodAutoscaler verso qualsiasi controller che abbia una sottorisorsa Scale. In genere, VerticalPodAutoscaler recupera il set di pod dallo ScaleStatus del controller. Per alcuni controller noti, ad esempio DaemonSet, VerticalPodAutoscaler recupera il set di pod dalle specifiche del controller.

updatePolicy

PodUpdatePolicy

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

PodResourcePolicy

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

VerticalPodAutoscalerRecommenderSelector array

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

TypeMeta

gruppo, versione e tipo di API.

metadata

ObjectMeta

Metadati degli oggetti standard.

items

VerticalPodAutoscaler array

Un elenco di VerticalPodAutoscaler oggetti.

PodUpdatePolicy v1 scalabilità automatica.k8s.io

Campi
updateMode

string

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

int32

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

ContainerResourcePolicy array

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

string

Il nome del container a cui si applica il criterio. Se non specificato, il criterio viene utilizzato come criterio predefinito.

mode

ContainerScalingMode

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

ResourceList

Specifica la richiesta di CPU e la memoria minime consentite per il container. Per impostazione predefinita, non è applicato alcun importo minimo.

maxAllowed

ResourceList

Specifica la richiesta di CPU e la memoria massime consentite per il container. Per impostazione predefinita, non viene applicato un massimo.

ControlledResources

[]ResourceName

Specifica il tipo di suggerimenti che verranno calcolati (e possibilmente applicati) da VerticalPodAutoscaler. Se vuoto, viene utilizzato il valore predefinito di [ResourceCPU, ResourceMemory].

VerticalPodAutoscalerRecommenderSelector v1 scalabilità automatica.k8s.io

Campi
name

string

Nome del motore per suggerimenti responsabile della generazione dei suggerimenti per questo oggetto.

VerticalPodAutoscalerStatus v1 scalabilità automatica.k8s.io

Campi
recommendation

RecommendedPodResources

Le richieste di CPU e memoria consigliate più recenti.

conditions

VerticalPodAutoscalerCondition array

Descrive lo stato attuale di VerticalPodAutoscaler.

RecommendedPodResources v1 scalabilità automatica.k8s.io

Campi
containerRecommendation

RecommendedContainerResources array

Un array di suggerimenti sulle risorse per i singoli container.

RecommendedContainerResources v1 scalabilità automatica.k8s.io

Campi
containerName

string

Il nome del container a cui si applica il suggerimento.

target

ResourceList

La richiesta di CPU e la richiesta di memoria consigliate per il container.

lowerBound

ResourceList

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

ResourceList

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

ResourceList

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

VerticalPodAutoscalerConditionType

Il tipo di condizione descritto. I valori possibili sono "RecommendationProvided", "LowConfidence", "NoPods {2/}" e "FetchingCronologia".

status

ConditionStatus

Lo stato della condizione. I valori possibili sono Vero, Falso e Sconosciuto.

lastTransitionTime

Time

L'ultima volta che la condizione ha effettuato una transizione da uno stato a un altro.

reason

string

Il motivo dell'ultima transizione da uno stato a un altro.

message

string

Una stringa leggibile che fornisce dettagli sull'ultima transizione da uno stato a un altro.

Passaggi successivi