Escalonamento automático do pod vertical


Nesta página, explicamos como analisar e otimizar a alocação de recursos para melhorar a eficiência da carga de trabalho no Google Kubernetes Engine (GKE) usando o escalonamento automático vertical de pods. Ao analisar o uso de recursos da carga de trabalho ao longo do tempo, você pode receber recomendações de otimização e ajustar automaticamente as solicitações de CPU e memória e os limites para contêineres nos pods.

Nesta página, você vai aprender como o escalonamento automático vertical de pods funciona, quais são os benefícios e as limitações, as práticas recomendadas para usá-lo e como acessar as referências da API para o recurso personalizado VerticalPodAutoscaler e tipos relacionados.

Esta página é destinada a operadores e desenvolvedores que provisionam e configuram recursos de nuvem, implantam cargas de trabalho e gerenciam o dimensionamento de aplicativos. Para saber mais sobre papéis comuns, consulte Tarefas e funções de usuário comuns do GKE Enterprise.

Antes de ler esta página, confira se você conhece as solicitações e os limites de recursos no Kubernetes.

Para necessidades de escalonamento rápido em resposta ao uso repentino de recursos, use o escalonamento automático horizontal de pods.

Para conhecer as práticas recomendadas de escalonamento automático, consulte Práticas recomendadas para executar aplicativos do Kubernetes otimizados para custo no GKE.

Como funciona o escalonamento automático vertical de pods

O escalonamento automático vertical de pods permite analisar e definir recursos de CPU e memória exigidos pelos pods. Em vez de ter que configurar solicitações e limites de CPU atualizados e solicitações e limites de memória para os contêineres do seu pods, configure o escalonamento automático vertical de pods para fornecer valores recomendados para solicitações e limites de CPU e memória que podem ser usados para atualizar manualmente seus pods, ou configurar o escalonamento automático vertical de pods para atualizar automaticamente os valores. de dados.

O escalonamento automático vertical de pods é ativado por padrão nos clusters do Autopilot.

Escalonamento automático do pod vertical 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 updateMode em Auto, 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 do pod. 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 escalonamento automático vertical de pods notifica o escalonador automático de cluster antes da atualização e fornece os recursos necessários para a carga de trabalho redimensionada antes da recriação para minimizar o tempo de interrupção.

Vantagens

O escalonamento automático vertical de pods oferece os seguintes benefícios:

  • Definir as solicitações e os limites de recursos certos para suas cargas de trabalho melhora a estabilidade e a eficiência de custos. Se os tamanhos dos recursos do pod forem menores do que as cargas de trabalho, o aplicativo poderá ser limitado ou falhar devido a erros de falta de memória. Se os tamanhos dos recursos forem muito grandes, você terá resíduos e, portanto, contas maiores.
  • 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 de solicitações de CPU e memória.
  • Tempo de manutenção reduzido porque o escalonador automático pode ajustar as solicitações de CPU e memória ao longo do tempo sem nenhuma ação da sua parte.

O escalonamento automático vertical de pods do GKE oferece os seguintes benefícios em relação ao escalonador automático de código aberto do Kubernetes:

  • Considera o tamanho máximo do nó e as cotas de recursos ao determinar a meta de recomendação.
  • Notifica o escalonador automático de cluster para ajustar a capacidade do cluster.
  • Usa dados históricos e fornece métricas coletadas antes da ativação do escalonador automático vertical de pods.
  • Executa os pods do escalonador automático vertical de pods como processos do plano de controle, em vez de implantações nos seus nós de trabalho.

Limitações

  • O escalonamento automático do pod vertical 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 escalonamento automático vertical de pods tem uma configuração padrão de duas réplicas mínimas para implantações para substituir pods por valores de recursos revisados. No GKE versão 1.22 e posterior, é possível substituir essa configuração especificando um valor para minReplicas no campo PodUpdatePolicy.

Práticas recomendadas

  • Para evitar interrupções na atualização do cluster, recomendamos que você mantenha o número de objetos VerticalPodAutoscaler por cluster abaixo de 1.000.
  • O escalonamento automático vertical de pods funciona melhor com cargas de trabalho homogêneas de longa duração.

Referência da API

Esta é a referência da API v1. É altamente recomendável usar essa versão da API.

VerticalPodAutoscaler v1 autoscaling.k8s.io

Campos

TypeMeta

Grupo, versão e tipo de API.

metadata

ObjectMeta

Metadados de objeto padrão (em inglês).

spec

VerticalPodAutoscalerSpec

O comportamento esperado de 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 autoescalador. Por exemplo, uma implantação ou um StatefulSet. É possível apontar um VerticalPodAutoscaler em qualquer controlador que tenha um sub-recurso Escala. 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. A política de recursos pode ser usada para definir restrições nas recomendações para contêineres individuais. Se não for especificado, o escalonador automático calculará os recursos recomendados para todos os contêineres no pod, sem restrições adicionais.

recommenders

VerticalPodAutoscalerRecommenderSelector array

Recomendador responsável por gerar recomendações para esse objeto VPA. Deixe em branco para usar o recomendador padrão fornecido pelo GKE. Caso contrário, a lista pode conter exatamente uma entrada para um recomendador alternativo fornecido pelo usuário. Compatível desde o GKE 1.22.

VerticalPodAutoscalerList v1 autoscaling.k8s.io

Campos

TypeMeta

Grupo, versão e tipo de API.

metadata

ObjectMeta

Metadados de objeto padrão (em inglês).

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". O padrão será "Auto" se você não especificar um valor.

minReplicas

int32

Número mínimo de réplicas que precisam estar ativas para que o Updater tente remover a pod do pod (pendente de outras verificações, como o orçamento de interrupção do pod). Somente valores positivos são permitidos. Assume a sinalização global "--min-replicas" padrão como 2 no GKE. Compatível desde o GKE 1.22.

PodResourcePolicy v1 autoscaling.k8s.io

Campos
containerPolicies

ContainerResourcePolicy array

Uma matriz de políticas de recursos para contêineres individuais. Pode haver, no máximo, uma entrada para cada contêiner nomeado e, opcionalmente, uma única entrada de caractere curinga com "containerName = "*", que processa todos os contêineres sem políticas individuais.

ContainerResourcePolicy v1 autoscaling.k8s.io

Campos
containerName

string

O nome do contêiner ao qual a política se aplica. Se não 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". O padrão será "Auto" se você não especificar um valor.

minAllowed

ResourceList

Especifica o pedido mínimo de CPU e a solicitação de memória permitida para o contêiner. Por padrão, não há uma solicitação mínima aplicada.

maxAllowed

ResourceList

Especifica a solicitação máxima de CPU e a solicitação de memória permitida para o contêiner. Por padrão, não há uma solicitação máxima aplicada.

ControlledResources

[]ResourceName

Especifica o tipo de recomendações que serão calculadas (e possivelmente aplicadas) pelo VerticalPodAutoscaler. Se estiver vazio, o padrão do [ResourceCPU, ResourceMemory] será usado.

VerticalPodAutoscalerRecommenderSelector v1 autoscaling.k8s.io

Campos
name

string

Nome do recomendador responsável por gerar recomendação para esse objeto.

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

A solicitação mínima de CPU e solicitação 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

A solicitação de CPU e a solicitação de memória máximas recomendadas 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. Este 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.

A seguir