La scalabilità automatica pod verticale automatizza l'impostazione delle richieste di risorse di CPU e memoria e dei limiti per i container all'interno dei pod Kubernetes. La scalabilità automatica pod verticale analizza l'utilizzo delle risorse storico e attuale per fornire consigli, che può visualizzare o applicare automaticamente aggiornando i pod. Questa funzionalità migliora la stabilità e l'efficienza in termini di costi mediante il dimensionamento corretto delle allocazioni delle risorse.
Prima di iniziare
Prima di configurare Scalabilità automatica pod verticale, assicurati di soddisfare i seguenti prerequisiti:
- Hai un cluster bare metal in esecuzione.
- Hai accesso
kubectl
al cluster. - Metrics Server è disponibile nel cluster. I cluster bare metal includono Metrics Server per impostazione predefinita.
Abilita scalabilità automatica pod verticale
Abilita la scalabilità automatica del pod verticale sul cluster bare metal impostando un'annotazione di anteprima e configurando la specifica del cluster:
Aggiungi o aggiorna l'annotazione di anteprima nella risorsa personalizzata Cluster.
Modifica direttamente la risorsa personalizzata del cluster o il file di configurazione del cluster e utilizza
bmctl update
.metadata: annotations: preview.baremetal.cluster.gke.io/vertical-pod-autoscaler: enable
Modifica
spec
della risorsa personalizzata Cluster per includere il campoverticalPodAutoscaling
e specifica le modalitàenableUpdater
eenableMemorySaver
:apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: cluster1 namespace: cluster-cluster1 annotations: preview.baremetal.cluster.gke.io/vertical-pod-autoscaler: enable spec: # ... other cluster spec fields verticalPodAutoscaling: enableUpdater: true # Set to true for automated updates enableMemorySaver: true # Set to true to reduce recommender memory usage
Se hai modificato il file di configurazione del cluster, applica le modifiche utilizzando il seguente comando:
bmctl update cluster -c CLUSTER_NAME --kubeconfig KUBECONFIG
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del tuo cluster.KUBECONFIG
: il percorso del file kubeconfig del cluster.
Crea una risorsa personalizzata VerticalPodAutoscaler
Dopo aver abilitato la scalabilità automatica del pod verticale sul cluster, definisci una risorsa personalizzata VerticalPodAutoscaler
per scegliere come target workload specifici:
Definisci una risorsa
VerticalPodAutoscaler
nello stesso spazio dei nomi del workload di destinazione.Questa risorsa personalizzata specifica i pod a cui si rivolge utilizzando
targetRef
e qualsiasi criterio delle risorse.apiVersion: "autoscaling.k8s.io/v1" kind: VerticalPodAutoscaler metadata: name: hamster-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: hamster resourcePolicy: containerPolicies: - containerName: '*' minAllowed: cpu: 100m memory: 50Mi maxAllowed: cpu: 1 memory: 500Mi controlledResources: ["cpu", "memory"]
Applica il manifest
VerticalPodAutoscaler
utilizzando il seguente comando:kubectl apply -f VPA_MANIFEST \ --kubeconfig KUBECONFIG
Sostituisci quanto segue:
VPA_MANIFEST
: il percorso del file manifestVerticalPodAutoscaler
.KUBECONFIG
: il percorso del file kubeconfig del cluster.
Informazioni sulle modalità di scalabilità automatica del pod verticale
La scalabilità automatica verticale dei pod funziona in diverse modalità che controllano il modo in cui applica i suggerimenti per le risorse.
Modalità di suggerimento
In modalità di suggerimento, la scalabilità automatica verticale dei pod installa il componente di suggerimento. Questo componente analizza l'utilizzo delle risorse e pubblica i valori consigliati per le richieste e i limiti di CPU e memoria nella sezione di stato delle risorse personalizzate VerticalPodAutoscaler
che crei.
Per visualizzare i suggerimenti relativi a richieste e limiti delle risorse, utilizza il seguente comando:
kubectl describe vpa VPA_NAME \
--kubeconfig KUBECONFIG \
-n CLUSTER_NAMESPACE
Replace the following:
* `VPA_NAME`: the name of the `VerticalPodAutoscaler`
that's targeting the workloads for which you are considering resource
adjustments.
* `KUBECONFIG`: the path of the cluster kubeconfig
file.
* `CLUSTER_NAMESPACE`: the name of the cluster that's
running vertical Pod autoscaling.
La risposta deve contenere una sezione Status
simile al seguente
esempio:
Status:
Conditions:
Last Transition Time: 2025-08-04T23:53:32Z
Status: True
Type: RecommendationProvided
Recommendation:
Container Recommendations:
Container Name: hamster
Lower Bound:
Cpu: 100m
Memory: 262144k
Target:
Cpu: 587m
Memory: 262144k
Uncapped Target:
Cpu: 587m
Memory: 262144k
Upper Bound:
Cpu: 1
Memory: 500Mi
I pod non vengono aggiornati automaticamente in questa modalità. Utilizza questi suggerimenti per
aggiornare manualmente le configurazioni dei pod. Questo è il comportamento predefinito se
enableUpdater
non è impostato o è false
.
Modalità di aggiornamento automatica
Quando imposti
enableUpdater
enableUpdater
su true
, i controller del ciclo di vita bare metal distribuiscono i componenti di aggiornamento e controller di ammissione del gestore della scalabilità automatica pod verticale, oltre al sistema di suggerimenti. L'aggiornamento
monitora i pod le cui richieste di risorse attuali si discostano in modo significativo
dai consigli.
Il criterio di aggiornamento nella risorsa VerticalPodAutoscaler
specifica in che modo
lo strumento di aggiornamento applica i consigli. Per impostazione predefinita, la modalità di aggiornamento è Auto
,
che stabilisce che l'updater assegna le impostazioni delle risorse aggiornate durante la creazione del pod. Il seguente esempio di VerticalPodAutoscaler
mostra come impostare la modalità di aggiornamento su Initial
:
apiVersion: "autoscaling.k8s.io/v1"
kind: VerticalPodAutoscaler
metadata:
name: hamster-vpa
spec:
targetRef:
apiVersion: "apps/v1"
kind: Deployment
name: hamster
resourcePolicy:
updatePolicy:
updateMode: "Initial"
...
L'utilità di aggiornamento supporta le seguenti cinque modalità:
Auto
: l'updater espelle il pod. Il controller di ammissione intercetta la richiesta di creazione del nuovo pod e la modifica in modo che utilizzi i valori consigliati di CPU e memoria forniti dal sistema di suggerimenti. L'aggiornamento delle risorse richiede la ricreazione del pod, che può causare interruzioni. Utilizza i Pod Disruption Budgets, che l'utilità di aggiornamento rispetta, per gestire la procedura di eliminazione. Questa modalità equivalente aRecreate
.Recreate
: lo strumento di aggiornamento espelle i pod e assegna i limiti e le richieste di risorse consigliati quando il pod viene ricreato.InPlaceOrRecreate
(alpha): lo strumento di aggiornamento tenta di eseguire aggiornamenti in loco nel miglior modo possibile, ma potrebbe ripristinare il pod se gli aggiornamenti in loco non sono possibili. Per saperne di più, consulta la documentazione relativa al ridimensionamento in loco dei pod.Initial
: lo strumento di aggiornamento assegna le richieste di risorse solo al momento della creazione del pod e non le modifica mai in un secondo momento.Off
: lo strumento di aggiornamento non modifica automaticamente i requisiti di risorse dei pod. I consigli vengono calcolati e possono essere esaminati nell'oggettoVerticalPodAutoscaler
.
Per saperne di più sulla risorsa personalizzata VerticalPodAutoscaler
, utilizza
kubectl
per recuperare la definizione della risorsa personalizzata verticalpodautoscalercheckpoints.autoscaling.k8s.io
installata sul cluster versione 1.33.0 o successive.
Il seguente esempio mostra come potrebbero apparire i consigli sulle risorse nella sezione
Status
per il contenitore hamster
. Il campione mostra anche un esempio
di un evento di rimozione di un pod, che si verifica quando l'updater rimuove un pod prima di
assegnare automaticamente la configurazione delle risorse consigliata al pod ricreato:
Spec:
Resource Policy:
Container Policies:
Container Name: *
Controlled Resources:
cpu
memory
Max Allowed:
Cpu: 1
Memory: 500Mi
Min Allowed:
Cpu: 100m
Memory: 50Mi
Target Ref:
API Version: apps/v1
Kind: Deployment
Name: hamster
Update Policy:
Update Mode: Auto
Status:
Conditions:
Last Transition Time: 2025-08-04T23:53:32Z
Status: True
Type: RecommendationProvided
Recommendation:
Container Recommendations:
Container Name: hamster
Lower Bound:
Cpu: 100m
Memory: 262144k
Target:
Cpu: 587m
Memory: 262144k
Uncapped Target:
Cpu: 587m
Memory: 262144k
Upper Bound:
Cpu: 1
Memory: 500Mi
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal EvictedPod 49s vpa-updater VPA Updater evicted Pod hamster-7cb59fb657-lkrk4 to apply resource recommendation.
Modalità Risparmio memoria
La modalità Risparmio memoria riduce l'impronta di memoria del componente di suggerimento
della scalabilità automatica verticale dei pod. Quando imposti
enableMemorySaver
su true
, il sistema di suggerimenti monitora e calcola solo le aggregazioni per i pod che
hanno una risorsa personalizzata VerticalPodAutoscaler
corrispondente.
Il compromesso è che quando crei una nuova risorsa personalizzata VerticalPodAutoscaler
per un carico di lavoro esistente, il motore per suggerimenti impiega un po' di tempo (fino a 24 ore) per raccogliere una cronologia sufficiente a fornire suggerimenti accurati. Questa
modalità è false
per impostazione predefinita per la maggior parte dei tipi di cluster, ma è impostata su true
per
i cluster edge.
Disabilita scalabilità automatica pod verticale
Disabilita la scalabilità automatica del pod verticale rimuovendo le relative risorse personalizzate e la relativa configurazione dal cluster:
Elimina tutte le risorse personalizzate
VerticalPodAutoscaler
che hai creato.Modifica la risorsa personalizzata del cluster e rimuovi l'intera sezione
verticalPodAutoscaling
daspec
.Puoi modificare direttamente la risorsa personalizzata Cluster o modificare il file di configurazione del cluster e utilizzare
bmctl update
.Rimuovi l'annotazione
preview.baremetal.cluster.gke.io/vertical-pod-autoscaler
dalla risorsa personalizzata del cluster.
Limitazioni
Tieni presenti le seguenti limitazioni quando utilizzi Scalabilità automatica pod verticale:
- 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.
- L'aggiornamento richiede un minimo di due repliche di pod per i deployment per sostituire i pod con valori di risorse rivisti.
- L'updater non aggiorna rapidamente i pod che vanno in crash a ciclo continuo a causa di errori di memoria insufficiente (OOM).
- I criteri di aggiornamento
InPlaceOrRecreate
per i pod sono una funzionalità alpha all'interno della scalabilità automatica verticale dei pod. Tenta di eseguire aggiornamenti in loco con il massimo impegno, ma potrebbe tornare alla ricreazione del pod se gli aggiornamenti in loco non sono possibili.
Passaggi successivi
- Esplora i budget di interruzione dei pod.