Esta página descreve como configurar o equilíbrio de carga baseado na utilização para os serviços do GKE. Esta página destina-se às equipas de infraestrutura e aplicações, e aos administradores do GKE responsáveis por configurar e gerir a distribuição de tráfego para os respetivos serviços do GKE.
Pode usar equilibradores de carga baseados na utilização para otimizar o desempenho e a disponibilidade das aplicações distribuindo o tráfego de forma inteligente com base na utilização de recursos em tempo real dos seus pods do GKE.
Antes de ler esta página, certifique-se de que conhece o equilíbrio de carga baseado na utilização para os serviços do GKE e como funciona o equilíbrio de carga baseado na utilização.
Preços
O equilíbrio de carga baseado na utilização é uma capacidade do GKE Gateway que está disponível sem custos adicionais. Os preços do Cloud Load Balancing e do GKE continuam a aplicar-se.
Quotas
O balanceamento de carga baseado na utilização não introduz novas quotas, embora todas as quotas do Cloud Load Balancing e de outros serviços dependentes continuem a aplicar-se.
Antes de começar
Antes de começar, certifique-se de que realizou as seguintes tarefas:
- Ative a API Google Kubernetes Engine. Ative a API Google Kubernetes Engine
- Se quiser usar a CLI gcloud para esta tarefa,
instale-a e, em seguida,
inicialize-a. Se instalou anteriormente a CLI gcloud, execute
gcloud components update
para obter a versão mais recente.
- Reveja os requisitos do controlador de gateway.
- Reveja as limitações.
Requisitos do GKE Gateway Controller
O balanceamento de carga baseado na utilização para serviços do GKE requer o seguinte:
- Versão 516.0.0 ou posterior da CLI Google Cloud.
- Versão 1.33.1-gke.1918000 ou posterior do GKE no canal RAPID.
- A API Gateway tem de estar ativada no seu cluster.
- O perfil de HPA de desempenho tem de estar ativado no seu cluster.
- A API Autoscaling tem de estar ativada no seu Google Cloud projeto.
- As contas de serviço do nó têm de poder escrever na API Autoscaling.
O balanceamento de carga baseado na utilização para serviços do GKE suporta o seguinte:
- Serviços do GKE de cluster único e vários clusters que funcionam como back-ends para um balanceador de carga gerido pela Google Cloud.
- Todas as edições do GKE (Standard, Autopilot e Enterprise).
- Todos os Google Cloud balanceadores de carga de aplicações, exceto os balanceadores de carga de aplicações clássicos.
Limitações
O balanceamento de carga baseado na utilização para serviços do GKE tem as seguintes limitações.
- A única métrica de utilização de recursos suportada é a CPU.
- Os equilibradores de carga de rede de passagem ou proxy não são suportados.
- Apenas a API Gateway é suportada. As APIs Service e Ingress não são suportadas.
- O equilíbrio de carga baseado na utilização não funciona bem se o seu tráfego for muito instável. O reequilíbrio do tráfego demora até 30 segundos quando os pods atingem a respetiva utilização máxima. Espera-se que o sinal de utilização aumente com o tráfego recebido, mas este atraso significa que o equilíbrio de carga baseado na utilização precisa de tempo para se ajustar. Para um desempenho ideal, o equilíbrio de carga baseado na utilização funciona melhor em ambientes com fluxos de tráfego suaves e previsíveis.
- Os clusters de pilha dupla (clusters com um endereço IPv4 e um endereço IPv6) não são suportados.
- O equilíbrio de carga baseado na utilização pode demorar até 30 segundos a atualizar e
ajustar a distribuição de tráfego após alterações de configuração, como modificar
ou remover o campo dryRun num
GCPBackendPolicy
. Este atraso é um comportamento conhecido ao nível do sistema. Como tal, esta funcionalidade é mais adequada para aplicações com padrões de tráfego relativamente estáveis que podem tolerar esta latência de atualização.
Por predefinição, o equilíbrio de carga baseado na utilização está desativado para os seus serviços do GKE. Tem de a ativar explicitamente. Se não definir um limite de utilização máximo, o sistema usa por predefinição uma utilização de 80% por ponto final.
O objetivo da configuração do equilíbrio de carga baseado na utilização é otimizar a distribuição do tráfego para que os pods de back-end possam gerir eficientemente a respetiva carga de trabalho, o que melhora o desempenho da aplicação e a utilização de recursos.
Ative o balanceamento de carga baseado na utilização e o perfil de HPA de desempenho
Antes de configurar o equilíbrio de carga baseado na utilização, certifique-se de que o seu cluster do GKE suporta as funcionalidades necessárias. O equilíbrio de carga baseado na utilização usa métricas personalizadas, como a CPU, para tomar decisões de encaminhamento mais inteligentes. Estas decisões dependem do seguinte:
- API Gateway, que permite políticas ao nível do serviço através de
GCPBackendPolicy
. - O perfil HPA de desempenho, que permite que as cargas de trabalho sejam dimensionadas de forma mais rápida e agressiva através de sinais da CPU.
Ative a API Gateway e o perfil de HPA de desempenho
Autopilot
A API Gateway e o perfil HPA de desempenho estão disponíveis por predefinição num cluster do Autopilot.
Padrão
Para criar um novo cluster padrão com o perfil HPA de desempenho e a API Gateway ativada, execute o seguinte comando:
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--cluster-version=CLUSTER_VERSION \
--gateway-api=standard \
--hpa-profile=performance \
--release-channel=rapid
Substitua o seguinte:
CLUSTER_NAME
com o nome do novo cluster.LOCATION
com a região ou zona do Compute Engine para o seu cluster.PROJECT_ID
com o ID do seu projeto.CLUSTER_VERSION
com a versão do GKE, que tem de ser 1.33.1-gke.1918000 ou posterior.
Para ativar o perfil de HPA de desempenho e a API Gateway num cluster padrão do GKE existente, use o seguinte:
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--gateway-api=standard \
--hpa-profile=performance \
--release-channel=rapid
Substitua o seguinte:
CLUSTER_NAME
com o nome do novo cluster.LOCATION
com a região ou zona do Compute Engine para o seu cluster.PROJECT_ID
com o ID do seu projeto.
Para mais informações sobre o perfil de HPA de desempenho, consulte o artigo Configure o perfil de HPA de desempenho.
Configure o balanceamento de carga baseado na utilização
Quando o cluster estiver pronto, defina uma política que direcione a forma como o tráfego é encaminhado com base na utilização do back-end. Tem de usar a API Kubernetes Gateway
através de GCPBackendPolicy
para a configuração.
Pré-requisitos
Antes de configurar o equilíbrio de carga baseado na utilização através da API Gateway, certifique-se de que o seu cluster do GKE cumpre os seguintes requisitos:
Implemente uma aplicação: certifique-se de que implementa uma aplicação Kubernetes usando um recurso de implementação. Para mais informações, consulte o artigo Implemente uma aplicação num cluster do GKE.
Por exemplo, um manifesto de implementação típico pode incluir uma secção de recursos como esta:
apiVersion: apps/v1 kind: Deployment metadata: name: store-v1 spec: # ... other deployment configurations ... template: # ... other template configurations ... spec: containers: - name: your-container-name image: your-image ports: - containerPort: 8080 resources: limits: cpu: 100m memory: 45Mi requests: cpu: 100m memory: 45Mi
Exponha a aplicação através de um serviço: tem de expor a aplicação através de um serviço do Kubernetes. Para mais informações sobre o funcionamento dos serviços e como os configurar, consulte o artigo Compreender os serviços do Kubernetes.
Use um Application Load Balancer baseado na API Gateway: exponha o serviço usando um Application Load Balancer gerido pelo GKE que esteja configurado através da API Gateway. Para mais informações, consulte o artigo Implementar gateways.
Crie um GCPBackendPolicy
para o balanceamento de carga baseado na CPU
Esta configuração permite que o GKE distribua o tráfego dinamicamente com base na utilização da CPU em tempo real de cada pod de back-end.
Para ativar o equilíbrio de carga baseado na utilização para os serviços do GKE, use o recurso personalizado GCPBackendPolicy
da API Kubernetes Gateway.
O recurso personalizado GCPBackendPolicy
permite-lhe definir declarativamente o comportamento de equilíbrio de carga no seu cluster do Kubernetes. Ao especificar as métricas de utilização da CPU, controla a forma como o tráfego é distribuído pelos back-ends com base na respetiva utilização atual de recursos. Esta abordagem ajuda a manter o desempenho da aplicação, a evitar a sobrecarga de Pods individuais e a melhorar a fiabilidade e a experiência do utilizador da aplicação.
Guarde o seguinte manifesto de exemplo como
my-backend-policy.yaml
:kind: GCPBackendPolicy apiVersion: networking.gke.io/v1 metadata: name: my-backend-policy namespace: team-awesome spec: targetRef: group: "" kind: Service name: super-service default: balancingMode: CUSTOM_METRICS customMetrics: - name: gke.cpu dryRun: false
Tenha em conta o seguinte:
spec.targetRef.kind: Service
: segmenta um serviço Kubernetes padrão no mesmo cluster.spec.targetRef.kind: ServiceImport
: segmenta um serviço de outro cluster numa configuração de vários clusters.balancingMode: CUSTOM_METRICS
: ativa o balanceamento de carga baseado em métricas personalizadas.name: gke.cpu
: especifica a utilização da CPU como a métrica para a distribuição de tráfego.
Se o campo
maxUtilizationPercent
não for especificado, o limite de utilização predefinido é de 80%. O tráfego é reequilibrado quando um back-end excede a utilização de 80% da CPU.Aplique o manifesto de exemplo ao seu cluster:
kubectl apply -f my-backend-policy.yaml
Ao basear a distribuição de tráfego na utilização da CPU em tempo real, otimiza automaticamente o desempenho. Esta ação ajuda a evitar a sobrecarga em pods individuais.
Considerações importantes para dryRun
e balancingMode
Quando configura GCPBackendPolicy
com métricas personalizadas, considere a interação entre balancingMode
e o campo dryRun
na definição de customMetrics
. Esta interação determina como o equilibrador de carga usa as suas métricas personalizadas. Para mais informações sobre métricas personalizadas e as respetivas restrições, incluindo as relacionadas com modos de equilíbrio, consulte o artigo Métricas personalizadas do Cloud Load Balancing.
balancingMode: CUSTOM_METRICS
- Para distribuir o tráfego com base numa métrica personalizada, pelo menos uma métrica personalizada na lista
customMetrics
tem de ter definido comodryRun
.false
Esta definição indica ao equilibrador de carga que use ativamente essa métrica para tomar decisões de reequilíbrio. - Pode incluir outras métricas personalizadas com
dryRun: true
, juntamente com métricas que não sejam de teste. Isto permite-lhe testar ou monitorizar novas métricas, como a utilização da GPU, sem que estas afetem o tráfego, enquanto outra métrica, como a utilização da CPU comdryRun: false
, controla o equilíbrio. - Se
balancingMode
forCUSTOM_METRICS
e todas as métricas personalizadas tiveremdryRun
definido comotrue
, recebe um erro. Por exemplo:gceSync: generic::invalid_argument: Update: Invalid value for field 'resource.backends[0]': '...'. CUSTOM_METRICS BalancingMode requires at least one non-dry-run custom metric.
o equilibrador de carga precisa de uma métrica ativa para tomar decisões.
- Para distribuir o tráfego com base numa métrica personalizada, pelo menos uma métrica personalizada na lista
balancingMode
éRATE
ou outros modos de métricas não personalizadas- Se o equilíbrio de carga se basear em critérios que não sejam métricas personalizadas, como
RATE
para pedidos por segundo, pode definirdryRun: true
para todas as métricas personalizadas. Isto permite-lhe monitorizar métricas personalizadas sem afetar o mecanismo de equilíbrio principal. Isto é útil para testar novas métricas personalizadas antes de mudar o seubalancingMode
paraCUSTOM_METRICS
.
- Se o equilíbrio de carga se basear em critérios que não sejam métricas personalizadas, como
Monitorizar métricas personalizadas
- Depois de configurar o
GCPBackendPolicy
e começar a enviar tráfego para a sua aplicação, as métricas personalizadas, comogke.cpu
, demoram algum tempo a aparecer no explorador de métricas. - Para que as métricas personalizadas sejam visíveis e estejam ativas no explorador de métricas, tem de haver tráfego real a fluir através do back-end que a política monitoriza. Se não houver tráfego, a métrica só pode ser visível em "Recursos inativos" no explorador de métricas.
- Depois de configurar o
Defina um limite de utilização da CPU personalizado
Por predefinição, o GKE distribui o tráfego para longe dos back-ends que excedem 80% de utilização da CPU. No entanto, determinadas cargas de trabalho podem tolerar uma utilização da CPU mais alta ou mais baixa antes de exigirem a redistribuição do tráfego. Pode personalizar este limite usando o campo maxUtilizationPercent
no recurso GCPBackendPolicy
.
Para configurar um serviço do GKE de modo que permita que os back-ends usem até 70% da CPU antes de o reequilíbrio ser acionado, guarde o seguinte manifesto de exemplo como
my-backend-policy.yaml
:kind: GCPBackendPolicy apiVersion: networking.gke.io/v1 metadata: name: my-backend-policy namespace: team-awesome spec: targetRef: group: "" kind: Service name: super-service default: balancingMode: CUSTOM_METRICS customMetrics: - name: gke.cpu maxUtilizationPercent: 70
Tenha em conta o seguinte:
- O campo
maxUtilizationPercent
aceita valores de 0 a 100. Um valor de 100 significa que um back-end pode usar a sua capacidade total da CPU antes de o tráfego ser reequilibrado. - Para cargas de trabalho sensíveis à latência que requerem descarregamento antecipado, use um limite inferior.
- Para cargas de trabalho concebidas para serem executadas perto da capacidade total, use um limite mais elevado.
- Para serviços em vários clusters, o
spec.targetRef.kind
tem de serServiceImport
e ogroup
tem de sernet.gke.io
.
- O campo
Aplique o manifesto de exemplo ao seu cluster:
kubectl apply -f my-backend-policy.yaml
Ao ativar um limite de utilização da CPU personalizado, pode controlar a distribuição do tráfego com base na utilização da CPU do back-end.
(Opcional) Ative o modo de teste
O modo de execução de ensaio monitoriza a utilização de recursos dos seus pods sem alterar a distribuição do tráfego. Quando o modo de teste é ativado, as métricas são exportadas para o Cloud Monitoring, mas o Cloud Load Balancing ignora estas métricas e usa o comportamento de balanceamento de carga predefinido.
Para ativar o modo de teste para o seu serviço GKE, guarde o seguinte manifesto de exemplo como
my-backend-policy.yaml
:kind: GCPBackendPolicy apiVersion: networking.gke.io/v1 metadata: name: my-backend-policy spec: targetRef: group: "" kind: Service name: store-v1 default: balancingMode: RATE maxRatePerEndpoint: 10 customMetrics: - name: gke.cpu dryRun: true
Aplique o manifesto de exemplo ao seu cluster:
kubectl apply -f my-backend-policy.yaml
Quando ativa o modo de teste, ocorre o seguinte:
O Cloud Load Balancing ignora as métricas de utilização da CPU e usa o comportamento de balanceamento de carga predefinido.
As métricas continuam a ser exportadas para o Cloud Monitoring em
network.googleapis.com/loadbalancer/backend/lb_custom_metrics
.
Depois de rever as métricas, remova o campo dryRun
do seu GCPBackendPolicy
e volte a aplicar a configuração. Se ocorrerem problemas depois de desativar o
teste de execução, reative-o adicionando dryRun: true
novamente à política.
Valide a política
Para confirmar que o GCPBackendPolicy
é aplicado ao seu serviço GKE
e para verificar se os controladores GKE reconhecem a política, execute
o seguinte comando:
kubectl describe gcpbackendpolicy POLICY_NAME -n NAMESPACE
O resultado é semelhante ao seguinte:
Name: <your policy name>
Namespace: <your namespace>
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1
Kind: GCPBackendPolicy
Metadata:
Creation Timestamp: ...
Generation: 1
Resource Version: …
UID: …
Spec:
Default:
Balancing Mode: CUSTOM_METRICS
Custom Metrics:
Dry Run: false
Name: gke.cpu
Target Ref:
Group:
Kind: Service
Name: super-service
Status:
Conditions:
Last Transition Time: …
Message:
Reason: Attached
Status: True
Type: Attached
Events:
…
Configure o equilíbrio de carga baseado na utilização através das APIs Compute Engine
Recomendamos que use a API Kubernetes Gateway para configurar o equilíbrio de carga baseado na utilização para os seus serviços do GKE.
No entanto, pode preferir usar as APIs Compute Engine ou o Terraform para gerir os seus equilibradores de carga diretamente. Se escolher esta abordagem, tem de ativar o equilíbrio de carga baseado na utilização ao nível do BackendService.
Para um BackendService existente, ative o balanceamento de carga baseado na utilização e anexe um grupo de pontos finais da rede (NEG), my-lb-neg, executando o seguinte comando:
gcloud compute backend-services add-backend MY_BACKEND_SERVICE \ --network-endpoint-group my-lb-neg \ --network-endpoint-group-zone=asia-southeast1-a \ --global \ --balancing-mode=CUSTOM_METRICS \ --custom-metrics 'name="gke.cpu",maxUtilization=0.8'
substitua o seguinte:
MY_BACKEND_SERVICE
com o nome do seu BackendService.CUSTOM_METRICS
comCUSTOM_METRICS
.
Para atualizar as definições de equilíbrio de carga baseado na utilização para uma entrada de back-end existente no seu BackendService onde já está anexado um NEG, execute o seguinte comando:
gcloud compute backend-services update-backend MY_BACKEND_SERVICE \ --network-endpoint-group my-lb-neg \ --network-endpoint-group-zone=asia-southeast1-a \ --global \ --balancing-mode=CUSTOM_METRICS \ --custom-metrics 'name="gke.cpu",maxUtilization=0.8'
substitua o seguinte:
MY_BACKEND_SERVICE
com o nome do seu BackendService.CUSTOM_METRICS
comCUSTOM_METRICS
.
Desative o balanceamento de carga baseado na utilização para um serviço do GKE
Para desativar o equilíbrio de carga baseado na utilização nos seus serviços do GKE, siga estes passos:
- Se quiser manter a política para outras definições, remova os campos
balancingMode
ecustomMetrics
do seuGCPBackendPolicy
. - Se já não precisar do
GCPBackendPolicy
, pode eliminá-lo. - Se usar as APIs Compute Engine, altere novamente as flags
--balancing-mode
e--custom-metrics
do seu serviço de back-end.