Escalonamento automático horizontal de pods

Nesta página, apresentamos uma visão geral do escalonador automático horizontal de pods (HPA, na sigla em inglês) e explicamos como ele funciona. Também é possível ler sobre como configurar e usar o escalonador automático horizontal de pods em clusters.

O HPA altera a forma da carga de trabalho do Kubernetes ampliando ou reduzindo automaticamente o número de pods em resposta ao consumo de memória ou CPU da carga de trabalho, ou em resposta a métricas personalizadas informadas no Kubernetes ou métricas externas de fora do cluster.

O HPA não pode ser usado para cargas de trabalho que não escalonáveis, como DaemonSets.

Visão geral

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 HPA ajuda a garantir que a carga de trabalho funcione consistentemente 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 HPA pode escalonar automaticamente o número de pods da carga de trabalho de acordo com 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 HPA para aumentar automaticamente o número de pods quando o tamanho da fila atingir um determinado nível e reduzir o número de pods quando o tamanho da fila diminuir.

Mesmo com algumas limitações discutidas na próxima seção deste tópico, o HPA pode ser combinado com o escalonador automático vertical de pods.

Como funciona o HPA

Cada objeto do escalonador automático horizontal de pods configurado funciona usando um loop de controle. Há um objeto do HPA para cada fluxo de trabalho. Cada objeto do HPA compara periodicamente as métricas de uma determinada carga de trabalho com os 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 HPA calculará a média de uso como uma porcentagem das solicitações de CPU ou de 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 HPA avaliará cada métrica separadamente e usará o algoritmo de escalonamento para determinar a nova escala de carga de trabalho de acordo com cada uma delas. A maior escala será selecionada para o processo de escalonamento automático.

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

Como impedir sobrecargas

Uma sobrecarga é uma situação que o HPA 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 remoção, o HPA escolhe a maior recomendação com base nos últimos cinco minutos.

Limitações

  • Não use o HPA com o escalonador automático vertical de pods (VPA, na sigla em inglês) na CPU ou na memória. No entanto, é possível usar o HPA com o VPA se o HPA avaliar métricas que não sejam de CPU ou memória.
  • Se você tiver uma implantação, não configure o HPA no ReplicaSet ou no 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 HPA na própria implantação.

Como interagir com objetos do HPA

É possível configurar um HPA para uma carga de trabalho e conseguir informações sobre eventos de escalonamento automático e as respectivas causas acessando a página Cargas de trabalho no Console do Google Cloud.

Cada HPA existe no cluster como um objeto hpa. Use comandos como kubectl get hpa ou kubectl describe hpa [HPA-NAME] para interagir com esses objetos.

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

Para saber mais sobre como configurar e observar HPAs, acesse Configurar um escalonador automático horizontal de pods.

A seguir