Configure a escala automática vertical de pods

A escala automática vertical de pods automatiza a definição de pedidos de recursos de CPU e memória, bem como os limites para contentores em pods do Kubernetes. A escala automática vertical de pods analisa a utilização de recursos histórica e atual para fornecer recomendações, que pode apresentar ou aplicar automaticamente atualizando os pods. Esta funcionalidade melhora a estabilidade e a rentabilidade ao ajustar as atribuições de recursos.

Antes de começar

Antes de configurar a escala automática vertical de pods, certifique-se de que cumpre os seguintes pré-requisitos:

  • Tem um cluster bare metal em execução.
  • Tem acesso de kubectl ao cluster.
  • O servidor de métricas está disponível no cluster. Os clusters Bare Metal incluem o servidor de métricas por predefinição.

Ative a escala automática vertical de pods

Ative a escala automática vertical de pods no cluster bare metal definindo uma anotação de pré-visualização e configurando a especificação do cluster:

  1. Adicione ou atualize a anotação de pré-visualização no recurso personalizado Cluster.

    Edite o recurso personalizado do cluster diretamente ou modifique o ficheiro de configuração do cluster e use bmctl update.

    metadata:
      annotations:
        preview.baremetal.cluster.gke.io/vertical-pod-autoscaler: enable
    
  2. Modifique o spec do recurso personalizado do cluster para incluir o campo verticalPodAutoscaling e especifique os modos 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 modificou o ficheiro de configuração do cluster, aplique as alterações com o seguinte comando:

    bmctl update cluster -c CLUSTER_NAME --kubeconfig KUBECONFIG
    

    Substitua o seguinte:

    • CLUSTER_NAME: o nome do cluster.

    • KUBECONFIG: o caminho do ficheiro kubeconfig do cluster.

Crie um VerticalPodAutoscaler recurso personalizado

Depois de ativar a escala automática vertical de pods no cluster, defina um VerticalPodAutoscaler recurso personalizado para segmentar cargas de trabalho específicas:

  1. Defina um recurso VerticalPodAutoscaler no mesmo espaço de nomes que a carga de trabalho de destino.

    Este recurso personalizado especifica os pods que segmenta através de targetRef e de quaisquer políticas de recursos.

    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. Aplique o manifesto VerticalPodAutoscaler através do seguinte comando:

    kubectl apply -f VPA_MANIFEST \
        --kubeconfig KUBECONFIG
    

    Substitua o seguinte:

    • VPA_MANIFEST: o caminho do ficheiro de manifesto VerticalPodAutoscaler.

    • KUBECONFIG: o caminho do ficheiro kubeconfig do cluster.

Compreenda os modos de escala automática vertical de pods

A escala automática vertical de pods funciona em diferentes modos que controlam a forma como aplica as recomendações de recursos.

Modo de recomendação

No modo de recomendação, a escala automática vertical de pods instala o componente de recomendações. Este componente analisa a utilização de recursos e publica valores recomendados para pedidos e limites de CPU e memória na secção de estado dos VerticalPodAutoscalerrecursos personalizados que criar.

Para ver as recomendações de limites e pedidos de recursos, use o seguinte 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.

A resposta deve conter uma secção Status semelhante ao seguinte exemplo:

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

Os pods não são atualizados automaticamente neste modo. Use estas recomendações para atualizar manualmente as configurações do pod. Este é o comportamento predefinido se enableUpdater não estiver definido ou for false.

Modo de atualização automática

Quando define enableUpdater enableUpdater como true, os controladores do ciclo de vida de hardware sem sistema operativo implementam os componentes do atualizador de dimensionamento automático de pods vertical e do controlador de admissão, além do recomendador. O atualizador monitoriza os pods cujos pedidos de recursos atuais se desviam significativamente das recomendações.

A política de atualização no recurso VerticalPodAutoscaler especifica como o atualizador aplica as recomendações. Por predefinição, o modo de atualização é Auto, o que determina que o atualizador atribui definições de recursos atualizadas na criação do pod. O seguinte exemplo VerticalPodAutoscaler mostra como definir o modo de atualização como 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"
    ...

O atualizador suporta os seguintes cinco modos:

  • Auto: o atualizador remove o pod. O controlador de admissão interceta o pedido de criação do novo pod e modifica-o para usar os valores de CPU e memória recomendados fornecidos pelo motor de recomendações. A atualização de recursos requer a recriação do pod, o que pode causar interrupções. Use Pod Disruption Budgets, que o atualizador respeita, para gerir o processo de despejo. Este modo é equivalente a Recreate.

  • Recreate: o atualizador remove os pods e atribui pedidos e limites de recursos recomendados quando o pod é recriado.

  • InPlaceOrRecreate(alfa): o atualizador tenta fazer atualizações no local com o melhor esforço, mas pode recorrer à recriação do pod se as atualizações no local não forem possíveis. Para mais informações, consulte a documentação sobre a alteração do tamanho do pod no local.

  • Initial: o atualizador só atribui pedidos de recursos na criação do pod e nunca os altera posteriormente.

  • Off: O atualizador não altera automaticamente os requisitos de recursos dos pods. As recomendações são calculadas e podem ser inspecionadas no objeto VerticalPodAutoscaler.

Para mais informações sobre o recurso personalizado VerticalPodAutoscaler, use kubectl para obter a definição do recurso personalizado verticalpodautoscalercheckpoints.autoscaling.k8s.io que está instalada no cluster da versão 1.33.0 ou posterior.

O exemplo seguinte mostra como as recomendações de recursos podem ser apresentadas na secção Statushamster para o contentor hamster. O exemplo também mostra um exemplo de um evento de despejo de Pod, que ocorre quando o atualizador despeja um Pod antes de atribuir automaticamente a configuração de recursos recomendada ao Pod recriado:

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.

Modo Poupança de memória

O modo Poupança de memória reduz a quantidade de memória do componente de recomendação da escala automática vertical de pods. Quando define enableMemorySaver como true, o recomendador apenas acompanha e calcula agregações para agrupamentos que têm um recurso personalizado VerticalPodAutoscaler correspondente.

A desvantagem é que, quando cria um novo recurso personalizado para uma carga de trabalho existente, o recomendador demora algum tempo (até 24 horas) a recolher histórico suficiente para fornecer recomendações precisas.VerticalPodAutoscaler Este modo está false por predefinição para a maioria dos tipos de clusters, mas é true por predefinição para clusters de limite.

Desative a escala automática vertical de pods

Desative a escala automática vertical de pods removendo os respetivos recursos personalizados e a configuração do cluster:

  1. Elimine todos os recursos personalizados VerticalPodAutoscaler que criou.

  2. Modifique o recurso personalizado Cluster e remova toda a secção verticalPodAutoscaling do spec.

    Pode editar o recurso personalizado do cluster diretamente ou modificar o ficheiro de configuração do cluster e usar bmctl update.

  3. Remova a anotação preview.baremetal.cluster.gke.io/vertical-pod-autoscaler do recurso personalizado Cluster.

Limitações

Considere as seguintes limitações quando usar a escala automática vertical de pods:

  • A escala automática vertical de pods não está pronta para utilização com cargas de trabalho baseadas na JVM devido à visibilidade limitada da utilização real de memória da carga de trabalho.
  • O atualizador requer um mínimo de duas réplicas de Pod para que as implementações substituam os Pods por valores de recursos revistos.
  • O atualizador não atualiza rapidamente os pods que estão em ciclo de falhas devido a erros de falta de memória.
  • A política de atualização InPlaceOrRecreate para pods é uma funcionalidade alfa na escalabilidade automática de pods vertical. Tenta fazer atualizações no local da melhor forma possível, mas pode recorrer à recriação do pod se as atualizações no local não forem possíveis.

O que se segue?