Scalabilità automatica pod verticale

Questa pagina spiega come analizzare e ottimizzare l'allocazione delle risorse per migliorare l'efficienza del workload in Google Kubernetes Engine (GKE) utilizzando la scalabilità automatica verticale dei pod. Analizzando l'utilizzo delle risorse del tuo workload nel tempo, puoi ricevere consigli per l'ottimizzazione e regolare automaticamente le richieste e i limiti di CPU e memoria per i container all'interno dei pod.

In questa pagina scopri come funziona la scalabilità automatica pod verticale, i suoi vantaggi e limiti, le best practice per utilizzarla e accedi ai riferimenti API per la risorsa personalizzata VerticalPodAutoscaler e i tipi correlati.

Questa pagina è rivolta a operatori e sviluppatori che eseguono il provisioning e la configurazione delle risorse cloud, il deployment dei carichi di lavoro e la gestione dello scaling delle applicazioni. Per scoprire di più sui ruoli comuni, consulta Ruoli utente e attività comuni di GKE.

Prima di leggere questa pagina, assicurati di avere familiarità con le richieste e i limiti delle risorse in Kubernetes.

Per esigenze di scalabilità rapida in risposta a un utilizzo improvviso delle risorse, utilizza Horizontal Pod Autoscaler.

Per scoprire le best practice per lo 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 ti 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 pod, puoi configurare la scalabilità automatica pod verticale in modo che fornisca valori consigliati per le richieste e i limiti di CPU e memoria che puoi utilizzare per aggiornare manualmente i pod oppure puoi configurare la scalabilità automatica pod verticale in modo che aggiorni automaticamente i valori.

La scalabilità automatica pod verticale è abilitata per impostazione predefinita nei cluster Autopilot.

Modalità di scalabilità automatica verticale dei pod

Puoi configurare la modalità di applicazione delle modifiche alle risorse da parte della scalabilità automatica del pod verticale applicando diverse modalità di aggiornamento.

Modalità Auto (Recreate)

In modalità Recreate, la scalabilità automatica pod verticale espelle un pod se deve modificare le richieste di risorse del pod. L'espulsione è necessaria perché, a causa delle limitazioni di Kubernetes nelle versioni precedenti alla 1.33, l'unico modo per modificare le richieste di risorse di un pod in esecuzione è ricrearlo.

Per limitare il numero di ricreazioni 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 verticale dei pod invia una notifica allo strumento di scalabilità automatica del cluster prima dell'aggiornamento e fornisce le risorse necessarie per il workload ridimensionato prima di ricrearlo, in modo da ridurre al minimo il tempo di interruzione.

Modalità Initial

Con Initial abilitato, la scalabilità automatica pod verticale assegna le richieste di risorse solo al momento della creazione del pod e non le modifica in seguito.

Modalità InPlaceOrRecreate

La modalità InPlaceOrRecreate mira a ridurre l'interruzione del servizio tentando di aggiornare le risorse del pod senza ricrearlo. Sebbene questa modalità non garantisca interruzioni zero, può contribuire a ridurre le interruzioni pur beneficiando della scalabilità automatica verticale dei pod.

Per utilizzare la modalità InPlaceOrRecreate, imposta il campo spec.updatePolicy.updateMode su "InPlaceOrRecreate" nell'oggetto VerticalPodAutoscaler.

Se il gestore della scalabilità automatica pod verticale determina che un aggiornamento in loco non è possibile, torna al comportamento della modalità Auto, che espelle e ricrea il pod per applicare le modifiche.

La modalità InPlaceOrRecreate è disponibile con Kubernetes versione 1.34.0-gke.1709000 e successive.

Per ulteriori dettagli sul comportamento e sulle limitazioni esistenti della modalità InPlaceOrRecreate, consulta l'annuncio di Kubernetes relativo agli aggiornamenti in loco.

Vantaggi

La scalabilità automatica 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 dei pod sono inferiori a quelle richieste dai tuoi workload, l'applicazione può essere limitata o non funzionare a causa di errori di esaurimento della memoria. Se le dimensioni delle risorse sono troppo grandi, si verifica uno spreco 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.
  • Tempi di manutenzione ridotti perché lo scalatore automatico può regolare le richieste di CPU e memoria nel tempo senza alcun intervento da parte tua.

La scalabilità automatica verticale dei pod di 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 quando determina la destinazione del consiglio.
  • Notifica al gestore della scalabilità automatica dei cluster di modificare la capacità del cluster.
  • Utilizza i dati storici, fornendo le metriche raccolte prima di attivare Vertical Pod Autoscaler.
  • Esegue i pod di scalabilità automatica pod verticale come processi del piano di controllo, anziché come deployment sui nodi worker.

Limitazioni

  • Per utilizzare la scalabilità automatica verticale dei pod con la scalabilità automatica orizzontale dei pod, utilizza la scalabilità automatica multidimensionale dei pod. Puoi anche utilizzare la scalabilità automatica verticale dei pod con la scalabilità automatica orizzontale dei pod su metriche personalizzate ed esterne.
  • La scalabilità automatica pod verticale non è pronta per l'uso con i workload basati su JVM a causa della visibilità limitata sull'utilizzo effettivo della memoria del workload.
  • La scalabilità automatica pod verticale ha un'impostazione predefinita di due repliche minime per i deployment per sostituire i pod con valori di risorse rivisti. In GKE versione 1.22 e successive, puoi ignorare questa impostazione specificando un valore per minReplicas nel campo PodUpdatePolicy.
  • Se utilizzi la modalità di aggiornamento InPlaceOrRecreate della scalabilità automatica verticale dei pod e un aggiornamento in loco non è possibile (ad esempio, quando aumenti le dimensioni del pod oltre la capacità del nodo), la scalabilità automatica verticale dei pod espelle e ricrea il pod per applicare il suggerimento. L'espulsione e la ricreazione si verificano anche per i pod che hanno un resizePolicy impostato nella specifica per evitare ricreazioni.

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 meglio con carichi di lavoro omogenei a esecuzione prolungata.

Riferimento API

Questo è il riferimento API di 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 di VerticalPodAutoscaler.

VerticalPodAutoscalerSpec v1 autoscaling.k8s.io

Campi
targetRef

CrossVersionObjectReference

Riferimento al controller che gestisce il set di pod da controllare per il gestore della scalabilità automatica, ad esempio un deployment o un StatefulSet. Puoi puntare un VerticalPodAutoscaler a qualsiasi controller che abbia una risorsa secondaria Scale. In genere, VerticalPodAutoscaler recupera il set di pod da ScaleStatus del controller. Per alcuni controller noti, ad esempio DaemonSet, VerticalPodAutoscaler recupera il set 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 modalità di aggiustamento delle richieste di CPU e memoria per i singoli container. Il criterio delle risorse può essere utilizzato per impostare vincoli sui consigli 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 del suggerimento per questo oggetto VPA. Lascia vuoto per utilizzare il suggerimento predefinito fornito da GKE. In caso contrario, l'elenco può contenere esattamente una voce per un sistema di raccomandazione alternativo fornito dall'utente. 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 VerticalPodAutoscaler oggetti.

PodUpdatePolicy v1 autoscaling.k8s.io

Campi
updateMode

string

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 i seguenti:

  • "Off": vengono generati gli aggiornamenti consigliati, ma non vengono applicati automaticamente al pod.
  • "Initial": gli aggiornamenti consigliati vengono applicati solo al primo avvio di un pod. Gli aggiornamenti che vengono eseguiti mentre il pod è già in esecuzione non vengono applicati automaticamente.
  • "Recreate": gli aggiornamenti consigliati vengono applicati ricreando il pod. Il pod esistente viene terminato e viene creato un nuovo pod con la configurazione aggiornata.
  • "Auto": il valore predefinito che applica essenzialmente la modalità "Recreate".
  • "InPlaceOrRecreate": gli aggiornamenti consigliati vengono applicati senza ricreare il pod, se possibile.
minReplicas

int32

Il numero minimo di repliche che devono essere attive per tentare l'eliminazione del pod (in attesa di altri controlli come il budget di interruzione dei pod). Sono consentiti solo valori positivi. Il valore predefinito è 2. Supportato a partire da GKE 1.22.

PodResourcePolicy v1 autoscaling.k8s.io

Campi
containerPolicies

ContainerResourcePolicy array

Un array di criteri delle risorse per singoli container. Può essere presente al massimo una voce per ogni container denominato e, facoltativamente, una singola voce jolly con `containerName = '*'`, che gestisce tutti i container che non hanno policy individuali.

ContainerResourcePolicy v1 autoscaling.k8s.io

Campi
containerName

string

Il nome del contenitore a cui si applica la norma. Se non specificata, la norma funge da norma predefinita.

mode

ContainerScalingMode

Specifica se gli aggiornamenti consigliati vengono applicati al container all'avvio e se vengono applicati durante il ciclo di vita del container. I valori possibili sono "Off" e "Auto". Se non specifichi un valore, il valore predefinito è "Auto".

minAllowed

ResourceList

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

maxAllowed

ResourceList

Specifica la richiesta massima di CPU e memoria consentita per il container. Per impostazione predefinita, non viene applicato alcun limite massimo.

ControlledResources

[]ResourceName

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

VerticalPodAutoscalerRecommenderSelector v1 autoscaling.k8s.io

Campi
name

string

Nome del sistema di raccomandazione responsabile della generazione del consiglio 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 di VerticalPodAutoscaler.

RecommendedPodResources v1 autoscaling.k8s.io

Campi
containerRecommendation

RecommendedContainerResources array

Un array di consigli sulle risorse per i singoli container.

RecommendedContainerResources v1 autoscaling.k8s.io

Campi
containerName

string

Il nome del contenitore a cui si applica il consiglio.

target

ResourceList

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

lowerBound

ResourceList

La richiesta minima consigliata di CPU e memoria per il container. Non è garantito che questo importo sia sufficiente per la stabilità dell'applicazione. L'esecuzione con richieste di CPU e memoria più piccole probabilmente avrà un impatto significativo sulle prestazioni o sulla disponibilità.

upperBound

ResourceList

La richiesta di CPU e memoria massima consigliata per il container. È probabile che le richieste di CPU e memoria superiori a questi valori vengano sprecate.

uncappedTarget

ResourceList

Il suggerimento più recente per le risorse 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 il target violi il ContainerResourcePolicy, questo potrebbe essere diverso dal suggerimento vincolato. Questo campo non influisce sull'assegnazione effettiva delle risorse. Viene utilizzato solo come indicatore di stato.

VerticalPodAutoscalerCondition v1 autoscaling.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 Unknown.

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