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:
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
Modifique o
spec
do recurso personalizado do cluster para incluir o campoverticalPodAutoscaling
e especifique os modosenableUpdater
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 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:
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"]
Aplique o manifesto
VerticalPodAutoscaler
usando o seguinte comando:kubectl apply -f VPA_MANIFEST \ --kubeconfig KUBECONFIG
Substitua:
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
VerticalPodAutoscaler
que você criou.Modifique o recurso personalizado do cluster e remova toda a seção
verticalPodAutoscaling
dospec
.É 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-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
- Conheça os orçamentos de interrupção de pods.