Scalabilità automatica pod verticale

Questa pagina spiega come analizzare e ottimizzare l'allocazione delle risorse per migliorare l'efficienza del carico di lavoro in Google Kubernetes Engine (GKE), utilizzando il ridimensionamento automatico verticale dei Pod. Analizzando l'utilizzo delle risorse del tuo carico di lavoro nel tempo, puoi ottenere consigli di ottimizzazione e regolare automaticamente le richieste di CPU e memoria, nonché i limiti per i container all'interno dei Pod.

In questa pagina scoprirai come funziona l'auto-scalabilità verticale dei Pod, i suoi vantaggi e limiti, le best practice per il suo utilizzo e potrai accedere ai riferimenti API per la risorsa personalizzata VerticalPodAutoscaler e i tipi correlati.

Questa pagina è rivolta agli operatori e agli sviluppatori che forniscono e configurano risorse cloud, distribuiscono carichi di lavoro e gestiscono il ridimensionamento delle applicazioni. Per saperne di più sui ruoli comuni, consulta Ruoli e attività comuni degli utenti 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, utilizzare Horizontal Pod Autoscaler.

Per conoscere le best practice per il ridimensionamento automatico, consulta Best practice per l'esecuzione di applicazioni Kubernetes a costi ottimizzati su GKE.

Come funziona l'autoscaling verticale dei Pod

Il ridimensionamento automatico dei pod verticali consente di analizzare e impostare le risorse di CPU e memoria richieste dai pod. Anziché dover configurare richieste e limiti di CPU e 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.

Il ridimensionamento automatico dei pod verticali è abilitato per impostazione predefinita nei cluster Autopilot.

Modalità di ridimensionamento automatico del pod verticale

È possibile configurare il modo in cui il ridimensionamento automatico verticale dei Pod applica le modifiche alle risorse applicando diverse modalità di aggiornamento.

Modalità Auto (Recreate)

In modalità Recreate, il ridimensionamento automatico verticale del Pod espelle un Pod se è necessario modificarne le richieste di risorse. 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 la quantità di ricreazioni dei Pod, utilizza un budget di interruzione dei Pod. Per garantire che il cluster possa gestire le nuove dimensioni dei carichi di lavoro, utilizza Cluster Autoscaler e Node Auto-Provisioning.

Il ridimensionamento automatico del pod verticale avvisa il cluster autoscaler prima dell'aggiornamento e fornisce le risorse necessarie per il carico di lavoro ridimensionato prima di ricrearlo, per ridurre al minimo i tempi 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 ricreare il Pod. Sebbene questa modalità non garantisca l'assenza di interruzioni, può contribuire a ridurle, continuando a beneficiare del ridimensionamento automatico verticale dei Pod.

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

Se il ridimensionamento automatico verticale del Pod determina che non è possibile un aggiornamento sul posto, 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.2011000 e successive.

Per maggiori dettagli sul comportamento e sulle limitazioni esistenti della modalità InPlaceOrRecreate, consulta l'annuncio di Kubernetes per gli aggiornamenti sul posto.

Modalità Off

In modalità Off, il ridimensionamento automatico verticale del Pod non applica automaticamente alcuna modifica a un Pod. Puoi comunque visualizzare i valori consigliati per le richieste e i limiti di CPU e memoria in base all'utilizzo storico, ma questi consigli non vengono applicati automaticamente. Se necessario, puoi applicare manualmente i valori consigliati ai tuoi Pod.

Vantaggi

Il ridimensionamento automatico dei pod verticali offre i seguenti vantaggi:

  • Impostare le giuste richieste di risorse e i giusti limiti per i carichi di lavoro migliora la stabilità e l'efficienza dei costi. Se le dimensioni delle risorse del Pod sono inferiori a quelle richieste dai carichi di lavoro, l'applicazione potrebbe essere limitata oppure potrebbe non funzionare a causa di errori di memoria insufficiente. Se le dimensioni delle risorse sono troppo grandi, si verificano 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 vengono pianificati sui nodi che dispongono delle risorse appropriate.
  • Non è necessario eseguire lunghe attività di benchmarking per determinare i valori corretti per le richieste di CPU e memoria.
  • Tempi di manutenzione ridotti perché l'autoscaler può adattare le richieste di CPU e memoria nel tempo senza alcun intervento da parte tua.

Il ridimensionamento automatico verticale dei pod GKE offre i seguenti vantaggi rispetto al ridimensionatore automatico open source di Kubernetes:

  • Tiene conto delle dimensioni massime del nodo e delle quote delle risorse quando determina l'obiettivo della raccomandazione.
  • Notifica al ridimensionatore automatico del cluster di regolare la capacità del cluster.
  • Utilizza dati storici, fornendo metriche raccolte prima di abilitare Vertical Pod Autoscaler.
  • Esegue i pod Vertical Pod Autoscaler come processi del piano di controllo, anziché come distribuzioni sui nodi worker.

Limitazioni

  • Per utilizzare il ridimensionamento automatico verticale dei Pod con il ridimensionamento automatico orizzontale dei Pod, utilizza il ridimensionamento automatico multidimensionale dei Pod. Puoi anche utilizzare il ridimensionamento automatico verticale dei Pod con scalabilità automatica orizzontale dei pod su metriche personalizzate ed esterne.
  • Il ridimensionamento automatico dei pod verticali non è pronto per l'uso con carichi di lavoro basati su JVM a causa della visibilità limitata sull'utilizzo effettivo della memoria del carico di lavoro.
  • Il ridimensionamento automatico dei pod verticali ha un'impostazione predefinita di due repliche minime affinché le distribuzioni sostituiscano i pod con valori di risorse rivisti. Nella versione 1.22 e successive di GKE, puoi ignorare questa impostazione specificando un valore per minReplicas nel campo PodUpdatePolicy.
  • Se utilizzi la modalità di aggiornamento InPlaceOrRecreate del ridimensionamento automatico del Pod verticale e non è possibile un aggiornamento sul posto (ad esempio, quando si aumenta la scalabilità del Pod oltre la capacità del nodo), il ridimensionamento automatico del Pod verticale espelle e ricrea il Pod per applicare la raccomandazione. L'espulsione e la ricreazione avvengono anche per i Pod che hanno impostato resizePolicy nelle loro specifiche per evitare ricreazioni. Questo comportamento si verifica per le richieste di ridimensionamento di Autopilot, anche quando si applicano vincoli di risorse minime e rapporto CPU:memoria.
  • Il ridimensionamento automatico dei Pod verticali richiede un oggetto del carico di lavoro che gestisca i Pod, ad esempio Deployment, StatefulSet, ReplicaSet o ReplicationControllers. Non è possibile utilizzare il ridimensionamento automatico verticale dei Pod con Pod autonomi perché è necessario un controller del carico di lavoro per gestire il processo di ricreazione del Pod.

Best practice

  • Limita il numero di VerticalPodAutoscaler oggetti. Per evitare interruzioni nell'aggiornamento del cluster, consigliamo di mantenere il numero di oggetti VerticalPodAutoscaler per cluster al di sotto di 1.000.
  • Il ridimensionamento automatico dei pod verticali funziona meglio con carichi di lavoro omogenei di lunga durata.
    • A lunga esecuzione: carichi di lavoro che vengono eseguiti per almeno 24 ore. L'autoscaling dei Vertical Pod richiede una quantità significativa di dati storici per generare raccomandazioni ad alta affidabilità. In modalità Auto o Recreate, gli aggiornamenti solitamente vengono eseguiti dopo che un Pod ha almeno 24 ore, il che aiuta a prevenire frequenti riavvii e abbandoni del Pod.
    • Omogeneo: i pod indirizzati a un singolo oggetto VerticalPodAutoscaler (ad esempio tutte le repliche in una deployment) dovrebbero presentare modelli di consumo delle risorse simili. Il gestore di scalabilità automatica pod verticale genera consigli aggregando i dati di utilizzo in tutti i pod di destinazione. Se le repliche hanno un utilizzo eterogeneo, ad esempio alcuni Pod sono inattivi e altri sono molto carichi, il ridimensionamento automatico dei Pod verticali potrebbe fornire una raccomandazione che prevede un provisioning eccessivo per i Pod inattivi o un provisioning insufficiente per quelli occupati.
  • Utilizza scalabilità automatica orizzontale dei pod per carichi di lavoro con picchi improvvisi di domanda. Il ridimensionamento automatico dei pod verticali è progettato per un dimensionamento corretto in stato stazionario e non è una soluzione per picchi di risorse improvvisi e di breve durata. Per carichi di lavoro con rapide fluttuazioni nel traffico o nella richiesta di CPU o memoria, utilizzare invece il Pod autoscaler orizzontale.
  • Sfrutta la protezione OOM. Sebbene l'autoscaler verticale dei Pod sia reattivo, include una protezione automatizzata contro gli eventi Out-of-Memory (OOM). Se un Pod è OOMKilled, il ridimensionatore automatico verticale del Pod osserva immediatamente l'evento e aumenta la quantità di memoria consigliata di circa il 20% (o 100 MB, a seconda di quale sia maggiore) per migliorare la stabilità quando il Pod viene ricreato.

Riferimento API

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

status

VerticalPodAutoscalerStatus

Lo stato più recentemente osservato del VerticalPodAutoscaler.

VerticalPodAutoscalerSpec v1 autoscaling.k8s.io

Campi
targetRef

CrossVersionObjectReference

Riferimento al controller che gestisce il set di Pod affinché l'autoscaler possa controllare, ad esempio, una deployment o uno StatefulSet. Puoi puntare un VerticalPodAutoscaler a qualsiasi controller che abbia una sotto-risorsa Scale. In genere, VerticalPodAutoscaler recupera il set di Pod dallo ScaleStatus del controller. Per alcuni controller noti, ad esempio DaemonSet, VerticalPodAutoscaler recupera il set 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 contenitori. La politica delle risorse può essere utilizzata per impostare vincoli sulle raccomandazioni per singoli contenitori. Se non specificato, l'autoscaler calcola le risorse consigliate per tutti i container nel Pod, senza vincoli aggiuntivi.

recommenders

VerticalPodAutoscalerRecommenderSelector array

Referente responsabile della generazione di raccomandazioni per questo oggetto VPA. Lasciare vuoto per utilizzare il sistema di raccomandazione predefinito fornito da GKE. In caso contrario, l'elenco può contenere una sola voce per un consigliere alternativo fornito dall'utente. Supportato 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 gli aggiornamenti consigliati vengono applicati durante la vita di un Pod. I valori possibili sono i seguenti:

  • "Off": gli aggiornamenti consigliati vengono generati, ma non vengono applicati automaticamente al Pod.
  • "Initial": gli aggiornamenti consigliati vengono applicati solo al primo avvio di un Pod. Gli aggiornamenti che si verificano 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 sostanzialmente impone 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 policy. Se non specificato, il criterio funge da criterio predefinito.

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 limite minimo.

maxAllowed

ResourceList

Specifica la richiesta massima di CPU e di 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 di [ResourceCPU, ResourceMemory].

VerticalPodAutoscalerRecommenderSelector v1 autoscaling.k8s.io

Campi
name

string

Nome del referente responsabile della generazione della raccomandazione 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 autoscaling.k8s.io

Campi
containerRecommendation

RecommendedContainerResources array

Una serie di raccomandazioni sulle risorse per singoli contenitori.

RecommendedContainerResources v1 autoscaling.k8s.io

Campi
containerName

string

Nome del contenitore a cui si applica la raccomandazione.

target

ResourceList

Richiesta di CPU e richiesta di memoria consigliate per il contenitore.

lowerBound

ResourceList

Richiesta minima di CPU e richiesta di memoria consigliate per il contenitore. Non è garantito che tale importo sia sufficiente a garantire la stabilità dell'applicazione. L'esecuzione con richieste di CPU e memoria più ridotte potrebbe avere un impatto significativo sulle prestazioni o sulla disponibilità.

upperBound

ResourceList

La richiesta massima di CPU e di memoria consigliata per il contenitore. Le richieste di CPU e memoria superiori a questi valori rischiano di andare sprecate.

uncappedTarget

ResourceList

La raccomandazione di risorse più recente calcolata dall'autoscaler, in base all'utilizzo effettivo delle risorse, senza tenere conto di ContainerResourcePolicy. Se l'utilizzo effettivo delle risorse fa sì che la destinazione violi la ContainerResourcePolicy, questa potrebbe essere diversa dalla raccomandazione limitata. Questo campo non influisce sull'effettiva assegnazione delle risorse. Viene utilizzato solo come indicazione 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 Vero, Falso 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 dall'uomo che fornisce dettagli sull'ultima transizione da uno stato all'altro.

Passaggi successivi