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
kubectlao 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 do 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: 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 modificou o ficheiro de configuração do cluster, aplique as alterações com o seguinte comando:
bmctl update cluster -c CLUSTER_NAME --kubeconfig KUBECONFIGSubstitua 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
VerticalPodAutoscalerno mesmo espaço de nomes que a carga de trabalho de destino.Este recurso personalizado especifica os pods que segmenta através de
targetRefe 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
VerticalPodAutoscaleratravés do seguinte comando:kubectl apply -f VPA_MANIFEST \ --kubeconfig KUBECONFIGSubstitua 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 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 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 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:
Elimine todos os recursos personalizados
VerticalPodAutoscalerque criou.Modifique o recurso personalizado Cluster e remova toda a secção
verticalPodAutoscalingdospec.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-autoscalerdo 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
InPlaceOrRecreatepara 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.