Sobre balanceadores de carga baseados em utilização para serviços do GKE

Esta página apresenta o balanceamento de carga baseado em utilização para serviços do Google Kubernetes Engine (GKE), que avalia a utilização de recursos dos pods de back-end e usa a capacidade real da carga de trabalho para rebalancear o tráfego de maneira inteligente, aumentando a disponibilidade do aplicativo e o roteamento flexível.

Esta página é destinada a arquitetos de nuvem e especialistas em Rede que gerenciam serviços no GKE e querem otimizar a distribuição de tráfego com base na utilização de recursos em tempo real.

Antes de ler esta página, confira se você conhece os seguintes conceitos:

Visão geral

A infraestrutura do Cloud Load Balancing encaminha o tráfego para os serviços do GKE com base em métricas de capacidade de alcance padrão, incluindo HTTP, HTTPS, HTTP/2 e gRPC, que determinam a integridade e a qualificação do pod. Por padrão, ele encaminha o tráfego para todos os pods de back-end íntegros considerando a disponibilidade do pod e as políticas de distribuição de tráfego definidas opcionalmente, como GCPTrafficDistributionPolicy.

Os aplicativos modernos rastreiam o uso da CPU para que você possa entender os custos, monitorar o desempenho e gerenciar a capacidade de maneira eficaz. Para atender a essa necessidade, os balanceadores de carga usam dados de utilização de recursos em tempo real como uma métrica, o que permite determinar o volume de tráfego ideal que cada pod de back-end pode processar para uma distribuição inteligente de tráfego.

O balanceamento de carga baseado em utilização para serviços do GKE avalia a utilização de recursos como uma métrica para determinar a capacidade dos pods de back-end de processar o tráfego de aplicativos. Em seguida, ele reequilibra o tráfego para outros back-ends se um ou mais pods estiverem sendo usados em excesso.

Recursos e benefícios

O balanceamento de carga baseado em utilização oferece os seguintes benefícios:

  • Aumenta a disponibilidade do aplicativo: prioriza o tráfego para pods com menor utilização de recursos quando os back-ends estão sob pressão, o que ajuda a manter o desempenho do aplicativo, evita lentidão e interrupções e ajuda a garantir uma experiência confiável para os usuários.

  • Oferece roteamento flexível: fornece um conjunto adicional de métricas que permitem definir políticas de distribuição de tráfego que se alinham precisamente aos seus casos de uso comerciais.

Como funciona o balanceamento de carga baseado em utilização

O balanceamento de carga baseado em utilização para serviços do GKE melhora a forma como o tráfego é gerenciado para seus aplicativos em execução no GKE, tornando o processo mais responsivo à carga de recursos. O aplicativo é executado no GKE usando muitas instâncias (pods) em máquinas diferentes. Ele recebe tráfego de duas maneiras principais:

  • De fora do cluster (tráfego norte-sul): o cluster recebe tráfego da Internet ou de outras fontes externas, conhecido como tráfego norte-sul. Um balanceador de carga gerenciado pelo GKE (gateway) direciona esse tráfego de fora do cluster.

  • De dentro do cluster (tráfego leste-oeste): seu cluster recebe fluxos de tráfego entre diferentes partes do aplicativo, de outros serviços no cluster do GKE ou em vários clusters. Esse fluxo de tráfego interno é conhecido como tráfego leste-oeste.

O balanceamento de carga baseado em utilização para serviços do GKE envolve um processo contínuo em que os agentes do GKE coletam métricas de utilização de pods que permitem que a infraestrutura do Cloud Load Balancing distribua o tráfego de maneira inteligente. As etapas a seguir resumem como o balanceamento de carga baseado na utilização para serviços do GKE gerencia o tráfego de aplicativos com base no uso de recursos em tempo real:

  1. Quando você configura o serviço do GKE com um balanceador de carga de aplicativo (gateway), o GKE cria automaticamente NEGs para cada zona e atribui os pods do aplicativo a esses NEGs. Inicialmente, a distribuição de tráfego depende de verificações de integridade básicas e das configurações padrão.

  2. Você configura o serviço do GKE para usar a utilização de recursos, como CPU, como uma métrica principal para o balanceamento de carga.

    Além da métrica padrão de utilização da CPU, é possível expor métricas personalizadas do aplicativo para uso pelo balanceador de carga. Usar métricas do aplicativo permite definir seus próprios indicadores específicos para sua carga de trabalho. Por exemplo, é possível usar o gpu_cache_usage_perc metric de uma carga de trabalho de vLLM para ajudar o balanceador de carga a direcionar o tráfego para a região com mais recursos disponíveis. Para saber como expor métricas personalizadas para seu balanceador de carga, consulte Expor métricas personalizadas para balanceadores de carga.

  3. Um agente especial do GKE monitora continuamente o uso de recursos dos seus pods (por exemplo, CPU) e envia esses dados regularmente para a infraestrutura do Cloud Load Balancing. Se um pod tiver vários contêineres, o agente vai calcular a utilização combinada deles.

  4. A infraestrutura do Cloud Load Balancing analisa dados de utilização em tempo real para ajustar dinamicamente a distribuição de tráfego. Ele determina quanto tráfego enviar para cada grupo de pods (cada NEG zonal) avaliando a utilização média de recursos (como carga da CPU) e outros fatores, como latência de rede. Esse processo muda automaticamente o tráfego de pods com carga mais alta para aqueles com carga mais baixa, garantindo o uso eficiente de recursos na região mais próxima.

O exemplo a seguir demonstra como o balanceamento de carga baseado em utilização funciona.

Exemplo: como lidar com pods superutilizados

Quando o serviço executa vários contêineres no mesmo pod, o agente de métricas do GKE informa o uso de recursos de cada contêiner separadamente. A infraestrutura do Cloud Load Balancing calcula uma média ponderada da utilização para obter a capacidade total do pod.

Balanceamento de carga baseado na utilização para serviços do GKE.
Figura 1 : distribuição inteligente de tráfego com base na utilização da CPU de back-end em uma configuração de balanceador de carga gerenciado pelo GKE.

A Figura 1 mostra como o Cloud Load Balancing usa métricas de utilização da CPU em tempo real do GKE para otimizar a distribuição de tráfego entre pods implantados em várias zonas. A solicitação do cliente é encaminhada pelo gateway do GKE para pods de back-end agrupados em NEGs em três zonas.

  • Na zona 1, o pod informa 90% de uso da CPU. O balanceador de carga reduz o tráfego para esse pod e evita a sobrecarga.

  • Na zona 2, o pod é moderadamente utilizado com 60% de CPU e continua recebendo tráfego.

  • Na zona 3, o pod informa um uso baixo da CPU, de 40%, e pode receber mais tráfego. O GKE envia continuamente metadados e métricas de utilização para a infraestrutura do Cloud Load Balancing, que ajusta de maneira inteligente o roteamento de tráfego para manter o desempenho e a disponibilidade do aplicativo.

Imagine um cenário em que seu serviço está configurado para uma utilização máxima de CPU de 80%. Se os pods na Zona 1 relatarem 90% de uso da CPU, o que excede o limite, o seguinte vai acontecer:

  1. A infraestrutura do Cloud Load Balancing detecta esse uso excessivo.
  2. Em seguida, ele reequilibra o tráfego de maneira inteligente e reduz a quantidade de tráfego enviada para pods na Zona 1. Esse rebalanceamento continua até que a utilização média da CPU para pods nessa zona fique abaixo do limite de 80%.
  3. Como os pods na zona 1 informam uma utilização menor da CPU (abaixo do limite de 80%), a infraestrutura do Cloud Load Balancing reavalia a distribuição de tráfego. Em seguida, ele rebalanceia gradualmente o tráfego em todos os pods que dão suporte ao serviço e continua distribuindo o tráfego de maneira eficiente com base na utilização.

A seguir