Escalonamento automático de pod horizontal


Nesta página, apresentamos uma visão geral do escalonamento automático horizontal de pods e explicamos como ele funciona no Google Kubernetes Engine (GKE). Também é possível ler sobre como configurar e usar o escalonamento automático horizontal de pods em clusters.

O Escalonamento automático horizontal de pods muda a forma da carga de trabalho do Kubernetes, aumentando ou diminuindo automaticamente o número de pods em resposta ao consumo de memória ou CPU da carga de trabalho ou às métricas personalizadas informadas no Kubernetes ou às métricas externas fora do cluster.

Os clusters do GKE com provisionamento automático de nós escalonam automaticamente o número de nós no cluster com base nas alterações no número de pods. Por isso, recomendamos que você use o escalonamento automático horizontal de pods para todos os clusters.

Por que usar o escalonamento automático horizontal de pods

Ao implantar a carga de trabalho pela primeira vez em um cluster do Kubernetes, talvez você não tenha certeza sobre os requisitos dos recursos e como eles podem mudar dependendo dos padrões de uso, dependências externas ou outros fatores. O escalonamento automático horizontal de pods ajuda a garantir que a carga de trabalho funcione de modo consistente em diferentes situações e permite controlar os custos pagando pela capacidade extra somente quando você precisar dela.

Nem sempre é fácil prever os indicadores que mostram se a carga de trabalho não tem recursos suficientes ou está sendo subutilizada. O escalonador automático horizontal de pods escalona automaticamente o número de pods da carga de trabalho com base em uma ou mais métricas dos tipos a seguir:

  • Uso real de recursos: quando o uso de CPU ou memória de um determinado pod excede um limite. Isso pode ser exibido como um valor bruto ou como uma porcentagem do valor que o pod solicita para esse recurso.

  • Métricas personalizadas: baseadas em qualquer métrica informada por um objeto do Kubernetes em um cluster, como a taxa de solicitações de clientes por segundo ou gravações de E/S por segundo.

    Isso pode ser útil se o aplicativo estiver sujeito a gargalos de rede, em vez de CPU ou memória.

  • Métricas externas: baseadas em uma métrica de um aplicativo ou serviço externo do cluster.

    Por exemplo, imagine que sua carga de trabalho precisa de mais CPU quando estiver processando um grande número de solicitações de um pipeline como o Pub/Sub. É possível criar uma métrica externa para o tamanho da fila e configurar o escalonador automático de pod horizontal para aumentar automaticamente o número de pods quando o tamanho atingir um determinado limite e reduzir o número de pods. Pods quando o tamanho da fila diminuir.

É possível combinar um escalonador automático horizontal de pods com um escalonador automático vertical de pods, com algumas limitações.

Como funciona o escalonamento automático de pod horizontal

Cada escalonador automático horizontal de pods configurado funciona usando um loop de controle. Há um escalonador automático horizontal de pods para cada fluxo de trabalho. Cada escalonador automático de pod horizontal verifica periodicamente as métricas de uma determinada carga de trabalho em relação aos limites configurados e altera a forma da carga de trabalho automaticamente.

Recursos por pod

Para recursos alocados por pod, como a CPU, o controlador consulta a API de métricas de recursos para cada contêiner em execução no pod.

  • Se você especificar um valor bruto de CPU ou memória, esse valor será usado.
  • Se você especificar um valor de porcentagem para CPU ou memória, o escalonador automático de pod horizontal calculará o valor médio de utilização como uma porcentagem das solicitações de CPU ou memória desse pod.
  • As métricas personalizadas e externas são expressas como valores brutos ou médios.

O controlador usa o valor médio ou bruto de uma métrica informada para produzir uma razão e usá-la para escalonar automaticamente a carga de trabalho. Na documentação do projeto do Kubernetes, você encontra uma descrição do algoritmo do escalonador automático horizontal de pods (em inglês).

Como reagir a várias métricas

Se você configurar uma carga de trabalho para escalonamento automático com base em várias métricas, o escalonador automático horizontal de pods avaliará cada métrica separadamente e usará o algoritmo de escalonamento para determinar a nova escala de carga de trabalho conforme cada uma delas. A maior escala será selecionada para o processo de escalonamento automático.

Se uma ou mais métricas estiverem indisponíveis por algum motivo, o Escalonador automático horizontal de pods ainda escalonará para cima com base no maior tamanho calculado, mas não escalonará para baixo.

Como impedir sobrecargas

Uma sobrecarga é uma situação em que o Escalonador automático horizontal de pods tenta realizar ações subsequentes de escalonamento automático antes de a carga terminar de responder às ações anteriores de escalonamento automático. Para evitar sobrecarga, o Escalonador automático horizontal de pods escolhe a maior recomendação com base nos últimos cinco minutos.

Limitações

  • Não use o Escalonador automático horizontal de pods com o Autoescalonador de Pods Vertical na CPU ou na memória. É possível usar o escalonador automático de pod horizontal com o escalonador automático de pod vertical para outras métricas.
  • Se você tiver uma implantação, não configure o escalonamento automático do pod horizontal no ReplicaSet ou controlador de replicação. Quando você executa uma atualização gradual na implantação ou no controlador de replicação, ela é efetivamente substituída por um novo controlador de replicação. Em vez disso, configure o escalonamento automático horizontal de pods na própria implantação.
  • Não é possível usar o escalonamento automático horizontal de pods para cargas de trabalho que não podem ser escalonadas, como DaemonSets.
  • Não é possível usar métricas personalizadas ou externas com o escalonamento automático horizontal de pods para reduzir a zero pods e, em seguida, escalonar novamente.
  • O escalonamento automático horizontal de pods expõe métricas como recursos do Kubernetes, o que impõe nomes de métricas, como caracteres maiúsculos ou "/". É possível que o adaptador de métricas permita a renomeação. Por exemplo, consulte o operador prometheus-adapter as.

Escalonabilidade

O escalonador automático horizontal de pods não tem um limite absoluto para o número de objetos HPA compatíveis. No entanto, acima de um determinado número de objetos HPA, o período entre os recálculos da HPA pode se tornar mais longo do que o padrão de 15 segundos.

  • Versão secundária do GKE 1.21 ou anterior: o período de recálculo deve permanecer dentro de 15 segundos com até 100 objetos HPA.
  • GKE versão secundária 1.22 ou posterior: o período de recálculo deve permanecer dentro de 15 segundos com até 300 objetos HPA.

Os seguintes fatores também podem afetar o desempenho:

  • Escalonamento por várias métricas: cada métrica adiciona uma chamada de busca para cálculos de recomendação, afetando o período de recálculo.
  • A latência da pilha de métricas personalizadas: os tempos de resposta acima de aproximadamente 50 milissegundos seriam maiores do que o normalmente observado com as métricas padrão do Kubernetes, afetando o período de recálculo.

Interagir com objetos HorizontalPodAutoscaler

É possível configurar um Escalonador automático horizontal de pods para uma carga de trabalho e conseguir informações sobre eventos de escalonamento automático e as respectivas causas. Basta acessar a página Cargas de trabalho no console do Google Cloud.

Cada escalonador automático de pod horizontal existe no cluster como um objeto HorizontalPodAutoscaler. Use comandos como kubectl get hpa ou kubectl describe hpa HPA_NAME para interagir com esses objetos.

Também é possível criar objetos HorizontalPodAutoscaler usando o comando kubectl autoscale (em inglês).

A seguir