Como usar o Balancero de Carga Kubernetes?

Como usar o Balancero de Carga Kubernetes?
O balanceamento de carga é fundamental para manter os clusters de Kubernetes em larga escala funcionando e seguros. Embora muitos balanceadores de carga sejam extremamente bem -sucedidos em controlar muitas dessas preocupações para você, é fundamental configurar corretamente seu ambiente de Kubernetes para tirar o máximo proveito dos serviços que esses balanceadores de carga fornecem. Este artigo investiga profundamente o tópico.

O que é o balanceador de carga de Kubernetes?

Os balanceadores de carga distribuem o tráfego recebido sobre um grupo de hosts para garantir cargas de trabalho ideais e alta disponibilidade. Devido ao seu design subjacente, a arquitetura distribuída de um cluster de Kubernetes depende de várias instâncias de serviços, o que apresenta desafios na ausência de alocação de carga apropriada.

Um balanceador de carga é um controlador de tráfego que direciona solicitações do cliente para os nós que podem servir de maneira imediata e eficiente. O balanceador de carga redistribui a carga de trabalho nos nós restantes quando um dos hosts falha. Quando um novo nó entra em um cluster, por outro lado, o serviço começa automaticamente a enviar solicitações para as vagens associadas a ele.

Um serviço de balanceador de carga em um cluster Kubernetes faz o seguinte:

  • Distribuir cargas de rede e solicitações de serviço em várias instâncias de maneira econômica
  • Permitir a autocaling em resposta a flutuações na demanda.

Como adicionar um balanceador de carga a um cluster de Kubernetes?

Um balanceador de carga pode ser adicionado a um cluster Kubernetes de duas maneiras:

Pelo uso de um arquivo de configuração:
O balanceador de carga está ativado especificando o loadBalancer no campo Tipo do arquivo de configuração de serviço. O provedor de serviços em nuvem gerencia e guia esse balanceador de carga, que envia tráfego para pods de back-end. O arquivo de configuração de serviço deve se parecer com o seguinte:

APIVERSION: V1
Tipo: serviço
Metadados:
Nome: New-ServiceOne
especificação:
Seletor:
App: NewApp
Portas:
- Porta: 5678
Targetport: 8456
Tipo: LoadBalancer

Os usuários podem atribuir um endereço IP ao balanceador de carga, dependendo do provedor de nuvem. A tag de carga especificada pelo usuário pode ser usada para configurar isso. Se o usuário não fornecer um endereço IP, o balanceador de carga receberá um endereço IP efêmero. Se o usuário especificar um endereço IP que o provedor de nuvem não suportar, ele é desconsiderado.

O.status.A propriedade LoadBalancer deve ser usada se o usuário quiser adicionar mais informações ao serviço de balanceador de carga. Veja a imagem abaixo para definir o endereço IP da entrada.

status:
balanceador de carga:
entrada:
- IP: 192.154.0.1

Usando Kubectl:
O parâmetro -type = loadBalancer: também pode ser usado para construir um balanceador de carga com o comando kubectl expo.

$ KUBECTL Exponha PO novo --port = 5678--Target-port = 8456 \
--Nome = New-ServiceOne --Type = LoadBalancer

O comando acima cria o novo serviço e conecta o novo pod a uma porta específica.

O que é balanceadores de carga de coleta de lixo?

Quando um serviço do tipo LoadBalancer é destruído, os recursos de balanceador de carga associados no provedor de nuvem devem ser limpos o mais rápido possível. No entanto, é sabido que os recursos da nuvem podem ficar órfãos se o serviço relacionado for removido em uma variedade de situações. Para impedir que isso ocorra, a proteção do Finalizador para o Service LoadBalancers foi desenvolvida.

Se um serviço for do tipo LoadBalancer, o Controlador de Serviço adicionará um Finalizador denominado Serviço.Kubernetes.io/carga-balanceador limpeza para ele. O Finalizador será apagado depois que o recurso de balanceador de carga já foi limpo. Mesmo em casos extremos, como quando o controlador de serviço trava, isso impede que os recursos de balanceador de carga pendurados.

Maneiras diferentes de configurar o balanceador de carga em Kubernetes

Para lidar.

Robin redondo
Uma abordagem Round Robin distribui novas conexões a servidores qualificados em ordem seqüencial. Essa técnica é estática, o que significa que não leva em consideração a velocidade específica do servidor ou as preocupações de desempenho, portanto, um servidor lento e um servidor de melhor desempenho receberão o mesmo número de conexões. Como resultado, o balanceamento redondo de carga de Robin nem sempre é a melhor escolha para o tráfego de produção e é mais adequado para testes simples de carga.

Kube-Proxy L4 Round Robin
O Kube-Proxy coleta e rotas todas as solicitações entregues ao Serviço Kubernetes.

Por ser um processo e não um proxy, ele usa um IP virtual para o serviço. Então adiciona arquitetura e complexidade ao roteamento. Cada solicitação aumenta a latência e o problema fica pior à medida que o número de serviços cresce.

L7 Round Robin
Às vezes, o roteamento de tráfego diretamente para os pods evita o próxio de kube. Isso pode ser realizado com um gateway da API do Kubernetes que emprega um proxy L7 para lidar com solicitações entre as vagens de Kubernetes disponíveis.

Hash consistente/anel hash
O balanceador de carga Kubernetes usa um hash baseado em uma chave definida para distribuir novas conexões nos servidores usando técnicas de hash consistentes. Essa estratégia é melhor para lidar com grandes servidores de cache com conteúdo dinâmico.

Como a tabela de hash completa não precisa ser recalculada sempre que um servidor é adicionado ou retirado, essa abordagem é consistente.

Menos servidores
Em vez de alocar todas as solicitações entre todos os servidores, a menor técnica do servidor classifica a menor quantidade de servidores obrigatórios para atender à carga atual do cliente. Servidores excessivos podem ser recusados ​​ou desprovisionados por enquanto.

Esta técnica opera rastreando variações em latência de resposta quando a carga varia de acordo com a capacidade do servidor.

Menos conexões
Este algoritmo de balanceamento de carga em Kubernetes rotas solicitações do cliente para o servidor de aplicativos com o menor número de conexões ativas no momento da solicitação. Este método utiliza carga de conexão ativa na conta, pois um servidor de aplicativos pode ser sobrecarregado devido a conexões de vida mais longa se os servidores de aplicativos tiverem requisitos iguais.

Conclusão

Este artigo teve como objetivo dar aos leitores uma compreensão abrangente do balanceamento de carga de Kubernetes, cobrindo sua arquitetura e vários métodos de provisionamento para um cluster de Kubernetes. O balanceamento de carga é uma parte importante da execução de um cluster Kubernetes eficaz e é um dos principais empregos de um administrador de Kubernetes. As tarefas podem ser agendadas com eficiência em vagens e nós do cluster usando um balanceador de carga fornecido de maneira ideal, permitindo alta disponibilidade, recuperação rápida e baixa latência para aplicações de contêiner operando em Kubernetes.