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:
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
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 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:
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"]
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 manifestoVerticalPodAutoscaler
.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 VerticalPodAutoscaler
recursos 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 aRecreate
.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 objetoVerticalPodAutoscaler
.
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 Status
hamster
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:
Elimine todos os recursos personalizados
VerticalPodAutoscaler
que criou.Modifique o recurso personalizado Cluster e remova toda a secção
verticalPodAutoscaling
dospec
.Pode editar o recurso personalizado do cluster diretamente ou modificar o ficheiro de configuração do cluster e usar
bmctl update
.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?
- Explore os orçamentos de interrupção de pods.