Mecanismos de dimensionamento da carga de trabalho
Item |
HPA |
CronHPA |
CustomedHPA |
---|---|---|---|
Introdução |
Aprimorado com base em HPA, CronHPA é usado principalmente se o uso de recursos de aplicações muda periodicamente. |
Dimensionamento automático do CCE aprimorado que é acionado com base em métricas ou em um horário programado. |
|
Regras |
Dimensiona Implementações com base em métricas (uso de CPU e uso de memória). |
Escalas Implantações periodicamente (diária, semanal, mensal ou anual em um horário específico). |
Dimensiona Implementações com base em métricas (uso de CPU e uso de memória) ou em um intervalo periódico (um ponto de tempo específico todos os dias, todas as semanas, todos os meses ou todos os anos). |
Aprimoramento |
Adiciona a janela de tempo de resfriamento no nível da aplicação e as funções de limite de escala com base no Kubernetes HPA. |
Compatível com objetos de HPA, o que permite que você use CronHPA e HPA.
|
Metric-based:
Periodic: você pode selecionar um ponto de tempo específico todos os dias, todas as semanas, todos os meses ou todos os anos, ou um período como o tempo de disparo. |
Utilização |
Criação de uma política HPA para dimensionamento automático da carga de trabalho |
Criação de uma política CustomedHPA para o dimensionamento automático da carga de trabalho |
Como funciona o HPA
HPA é um controlador que controla o dimensionamento horizontal do pod. O HPA verifica periodicamente as métricas do pod, calcula o número de réplicas necessárias para atender aos valores de destino configurados para recursos HPA e, em seguida, ajusta o valor do campo replicas no objeto de recurso de destino (como uma Implementação).
Um pré-requisito para o dimensionamento automático é que os dados em execução do contêiner possam ser coletados, como o número de nós/pods de cluster e o uso de CPU e memória de contêineres. O Kubernetes não fornece esses recursos de monitoramento em si. Você pode usar extensões para monitorar e coletar seus dados. O CCE integra Prometheus e Metrics Server para realizar esses recursos:
- Prometheus é uma estrutura de monitoramento e alarme de código aberto que pode coletar vários tipos de métricas. O Prometheus tem sido uma solução de monitoramento padrão do Kubernetes.
- Metrics Server é um agregador de dados de utilização de recursos em todo o cluster. O Metrics Server coleta métricas da API Summary exposta pelo kubelet. Essas métricas são definidas para os principais recursos do Kubernetes, como pods, nodes, contêineres e serviços. O Metrics Server fornece um conjunto de APIs padrão para sistemas externos coletarem essas métricas.
O HPA pode trabalhar com o Metrics Server para implementar o escalonamento automático com base no uso da CPU e da memória. Também pode funcionar com o Prometheus para escalonamento automático com base em métricas de monitoramento personalizadas.
Figura 1 mostra como funciona o HPA.
Dois módulos principais do HPA:
- Monitoramento da fonte de dados
A comunidade forneceu apenas HPA baseado em CPU e memória no estágio inicial. Com a população de Kubernetes e Prometheus, os desenvolvedores precisam de mais métricas personalizadas ou informações de monitoramento na camada de acesso para suas próprias aplicações, por exemplo, o QPS do balanceador de carga e o número de usuários on-line do site. Em resposta, a comunidade define um conjunto de APIs de métrica padrão para fornecer serviços externamente por meio dessas APIs agregadas.
- metrics.k8s.io fornece métricas de monitoramento relacionadas à CPU e à memória de pods e nodes.
- custom.metrics.k8s.io fornece métricas de monitoramento personalizadas relacionadas a objetos do Kubernetes.
- external.metrics.k8s.io fornece métricas que vêm de sistemas externos e são irrelevantes para qualquer métrica de recurso do Kubernetes.
- Dimensionar algoritmos de tomada de decisão
O controlador HPA calcula a taxa de escala com base nos valores métricos atuais e nos valores métricos desejados usando a seguinte fórmula:
desiredReplicas = ceil[currentReplicas x (currentMetricValue/desiredMetricValue)]
Por exemplo, se o valor métrico atual for 200m e o valor alvo for 100m, o número desejado de pods será duplicado de acordo com a fórmula. Na prática, as vagens podem ser constantemente adicionadas ou reduzidas. Para garantir a estabilidade, o controlador HPA é otimizado a partir dos seguintes aspectos:
- Intervalo de resfriamento: na v1.11 e versões anteriores, o Kubernetes introduziu os parâmetros horizontal-pod-autoscaler-downscale-stabilization-window e horizontal-pod-autoScaler-upscale-stabilization-window para indicar os intervalos de resfriamento após uma redução e expansão, respectivamente, no qual nenhuma operação de dimensionamento não será executada. Nas versões posteriores à v1.14, a fila de agendamento é introduzida para armazenar todas as sugestões de tomada de decisão detectadas dentro de um período de tempo. Em seguida, o sistema toma decisões com base em todas as sugestões válidas de tomada de decisão para minimizar as alterações do número desejado de réplicas para garantir a estabilidade.
- Tolerâncias: pode ser considerada como uma zona-tampão. Se as alterações do número de vagens puderem ser toleradas, o número de vagens permanece inalterado.
Use a fórmula: ratio = currentMetricValue/desiredMetricValue
Quando |ratio – 1,0| ≤ tolerância, o dimensionamento não será realizado.
Quando |rácio – 1,0| > tolerância, o valor desejado é calculado usando a fórmula mencionada acima.
O valor padrão é 0,1 na versão atual da comunidade.
O HPA executa dimensionamento com base em limiares métricos. As métricas comuns incluem o uso da CPU e da memória. Você também pode definir métricas personalizadas, como o QPS e o número de conexões, para acionar o escalonamento. No entanto, o escalonamento baseado em métricas traz latência de minutos gerados durante as fases de coleta, determinação e dimensionamento de dados. Essa latência pode causar alto uso da CPU e resposta lenta. Para resolver esse problema, o CCE permite que você configure políticas agendadas para dimensionar recursos regularmente para aplicações com alterações periódicas.