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
minReplicasnel campo PodUpdatePolicy. - Se utilizzi la modalità di aggiornamento
InPlaceOrRecreatedel 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 impostatoresizePolicynelle 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
VerticalPodAutoscaleroggetti. Per evitare interruzioni nell'aggiornamento del cluster, consigliamo di mantenere il numero di oggettiVerticalPodAutoscalerper 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à
AutooRecreate, 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.
- 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à
- 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 | |
|---|---|
|
Gruppo, versione e tipo di API. |
metadata |
Metadati degli oggetti standard. |
spec |
Il comportamento desiderato del |
status |
Lo stato più recentemente osservato del |
VerticalPodAutoscalerSpec v1 autoscaling.k8s.io
| Campi | |
|---|---|
targetRef |
Riferimento al controller che gestisce il set di Pod affinché l'autoscaler possa controllare, ad esempio, una deployment o uno 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 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 |
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 | |
|---|---|
|
Gruppo, versione e tipo di API. |
metadata |
Metadati degli oggetti standard. |
items |
Un elenco di |
PodUpdatePolicy v1 autoscaling.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 i seguenti:
|
minReplicas |
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 è |
PodResourcePolicy v1 autoscaling.k8s.io
| Campi | |
|---|---|
containerPolicies |
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 |
Il nome del contenitore a cui si applica la policy. Se non specificato, il criterio funge da criterio predefinito. |
mode |
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 |
Specifica la richiesta minima di CPU e memoria consentita per il container. Per impostazione predefinita, non viene applicato alcun limite minimo. |
maxAllowed |
Specifica la richiesta massima di CPU e di memoria consentita per il container. Per impostazione predefinita, non viene applicato alcun limite massimo. |
ControlledResources |
Specifica il tipo di consigli che verranno calcolati (e
possibilmente applicati) da |
VerticalPodAutoscalerRecommenderSelector v1 autoscaling.k8s.io
| Campi | |
|---|---|
name |
Nome del referente responsabile della generazione della raccomandazione per questo oggetto. |
VerticalPodAutoscalerStatus v1 autoscaling.k8s.io
| Campi | |
|---|---|
recommendation |
Le richieste di CPU e memoria consigliate più di recente. |
conditions |
Descrive lo stato attuale del |
RecommendedPodResources v1 autoscaling.k8s.io
| Campi | |
|---|---|
containerRecommendation |
Una serie di raccomandazioni sulle risorse per singoli contenitori. |
RecommendedContainerResources v1 autoscaling.k8s.io
| Campi | |
|---|---|
containerName |
Nome del contenitore a cui si applica la raccomandazione. |
target |
Richiesta di CPU e richiesta di memoria consigliate per il contenitore. |
lowerBound |
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 |
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 |
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 |
Il tipo di condizione descritta. I valori possibili sono "RecommendationProvided", "LowConfidence", "NoPodsMatched" e "FetchingHistory". |
status |
Lo stato della condizione. I valori possibili sono Vero, Falso e Sconosciuto. |
lastTransitionTime |
L'ultima volta che la condizione è passata da uno stato all'altro. |
reason |
Il motivo dell'ultima transizione da uno stato all'altro. |
message |
Una stringa leggibile dall'uomo che fornisce dettagli sull'ultima transizione da uno stato all'altro. |
Passaggi successivi
- Scopri come configurare il ridimensionamento automatico dei pod verticali.
- Scopri di più sul ridimensionamento automatico dei pod orizzontali.
- Scopri di più sul gestore della scalabilità automatica dei cluster.
- Scopri come configurare l'autoscaling dei pod orizzontali.
- Scopri come ottimizzare il ridimensionamento automatico dei Pod in base alle metriche.