Scalabilità automatica pod verticale


Questa pagina fornisce una panoramica della scalabilità automatica pod verticale Google Kubernetes Engine (GKE) e fornisce materiale di riferimento per VerticalPodAutoscaler risorsa personalizzata e tipi correlati.

La scalabilità automatica pod verticale fornisce suggerimenti 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 pod verticale consente di analizzare e impostare risorse di CPU e memoria come richiesto dai pod. Invece di dover configurare Richieste e limiti CPU e richieste e limiti di memoria per i container nei tuoi pod, puoi configurare la scalabilità automatica pod verticale fornisce valori consigliati per le richieste e i limiti di CPU e memoria aggiornare manualmente i pod oppure 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 in esecuzione è ricreare il pod. 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 di pod, utilizza una Budget per l'interruzione dei pod. Per assicurarti che il cluster possa gestire le nuove dimensioni dei 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 pod verticale offre i seguenti vantaggi:

  • L'impostazione delle richieste e dei limiti di risorse giusti per i carichi di lavoro migliora la stabilità e l'efficienza in termini di costi. Se le dimensioni delle risorse dei pod sono inferiori a per soddisfare i tuoi carichi di lavoro, l'applicazione può essere limitata non riuscita a causa di errori di memoria insufficiente. Se le risorse sono troppo grandi, comporta sprechi e, di conseguenza, bollette più salate.
  • I nodi del cluster vengono utilizzati in modo efficiente perché i pod utilizzano esattamente ciò di cui hanno bisogno.
  • I pod sono pianificati su nodi che dispongono delle risorse appropriate.
  • Non è necessario eseguire attività di benchmarking che richiedono molto tempo per determinare e 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 Gestore della scalabilità automatica pod verticale.
  • Esegui i pod di Vertical Pod Autoscaler come processi del piano di controllo, anziché come implementazioni sui nodi worker.

Limitazioni

  • La scalabilità automatica pod verticale non è pronta per essere utilizzata con carichi di lavoro basati su JVM a causa visibilità limitata sull'utilizzo effettivo della memoria da parte 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 GKE 1.22 e versioni successive, puoi eseguire l'override di questa impostazione specificando un valore per minReplicas in PodUpdatePolicy .

Best practice

  • Per evitare interruzioni degli aggiornamenti del cluster, ti consigliamo di mantenere il numero di VerticalPodAutoscaler oggetti per cluster sotto i 1000.
  • La scalabilità automatica pod verticale funziona al meglio con carichi di lavoro omogenei a lunga esecuzione.

Riferimento API

Questo è il riferimento all'API v1. Ti consigliamo vivamente di utilizzare questa versione dell'API.

VerticalPodAutoscaler v1 autoscaling.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 del VerticalPodAutoscaler.

VerticalPodAutoscalerSpec v1 scalabilità automatica.k8s.io

Campi
targetRef

CrossVersionObjectReference

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 puntare un VerticalPodAutoscaler verso qualsiasi controller che abbia un Larga scala risorsa secondaria. In genere, VerticalPodAutoscaler recupera l'insieme di pod da ScaleStatus del controller. Per alcuni controller ben noti, ad esempio DaemonSet, VerticalPodAutoscaler recupera l'insieme di pod dalla specifica del controller.

updatePolicy

PodUpdatePolicy

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

PodResourcePolicy

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

VerticalPodAutoscalerRecommenderSelector array

Motore per suggerimenti responsabile della generazione di suggerimenti per questo VPA . Lascia vuoto per utilizzare il motore per suggerimenti predefinito fornito da con GKE. In caso contrario, l'elenco può contenere esattamente una voce per un nome fornito dall'utente un motore per suggerimenti alternativo. Supportato a partire da GKE 1.22.

VerticalPodAutoscalerList v1 autoscaling.k8s.io

Campi

TypeMeta

Gruppo, versione e tipo di API.

metadata

ObjectMeta

Metadati degli oggetti standard.

items

VerticalPodAutoscaler array

Un elenco di oggetti VerticalPodAutoscaler.

PodUpdatePolicy v1 autoscaling.k8s.io

Campi
updateMode

string

Specifica se gli aggiornamenti consigliati vengono applicati quando un pod viene e se gli aggiornamenti consigliati 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

int32

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 è "--min-replicas" globale segnalare che è impostato su 2 in GKE. Supportato 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ò 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 scalabilità automatica.k8s.io

Campi
containerName

string

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

mode

ContainerScalingMode

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 è "Automatico" se non specifichi un valore.

minAllowed

ResourceList

Specifica la richiesta di CPU e memoria minima consentita per il contenitore. Per impostazione predefinita, non viene applicato alcun importo minimo.

maxAllowed

ResourceList

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

ControlledResources

[]ResourceName

Specifica il tipo di suggerimenti che verranno calcolati (e eventualmente applicato) dal VerticalPodAutoscaler. Se è vuoto, viene utilizzato il valore predefinito [ResourceCPU, ResourceMemory].

VerticalPodAutoscalerRecommenderSelector v1 scalabilità automatica.k8s.io

Campi
name

string

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

VerticalPodAutoscalerStatus v1 autoscaling.k8s.io

Campi
recommendation

RecommendedPodResources

Le richieste di CPU e memoria consigliate più di recente.

conditions

VerticalPodAutoscalerCondition array

Descrive lo stato attuale del VerticalPodAutoscaler.

RecommendedPodResources v1 scalabilità automatica.k8s.io

Campi
containerRecommendation

RecommendedContainerResources array

Un array di consigli sulle risorse per i singoli contenitori.

RecommendedContainerResources v1 autoscaling.k8s.io

Campi
containerName

string

Il nome del contenitore a cui si applica il suggerimento.

target

ResourceList

La richiesta di CPU e memoria consigliate per il container.

lowerBound

ResourceList

La richiesta di CPU minima e la richiesta di memoria per il containerizzato. Non è garantito che questo importo sia sufficiente affinché l'applicazione sia stabile. L'esecuzione con richieste di CPU e memoria inferiori è probabile che abbia un impatto significativo sul rendimento o sulla disponibilità.

upperBound

ResourceList

La richiesta massima di CPU e di memoria consigliata per l'attributo containerizzato. 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 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. È utilizzato solo come indicazione dello stato.

VerticalPodAutoscalerCondition v1 scalabilità automatica.k8s.io

Campi
type

VerticalPodAutoscalerConditionType

Il tipo di condizione descritta. I valori possibili sono "RecommendationProvided", "LowConfidence", "NoPodsMatched" e "FetchingHistory".

status

ConditionStatus

Lo stato della condizione. I valori possibili sono True, False, e Sconosciuto.

lastTransitionTime

Time

L'ultima volta che la condizione è passata da uno stato all'altro.

reason

string

Il motivo dell'ultima transizione da uno stato all'altro.

message

string

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

Passaggi successivi