Esta página explica como você pode analisar e otimizar a alocação de recursos para melhorar a eficiência da sua carga de trabalho no Google Kubernetes Engine (GKE), usando o dimensionamento automático vertical de Pods. Ao analisar o uso de recursos da sua carga de trabalho ao longo do tempo, você pode obter recomendações de otimização e ajustar automaticamente as solicitações de CPU e memória, bem como os limites para contêineres dentro dos Pods.
Nesta página, você aprenderá como funciona o dimensionamento automático vertical de Pods, seus benefícios e limitações, as melhores práticas para usá-lo e 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 escalonamento de aplicativos. Para saber mais sobre funções comuns, consulte Funções e tarefas comuns do usuário GKE.
Antes de ler esta página, certifique-se de estar familiarizado comsolicitações e limites de recursos no Kubernetes.
Para necessidades de escalonamento rápido em resposta ao uso repentino de recursos, use o escalonador automático horizontal de pods.
Para aprender as melhores práticas de escalonamento automático, consulte Melhores práticas para executar aplicações Kubernetes com custo otimizado 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.
Modos de dimensionamento automático do Pod Vertical
Você pode configurar como o dimensionamento automático vertical de Pods aplica as alterações de recursos aplicando diferentes modos de atualização.
Auto (Recreate) modo
No modo Recreate, o dimensionamento automático vertical de Pods remove um Pod se precisar alterar as solicitações de recursos do Pod. A remoção é necessária porque, devido às limitações do Kubernetes em versões anteriores à 1.33, a única maneira de modificar as solicitações de recursos de um Pod em execução é recriá-lo.
Para limitar a quantidade de recriações de Pods, use um orçamento de interrupção de 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 dimensionamento automático de Pods verticais notifica o dimensionador automático do cluster antes da atualização e fornece os recursos necessários para a carga de trabalho redimensionada antes de recriá-la, a fim de minimizar o tempo de interrupção.
Modo Initial
Com Initial ativado, o dimensionamento automático vertical de Pods atribui solicitações de recursos apenas na criação do Pod e nunca as altera posteriormente.
Modo InPlaceOrRecreate
O modo InPlaceOrRecreate visa reduzir a interrupção do serviço, tentando atualizar os recursos do Pod sem recriá-lo. Embora esse modo não garanta zero interrupções, ele pode ajudar a reduzi-las, ao mesmo tempo que permite aproveitar o dimensionamento automático vertical dos Pods.
Para usar o modo InPlaceOrRecreate, defina o campo spec.updatePolicy.updateMode para "InPlaceOrRecreate" em seu objeto VerticalPodAutoscaler.
Se o dimensionamento automático vertical do Pod determinar que uma atualização no local não é possível, ele reverte para o comportamento do modo Auto, que expulsa e recria o Pod para aplicar as alterações.
O modo InPlaceOrRecreate está disponível a partir da versão 1.34.0-gke.2011000 do Kubernetes.
Para obter mais detalhes sobre o comportamento e as limitações existentes do modo InPlaceOrRecreate, consulte o anúncio do Kubernetes para atualizações in-place.
Modo Off
No modo Off, o dimensionamento automático vertical do Pod não aplica automaticamente nenhuma alteração a um Pod.
Você ainda pode visualizar os valores recomendados para as solicitações e os limites de CPU e memória com base no histórico de uso, mas essas recomendações não serão aplicadas a você. Se necessário, você pode aplicar manualmente os valores recomendados aos seus Pods.
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
minReplicasno campo PodUpdatePolicy. - Se você usar o modo de atualização
InPlaceOrRecreatedo dimensionamento automático vertical de Pods e uma atualização no local não for possível (por exemplo, ao aumentar a escala do Pod além da capacidade do nó), o dimensionamento automático vertical de Pods removerá e recriará o Pod para aplicar a recomendação. A remoção e a recriação ocorrem mesmo para Pods que têm umresizePolicydefinido em sua especificação para evitar recriações. Esse comportamento ocorre para solicitações de redimensionamento do Autopilot, inclusive ao aplicarrestrições de recursos mínimos e proporção CPU:memória. - O dimensionamento automático vertical de Pods requer um objeto de carga de trabalho que gerencie os Pods, como um Deployment, StatefulSet, ReplicaSet ou ReplicationControllers. Não é possível usar o dimensionamento automático vertical de Pods com Pods independentes, pois é necessário um controlador de carga de trabalho para gerenciar o processo de recriação do Pod.
Práticas recomendadas
- Limitar o número de
VerticalPodAutoscalerobjetos. Para evitar interrupções na atualização do cluster, recomendamos que você mantenha o número de objetosVerticalPodAutoscalerpor cluster abaixo de 1.000. - O dimensionamento automático de Pods verticais funciona melhor com cargas de trabalho homogêneas de longa duração.
- De longa duração: Cargas de trabalho que são executadas por pelo menos 24 horas. O dimensionamento automático do Vertical Pod requer uma quantidade significativa de dados históricos para gerar recomendações de alta confiabilidade. No modo
AutoouRecreate, as atualizações geralmente ocorrem depois que um Pod tem pelo menos 24 horas, o que ajuda a evitar reinicializações frequentes e instabilidade do Pod. - Homogêneo: Os pods visados por um único objeto
VerticalPodAutoscaler(como todas as réplicas em um Deployment) devem exibir padrões de consumo de recursos semelhantes. O dimensionador automático vertical de Pods gera recomendações agregando dados de uso em todos os Pods selecionados. Se suas réplicas tiverem uso heterogêneo, por exemplo, alguns Pods estiverem ociosos e outros estiverem com alta carga, o dimensionador automático de Pods vertical pode fornecer uma recomendação que provisione recursos em excesso para os Pods ociosos ou recursos insuficientes para os ocupados.
- De longa duração: Cargas de trabalho que são executadas por pelo menos 24 horas. O dimensionamento automático do Vertical Pod requer uma quantidade significativa de dados históricos para gerar recomendações de alta confiabilidade. No modo
- Use o dimensionamento automático horizontal de Pods para cargas de trabalho com picos repentinos de demanda. O dimensionamento automático do Vertical Pod foi projetado para o dimensionamento correto em regime permanente e não é uma solução para picos repentinos e de curta duração de recursos. Para cargas de trabalho com flutuações rápidas no tráfego ou na demanda por CPU ou memória, use o autoscaler de Pod horizontal em vez disso.
- Aproveite a proteção contra falta de memória (OOM). Embora o escalonador automático vertical de pods seja reativo, ele inclui proteção automatizada contra eventos de falta de memória (OOM, na sigla em inglês). Se um Pod for
OOMKilled, o dimensionador automático vertical de Pods observa imediatamente o evento e aumenta a recomendação de memória em aproximadamente 20% (ou 100 MB, o que for maior) para melhorar a estabilidade quando o Pod for recriado.
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:
|
minReplicas |
O número mínimo de réplicas que precisam estar ativas para tentar a remoção do Pod (sujeito a outras verificações, como o Orçamento de Interrupção do Pod).
Somente valores positivos são permitidos. O valor padrão é |
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 como configurar o escalonamento automático vertical de pods.
- Saiba mais sobre o escalonamento automático horizontal de pods.
- Saiba mais sobre o escalonador automático de clusters.
- Saiba como configurar o escalonamento automático horizontal de pods.
- Saiba como otimizar o escalonamento automático de pods com base em métricas.