Escalonamento automático do pod vertical

Nesta página, você encontra uma visão geral do escalonamento automático do pod vertical. Além disso, você vê como é possível usá-lo para ajustar solicitações e limites de CPU e de memória (páginas em inglês) dos contêineres. Nesta página, você também encontra o material de referência do recurso personalizado VerticalPodAutoscaler e tipos relacionados.

Visão geral

Com o escalonamento automático do pod vertical (VPA, na sigla em inglês), você não precisa pensar em quais valores especificar nas solicitações de memória e de CPU de um contêiner. O escalonador automático recomenda valores para essas solicitações e limites ou atualiza automaticamente os valores.

O escalonamento automático vertical de pods fornece estes benefícios:

  • Os nós de cluster são usados de forma eficiente, porque os pods usam exatamente o que precisam.

  • Os pods são programados em nós que têm os recursos apropriados disponíveis.

  • Você não precisa executar tarefas de benchmark demoradas para determinar os valores corretos das solicitações de CPU e memória.

  • A duração da manutenção é reduzida porque o escalonador automático ajusta as solicitações de CPU e memória ao longo do tempo sem qualquer ação da sua parte.

Limitações para o escalonamento automático de pods verticais:

  • O escalonamento automático de pods verticais oferece suporte a um máximo de 500 objetos VPA por cluster.

  • O escalonamento automático do pod vertical é compatível com clusters regionais a partir da versão 1.12.6.

  • Não use o escalonamento automático do pod vertical com o horizontal (HPA, na sigla em inglês) [em inglês] na CPU ou na memória. No entanto, é possível usar o VPA com o HPA nas métricas personalizadas e externas.

  • O escalonador automático do pod vertical ainda não é compatível com cargas de trabalho baseadas em JVM porque a visibilidade sobre o uso da memória real delas é limitada.

  • O escalonador automático do pod vertical não aplica recomendações automaticamente em arquivos secundários injetados. Se você criar um objeto VerticalPodAutoscaler para um pod com arquivos secundários injetados com updateMode diferente de "Off", esses arquivos precisarão ser desativados usando a política de recurso do contêiner. Consulte ContainerResourcePolicy na seção de referência e como desativar contêineres específicos.

    Um dos problemas conhecidos é o uso do escalonamento automático do pod vertical com o Istio. Essa limitação do VPA afeta os arquivos secundários do Istio. Para solucionar o problema, desative o arquivo secundário do Istio. Basta ampliar a definição de especificação VerticalPodAutoscaler com:

    resourcePolicy:
          containerPolicies:
          - containerName: istio-proxy
            mode: "Off"
        

Escalonamento automático vertical de pods no modo automático

Devido às limitações do Kubernetes, a única maneira de modificar as solicitações de recursos de um pod em execução é recriá-lo. Se você criar um VerticalPodAutoscaler com "Auto" em updateMode, o VerticalPodAutoscaler removerá um pod se precisar alterar as solicitações de recurso dele.

Para limitar a quantidade de reinicializações do pod, use um orçamento de interrupção (em inglês).

Para garantir que o cluster possa lidar com os novos tamanhos das cargas de trabalho, use o Escalonador automático de clusters e o Provisionamento automático de nós. O escalonador automático do pod vertical notifica o escalonador automático de clusters antes da atualização. Além disso, os recursos necessários para redimensionar a carga de trabalho são fornecidos antes da recriação, minimizando a interrupção.

A seguir

Referência

VerticalPodAutoscaler v1 autoscaling.k8s.io

Campos

TypeMeta

Grupo, versão e tipo de API.

metadata

ObjectMeta

Metadados de objeto padrão.

spec

VerticalPodAutoscalerSpec

O comportamento desejado do VerticalPodAutoscaler.

status

VerticalPodAutoscalerStatus

O status mais recentemente observado do VerticalPodAutoscaler.

VerticalPodAutoscalerSpec v1 autoscaling.k8s.io

Campos
targetRef

CrossVersionObjectReference

Referência do controlador que gerencia o conjunto de pods para administração do escalonador automático. Por exemplo, um Deployment ou um StatefulSet. É possível apontar um VerticalPodAutoscaler em qualquer controlador que tenha um sub-recurso de escala (em inglês). Normalmente, o VerticalPodAutoscaler recupera o conjunto de pods do ScaleStatus do controlador. Em alguns controladores conhecidos como o DaemonSet, o VerticalPodAutoscaler recupera o conjunto de pods da especificação do controlador.

updatePolicy

PodUpdatePolicy

Especifica se as atualizações recomendadas são aplicadas quando um pod é iniciado e durante a vida útil dele.

resourcePolicy

PodResourcePolicy

Especifica as políticas de como as solicitações de CPU e memória são ajustadas em contêineres individuais.

VerticalPodAutoscalerList v1 autoscaling.k8s.io

Campos

TypeMeta

Grupo, versão e tipo de API.

metadata

ObjectMeta

Metadados de objeto padrão.

items

VerticalPodAutoscaler array

Uma lista de objetos VerticalPodAutoscaler.

PodUpdatePolicy v1 autoscaling.k8s.io

Campos
updateMode

string

Especifica se as atualizações recomendadas são aplicadas quando um pod é iniciado e durante a vida útil dele. Os valores possíveis são "Off", "Initial", "Recreate" e "Auto".

PodResourcePolicy v1 autoscaling.k8s.io

Campos
containerPolicies

ContainerResourcePolicy array

Uma matriz de políticas de recursos para contêineres individuais.

ContainerResourcePolicy v1 autoscaling.k8s.io

Campos
containerName

string

O nome do contêiner ao qual a política se aplica. Se não for especificado, a política serve como política padrão.

mode

ContainerScalingMode

Especifica se as atualizações recomendadas são aplicadas quando um contêiner é iniciado e durante a vida útil dele. Os valores possíveis são "Off" e "Auto".

minAllowed

ResourceList

Especifica as solicitações mínimas de CPU e de memória permitidas para o contêiner.

maxAllowed

ResourceList

Especifica as solicitações máximas de CPU e de memória permitidas para o contêiner.

VerticalPodAutoscalerStatus v1 autoscaling.k8s.io

Campos
recommendation

RecommendedPodResources

As solicitações de CPU e memória recomendadas mais recentemente.

conditions

VerticalPodAutoscalerCondition array

Descreve o estado atual do VerticalPodAutoscaler.

RecommendedPodResources v1 autoscaling.k8s.io

Campos
containerRecommendation

RecommendedContainerResources array

Uma matriz de recomendações de recursos para contêineres individuais.

RecommendedContainerResources v1 autoscaling.k8s.io

Campos
containerName

string

O nome do contêiner ao qual a recomendação se aplica.

target

ResourceList

A solicitação de CPU e a solicitação de memória recomendadas para o contêiner.

lowerBound

ResourceList

As solicitações mínimas de CPU e de memória para o contêiner. Não é garantido que esse valor seja suficiente para que o aplicativo seja estável. A execução com solicitações de CPU e memória menores provavelmente terá um impacto significativo no desempenho ou na disponibilidade.

upperBound

ResourceList

As solicitações máximas recomendadas de CPU e de memória para o contêiner. Solicitações de CPU e memória mais altas do que esses valores provavelmente serão desperdiçadas.

uncappedTarget

ResourceList

A recomendação de recurso mais recente computada pelo escalonador automático, com base no uso real de recursos, não considerando o ContainerResourcePolicy. Se o uso real do recurso fizer com que o destino viole o ContainerResourcePolicy, ele poderá ser diferente da recomendação limitada. Esse campo não afeta a atribuição real de recursos. Ele é usado apenas como uma indicação de status.

VerticalPodAutoscalerCondition v1 autoscaling.k8s.io

Campos
type

VerticalPodAutoscalerConditionType

O tipo de condição que está sendo descrita. Os valores possíveis são "RecommendationProvided", "LowConfidence", "NoPodsMatched" e "FetchingHistory".

status

ConditionStatus

O status da condição. Os valores possíveis são "True", "False" e "Unknown".

lastTransitionTime

Time

A última vez que a condição fez uma transição de um status para outro.

reason

string

O motivo da última transição de um status para outro.

message

string

Uma string legível com detalhes sobre a última transição de um status para outro.