Configurar o escalonamento automático vertical de pods

O escalonamento automático vertical de pods automatiza a definição de solicitações e limites de recursos de CPU e memória para contêineres em pods do Kubernetes. O escalonamento automático vertical de pods analisa o uso de recursos histórico e atual para fornecer recomendações, que podem ser exibidas ou aplicadas automaticamente com a atualização dos pods. Esse recurso melhora a estabilidade e a eficiência de custos ao dimensionar corretamente as alocações de recursos.

Antes de começar

Antes de configurar o escalonamento automático vertical de pods, verifique se você atende aos seguintes pré-requisitos:

  • Você tem um cluster bare metal em execução.
  • Você tem acesso de kubectl ao cluster.
  • O Metrics Server está disponível no cluster. Os clusters bare metal incluem o Metrics Server por padrão.

Ativar o Escalonamento automático vertical de pods

Ative o escalonamento automático vertical de pods no cluster bare metal definindo uma anotação de prévia e configurando a especificação do cluster:

  1. Adicione ou atualize a anotação de prévia no recurso personalizado do cluster.

    Edite o recurso personalizado do cluster diretamente ou modifique o arquivo 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 você modificou o arquivo de configuração do cluster, aplique as mudanças usando o seguinte comando:

    bmctl update cluster -c CLUSTER_NAME --kubeconfig KUBECONFIG
    

    Substitua:

    • CLUSTER_NAME: o nome do cluster.

    • KUBECONFIG: o caminho do arquivo kubeconfig do cluster.

Criar um recurso personalizado VerticalPodAutoscaler

Depois de ativar o escalonamento automático vertical de pods no cluster, defina um recurso personalizado VerticalPodAutoscaler para segmentar cargas de trabalho específicas:

  1. Defina um recurso VerticalPodAutoscaler no mesmo namespace que a carga de trabalho de destino.

    Esse recurso personalizado especifica quais pods ele segmenta usando targetRef e todas as 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 usando o seguinte comando:

    kubectl apply -f VPA_MANIFEST \
        --kubeconfig KUBECONFIG
    

    Substitua:

    • VPA_MANIFEST: o caminho do arquivo de manifesto VerticalPodAutoscaler.

    • KUBECONFIG: o caminho do arquivo kubeconfig do cluster.

Entender os modos de escalonamento automático vertical de pods

O escalonamento automático vertical de pods opera em diferentes modos que controlam como ele aplica recomendações de recursos.

Modo de recomendação

No modo de recomendação, o escalonamento automático vertical de pods instala o componente de recomendação. Esse componente analisa o uso de recursos e publica valores recomendados para solicitações e limites de CPU e memória na seção de status dos recursos personalizados VerticalPodAutoscaler que você cria.

Para conferir recomendações de solicitações e limites 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 precisa conter uma seção Status semelhante a este 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 nesse modo. Use estas recomendações para atualizar manualmente as configurações do pod. Esse é o comportamento padrão se enableUpdater não estiver definido ou for false.

Modo de atualização automática

Quando você define enableUpdater enableUpdater como true, os controladores de ciclo de vida do bare metal implantam os componentes de atualização e controlador de admissão do escalonamento automático vertical de pods, além do recomendador. O updater monitora pods cujas solicitações de recursos atuais divergem significativamente das recomendações.

A política de atualização no recurso VerticalPodAutoscaler especifica como o updater aplica as recomendações. Por padrão, o modo de atualização é Auto, que determina que o atualizador atribua configurações de recursos atualizadas na criação do pod. A seguinte amostra de 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 é compatível com os cinco modos a seguir:

  • Auto: o atualizador desaloca o pod. O controlador de admissão intercepta a solicitação de criação do novo pod e a modifica para usar os valores de CPU e memória recomendados pelo Recommender. A atualização de recursos exige a recriação do pod, o que pode causar interrupções. Use orçamentos de interrupção de pod, que o atualizador respeita, para gerenciar o processo de despejo. Esse modo é equivalente a Recreate.

  • Recreate: o atualizador remove pods e atribui solicitações e limites de recursos recomendados quando o pod é recriado.

  • InPlaceOrRecreate(alfa): o atualizador tenta fazer atualizações no local da melhor maneira possível, mas pode voltar a criar o pod se as atualizações no local não forem possíveis. Para mais informações, consulte a documentação sobre redimensionamento de pods no local.

  • Initial: o atualizador atribui solicitações de recursos apenas na criação do pod e nunca as altera depois.

  • Off: o atualizador não muda 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 recuperar a definição de recurso personalizado verticalpodautoscalercheckpoints.autoscaling.k8s.io instalada no cluster da versão 1.33.0 ou mais recente.

O exemplo a seguir mostra como as recomendações de recursos podem aparecer na seção Status do contêiner hamster. A amostra também mostra um exemplo de um evento de remoção de pod, que ocorre quando o atualizador remove um pod antes de atribuir automaticamente a configuração de recurso 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 de economia de memória

O modo de economia de memória reduz o consumo de memória do componente de recomendação do escalonamento automático vertical de pods. Quando você define enableMemorySaver como true, o recomendador rastreia e calcula agregações apenas para pods que têm um recurso personalizado VerticalPodAutoscaler correspondente.

A desvantagem é que, ao criar um novo recurso personalizado VerticalPodAutoscaler para uma carga de trabalho atual, o recomendador leva algum tempo (até 24 horas) para coletar histórico suficiente e fornecer recomendações precisas. Esse modo é false por padrão para a maioria dos tipos de cluster, mas é true para clusters de borda.

Desativar o escalonamento automático vertical de pods

Desative o escalonamento automático vertical de pods removendo os recursos personalizados e a configuração do cluster:

  1. Exclua todos os recursos personalizados VerticalPodAutoscaler que você criou.

  2. Modifique o recurso personalizado do cluster e remova toda a seção verticalPodAutoscaling do spec.

    É possível editar o recurso personalizado do cluster diretamente ou modificar o arquivo 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 do cluster.

Limitações

Considere as seguintes limitações ao usar o escalonamento automático vertical de pods:

  • O escalonamento automático vertical de pods ainda não está pronto para uso com cargas de trabalho baseadas em JVM devido à visibilidade limitada do uso real da memória da carga de trabalho.
  • O atualizador exige um mínimo de duas réplicas de pod para que as implantações substituam os pods por valores de recursos revisados.
  • O atualizador não atualiza rapidamente os pods que estão em loop de falha devido a erros de memória insuficiente (OOM).
  • A política de atualização InPlaceOrRecreate para pods é um recurso Alfa no escalonamento automático vertical de pods. Ele tenta fazer atualizações no local com o melhor esforço possível, mas pode recorrer à recriação do pod se as atualizações no local não forem possíveis.

A seguir