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
kubectlao 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:
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: enableModifique o
specdo recurso personalizado do cluster para incluir o campoverticalPodAutoscalinge especifique os modosenableUpdatereenableMemorySaver: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 usageSe você modificou o arquivo de configuração do cluster, aplique as mudanças usando o seguinte comando:
bmctl update cluster -c CLUSTER_NAME --kubeconfig KUBECONFIGSubstitua:
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:
Defina um recurso
VerticalPodAutoscalerno mesmo namespace que a carga de trabalho de destino.Esse recurso personalizado especifica quais pods ele segmenta usando
targetRefe 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"]Aplique o manifesto
VerticalPodAutoscalerusando o seguinte comando:kubectl apply -f VPA_MANIFEST \ --kubeconfig KUBECONFIGSubstitua:
VPA_MANIFEST: o caminho do arquivo de manifestoVerticalPodAutoscaler.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 aRecreate.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 objetoVerticalPodAutoscaler.
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:
Exclua todos os recursos personalizados
VerticalPodAutoscalerque você criou.Modifique o recurso personalizado do cluster e remova toda a seção
verticalPodAutoscalingdospec.É possível editar o recurso personalizado do cluster diretamente ou modificar o arquivo de configuração do cluster e usar
bmctl update.Remova a anotação
preview.baremetal.cluster.gke.io/vertical-pod-autoscalerdo 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
InPlaceOrRecreatepara 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
- Conheça os orçamentos de interrupção de pods.