Configura la scalabilità automatica del pod verticale

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:

  1. 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
    
  2. Modifica spec della risorsa personalizzata Cluster per includere il campo verticalPodAutoscaling e specifica le modalità enableUpdater e enableMemorySaver:

    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
    
  3. 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:

  1. 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"]
    
  2. Applica il manifest VerticalPodAutoscaler utilizzando il seguente comando:

    kubectl apply -f VPA_MANIFEST \
        --kubeconfig KUBECONFIG
    

    Sostituisci quanto segue:

    • VPA_MANIFEST: il percorso del file manifest VerticalPodAutoscaler.

    • 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 a Recreate.

  • 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'oggetto VerticalPodAutoscaler.

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:

  1. Elimina tutte le risorse personalizzate VerticalPodAutoscaler che hai creato.

  2. Modifica la risorsa personalizzata del cluster e rimuovi l'intera sezione verticalPodAutoscaling da spec.

    Puoi modificare direttamente la risorsa personalizzata Cluster o modificare il file di configurazione del cluster e utilizzare bmctl update.

  3. 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