Nesta página, você encontra uma visão geral do escalonamento automático vertical de pods no
Google Kubernetes Engine (GKE) e materiais de referência do
recurso personalizado VerticalPodAutoscaler
e dos tipos relacionados.
O escalonamento automático vertical de pods fornece recomendações de uso de recursos ao longo do tempo. Para aumentos repentinos no uso de recursos, use o escalonador automático horizontal de pods.
Para saber como usar o escalonamento automático vertical de pods, consulte Escalonamento e solicitações de recursos de contêineres.
Para conhecer as práticas recomendadas de escalonamento automático, consulte Práticas recomendadas para executar aplicativos econômicos do Kubernetes 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 de recriá-la 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
- Para usar o escalonamento automático vertical de pods com o escalonamento automático horizontal de pods, use o escalonamento automático multidimensional de pods. Também é possível usar o escalonamento automático vertical de pods com escalonamento automático horizontal de pods em métricas personalizadas e externas.
- 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 | |
---|---|
|
Grupo, versão e tipo de API. |
metadata |
Metadados de objeto padrão (em inglês). |
spec |
O comportamento esperado de |
status |
O status mais recentemente observado do |
VerticalPodAutoscalerSpec v1 autoscaling.k8s.io
Campos | |
---|---|
targetRef |
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 |
updatePolicy |
Especifica se as atualizações recomendadas são aplicadas quando um pod é iniciado e durante a vida útil dele. |
resourcePolicy |
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 |
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 | |
---|---|
|
Grupo, versão e tipo de API. |
metadata |
Metadados de objeto padrão (em inglês). |
items |
Uma lista de objetos |
PodUpdatePolicy v1 autoscaling.k8s.io
Campos | |
---|---|
updateMode |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
Especifica o tipo de recomendações que serão calculadas (e
possivelmente aplicadas) pelo |
VerticalPodAutoscalerRecommenderSelector v1 autoscaling.k8s.io
Campos | |
---|---|
name |
Nome do recomendador responsável por gerar recomendação para esse objeto. |
VerticalPodAutoscalerStatus v1 autoscaling.k8s.io
Campos | |
---|---|
recommendation |
As solicitações de CPU e memória recomendadas mais recentemente. |
conditions |
Descreve o estado atual do |
RecommendedPodResources v1 autoscaling.k8s.io
Campos | |
---|---|
containerRecommendation |
Uma matriz de recomendações de recursos para contêineres individuais. |
RecommendedContainerResources v1 autoscaling.k8s.io
Campos | |
---|---|
containerName |
O nome do contêiner ao qual a recomendação se aplica. |
target |
A solicitação de CPU e a solicitação de memória recomendadas para o contêiner. |
lowerBound |
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 |
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 |
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 |
O tipo de condição que está sendo descrita. Os valores possíveis são "RecommendationProvided", "LowConfidence", "NoPodsMatched" e "FetchingHistory". |
status |
O status da condição. Os valores possíveis são "True", "False" e "Unknown". |
lastTransitionTime |
A última vez que a condição fez uma transição de um status para outro. |
reason |
O motivo da última transição de um status para outro. |
message |
Uma string legível com detalhes sobre a última transição de um status para outro. |
A seguir
- Saiba mais sobre o escalonador automático de clusters.