Esta página oferece uma vista geral da escala automática horizontal de pods e explica como funciona no Google Kubernetes Engine (GKE). Também pode ler sobre como configurar e usar o redimensionamento automático de pods horizontal nos seus clusters.
O Horizontal Pod Autoscaler altera a forma da sua carga de trabalho do Kubernetes aumentando ou diminuindo automaticamente o número de pods em resposta ao consumo de CPU ou memória da carga de trabalho, ou em resposta a métricas personalizadas comunicadas a partir do Kubernetes ou métricas externas de origens fora do seu cluster.
Os clusters do GKE com aprovisionamento automático de nós dimensionam automaticamente o número de nós no cluster com base nas alterações no número de pods. Por esse motivo, recomendamos que use a escala automática de pods horizontal para todos os clusters.
Por que motivo deve usar a escala automática horizontal de pods
Quando implementa pela primeira vez a sua carga de trabalho num cluster do Kubernetes, pode não ter a certeza dos respetivos requisitos de recursos e de como esses requisitos podem mudar consoante os padrões de utilização, as dependências externas ou outros fatores. O dimensionamento automático de pods horizontal ajuda a garantir que a sua carga de trabalho funciona de forma consistente em diferentes situações e permite-lhe controlar os custos pagando apenas a capacidade adicional quando precisar dela.
Nem sempre é fácil prever os indicadores que mostram se a sua carga de trabalho tem recursos insuficientes ou está subutilizada. O redimensionador automático horizontal de pods pode dimensionar automaticamente o número de pods na sua carga de trabalho com base numa ou mais métricas dos seguintes tipos:
Utilização real de recursos: quando a utilização de CPU ou memória de um determinado pod excede um limite. Isto pode ser expresso como um valor bruto ou como uma percentagem do valor que o Pod pede para esse recurso.
Métricas personalizadas: baseadas em qualquer métrica comunicada por um objeto Kubernetes num cluster, como a taxa de pedidos de clientes por segundo ou gravações de E/S por segundo.
Isto pode ser útil se a sua aplicação for propensa a gargalos de rede, em vez de CPU ou memória.
Métricas externas: baseadas numa métrica de uma aplicação ou um serviço externo ao seu cluster.
Por exemplo, a sua carga de trabalho pode precisar de mais CPU quando carrega um grande número de pedidos de um pipeline, como o Pub/Sub. Pode criar uma métrica externa para o tamanho da fila e configurar o Horizontal Pod Autoscaler para aumentar automaticamente o número de pods quando o tamanho da fila atingir um determinado limite e para reduzir o número de pods quando o tamanho da fila diminuir.
Pode combinar um redimensionador automático horizontal de pods com um redimensionador automático vertical de pods, com algumas limitações.
Como funciona o redimensionamento automático horizontal de pods
Cada escala automática horizontal de pods configurada funciona através de um ciclo de controlo. Existe um Horizontal Pod Autoscaler separado para cada carga de trabalho. Cada Horizontal Pod Autoscaler verifica periodicamente as métricas de uma determinada carga de trabalho em relação aos limites de destino que configurar e altera automaticamente a forma da carga de trabalho.
Recursos por pod
Para recursos atribuídos por agrupamento, como a CPU, o controlador consulta a API de métricas de recursos para cada contentor em execução no agrupamento.
- Se especificar um valor não processado para a CPU ou a memória, o valor é usado.
- Se especificar um valor percentual para a CPU ou a memória, o Horizontal Pod Autoscaler calcula o valor de utilização médio como uma percentagem dos pedidos de CPU ou memória desse pod.
- As métricas personalizadas e externas são expressas como valores brutos ou valores médios.
O controlador usa o valor médio ou não processado de uma métrica comunicada para produzir uma proporção e usa essa proporção para ajustar automaticamente a escala da carga de trabalho. Pode ler uma descrição do algoritmo de escala automática horizontal de pods na documentação do projeto Kubernetes.
Responder a várias métricas
Se configurar uma carga de trabalho para ser dimensionada automaticamente com base em várias métricas, o Horizontal Pod Autoscaler avalia cada métrica separadamente e usa o algoritmo de dimensionamento para determinar a nova escala da carga de trabalho com base em cada uma. A escala maior é selecionada para a ação de ajuste automático da escala.
Se uma ou mais métricas estiverem indisponíveis por algum motivo, o HorizontalPodAutoscaler continua a aumentar a escala com base no maior tamanho calculado, mas não a diminui.
Prevenção de thrashing
O Thrashing refere-se a uma situação em que a escala automática horizontal de pods tenta executar ações de escala automática subsequentes antes de a carga de trabalho terminar de responder a ações de escala automática anteriores. Para evitar a instabilidade, o Horizontal Pod Autoscaler escolhe a maior recomendação com base nos últimos cinco minutos.
Limitações
- Não use o redimensionador automático horizontal de pods juntamente com o redimensionador automático vertical de pods na CPU ou na memória. Pode usar o redimensionador automático horizontal de pods com o redimensionador automático vertical de pods para outras métricas. Pode configurar a escala automática de pods multidimensional (em versão beta) para dimensionar horizontalmente na CPU e verticalmente na memória ao mesmo tempo.
- Se tiver uma implementação, não configure o ajuste automático de pods horizontal no ReplicaSet ou no Replication Controller que o suporta. Quando faz uma atualização incremental na implementação ou no Replication Controller, este é substituído por um novo Replication Controller. Em alternativa, configure a escala automática horizontal de pods na própria implementação.
- Não pode usar a escala automática horizontal de pods para cargas de trabalho que não podem ser dimensionadas, como DaemonSets.
- A escala automática horizontal de pods expõe métricas como recursos do Kubernetes, o que
impõe limitações aos nomes das métricas, como não poderem ter carateres em maiúsculas nem "/".
O adaptador de métricas pode permitir a mudança de nome. Por exemplo, consulte o operador
prometheus-adapter
as
. - O Horizontal Pod Autoscaler não reduz a escala se alguma das métricas que está configurado para monitorizar estiver indisponível. Para verificar se tem métricas indisponíveis, consulte o artigo Ver detalhes sobre um redimensionador automático de pods horizontal.
Escalabilidade
Embora o Horizontal Pod Autoscaler não tenha um limite rígido para o número de objetos HPA suportados, o respetivo desempenho pode ser afetado à medida que este número aumenta. Em concreto, o período entre os recálculos da HPA pode tornar-se superior aos 15 segundos padrão.
- Na versão secundária 1.22 ou posterior do GKE, o período de recálculo deve permanecer dentro de 15 segundos com até 300 objetos HPA.
- Na versão secundária 1.31 ou posterior do GKE, se o perfil de HPA de desempenho estiver configurado, o período de recálculo deve permanecer dentro de 15 segundos com até 1000 objetos HPA. Saiba como configurar o perfil HPA de desempenho.
- Na versão secundária do GKE 1.33 ou posterior, se o perfil de HPA de desempenho estiver configurado, o período de recálculo deve permanecer dentro de 15 segundos com até 5000 objetos HPA. O perfil HPA de desempenho está ativado por predefinição em todos os clusters que cumprem os requisitos.
Os seguintes fatores também podem afetar o desempenho:
- Escalabilidade em várias métricas: cada métrica adiciona uma chamada de obtenção para os cálculos de recomendações, o que afeta o período de recálculo.
- A latência da pilha de métricas personalizadas: os tempos de resposta superiores a aproximadamente 50 milissegundos seriam mais do que o normalmente observado com as métricas padrão do Kubernetes, o que afetaria o período de recálculo.
Interagir com HorizontalPodAutoscaler
objetos
Pode configurar um redimensionador automático de pods horizontal para uma carga de trabalho e obter informações sobre eventos de redimensionamento automático e o que os causou, visitando a página Cargas de trabalho na Trusted Cloud consola.
Cada Horizontal Pod Autoscaler existe no cluster como um objeto HorizontalPodAutoscaler
. Pode usar comandos como
kubectl get hpa
ou kubectl describe hpa HPA_NAME
para
interagir com estes objetos.
Também pode criar objetos HorizontalPodAutoscaler
usando o comando
kubectl autoscale
.
O que se segue?
- Saiba como configurar a escala automática horizontal de pods
- Saiba como dimensionar manualmente uma aplicação
- Saiba como reduzir a zero com o KEDA
- Saiba mais acerca da escala automática vertical de pods
- Saiba mais sobre o Cluster Autoscaler