Em problemas relacionados à performance, o sistema de roteamento pode ser a causa raiz. Este artigo fornece um guia passo a passo para solucionar problemas de performance do NGINX ingress controller.
O NGINX ingress controller gerenciado é um complemento de roteamento que permite direcionar tráfego HTTP e HTTPS para aplicações executando em um cluster Azure Kubernetes Service (AKS).
Em problemas relacionados à performance, o sistema de roteamento pode ser a causa raiz. Este artigo fornece um guia passo a passo para solucionar problemas de performance do NGINX ingress controller.
Pré-requisitos
Antes de começar, certifique-se de ter as seguintes ferramentas instaladas:
- Kubernetes CLI (
kubectl
): Use o Azure CLI para instalar executando o comandoaz aks install-cli
.
Sintomas Comuns
Sintoma | Descrição |
---|---|
Erros de Gateway HTTP | Códigos de erro como 502, 504 podem indicar um problema de exaustão do NGINX. |
Alta Diferença no Tempo de Resposta | Diferença significativa entre o tempo de resposta do seu serviço e o tempo de resposta fim a fim. Existe uma latência comum adicionada pelo NGINX, mas quando é muito grande, pode indicar exaustão do NGINX. |
Passo 1: Verifique o Comportamento do HPA
A razão mais comum para problemas de performance no NGINX é exaustão de CPU. Durante picos de carga no sistema, uma boa abordagem é observar o comportamento do HPA. Por padrão, o plugin de roteamento cria um namespace chamado app-routing-system
.
-
Obtenha o nome do HPA:
kubectl get hpa -n app-routing-system
-
Observe o comportamento do HPA:
kubectl get hpa <HPA_NAME> -n app-routing-system -w
-
Avalie o resultado:
$ kubectl get hpa <HPA_NAME> -n app-routing-system -w
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE nginx Deployment/nginx cpu: 83%/70% 1 2 1 77m nginx Deployment/nginx cpu: 83%/70% 1 2 2 77m nginx Deployment/nginx cpu: 106%/70% 1 2 2 79m nginx Deployment/nginx cpu: 133%/70% 1 2 2 80m
A coluna TARGETS mostra o limite de CPU onde o HPA
irá acionar o aumento de replicas. Você deve interpretar esse comportamento. Existem algumas possibilidades:
- O
HPA
atingiu o número máximo de pods. - Não há nodes disponíveis para agendar os pods.
Passo 2: Procure por Pods em Estado Pending
Se no passo anterior você viu que o NGINX HPA
não atingiu o número máximo de pods, o kube-scheduler pode estar tendo dificuldades para encontrar nodes disponíveis para agendar os pods do NGINX
.
-
Obtenha Pods em Pending:
kubectl get pod --field-selector=status.phase=Pending -n app-routing-system
Se houver pods em Pending, o cluster provavelmente está enfrentando um problema de exaustão de recursos. Nesse caso, consulte Solucionar erros do agendador de pods no Azure Kubernetes Service.
Passo 3: Verifique se Existem Limites Aplicados ao Deployment do NGINX
Qualquer configuração incorreta nos limites ou requests de recursos do NGINX
pode fazer com que o HPA
escale mais pods do que o necessário.
-
Descreva o Deployment do NGINX:
kubectl describe deploy nginx -n app-routing-system
-
Verifique Requests e Limits:
$ kubectl describe deploy nginx -n app-routing-system Name: nginx .... Selector: app=nginx .... Pod Template: .... Containers: controller: ... Limits: ... Requests: ...
Solução
Por padrão, a versão atual do NGINX ingress controller não define limites para os pods do NGINX e define requests 500m
de CPU, que é usado pelo HPA
. Não é recomendado alterar esses valores diretamente na definição do deployment.
Se o seu HPA
está atingindo o número máximo de pods e os requests e limits do deployment permanecem inalterados, você deve configurar o custom resource definition (CRD) chamado NginxIngressController.
Opções de Configuração
As opções de configuração abaixo impactam diretamente o comportamento do HPA
:
Propriedade | Tipo | Descrição | Obrigatório | Padrão |
---|---|---|---|---|
scaling | objeto | Configuração para escalonamento do controller. Contém propriedades aninhadas. | Não | - |
maxReplicas | inteiro | Limite superior de réplicas. | Não | 100 |
minReplicas | inteiro | Limite inferior de réplicas. | Não | 2 |
threshold | string | Limite de escalonamento definindo quão agressivo será o scaling. Opções: rapid , steady , balanced . | Não | balanced |
Como Aplicar a Configuração
Siga os passos abaixo para aplicar a configuração:
-
Edite o CRD NginxIngressController:
kubectl edit nginxingresscontroller -n app-routing-system
-
Adicione ou modifique a configuração de scaling:
spec: scaling: maxReplicas: 10 minReplicas: 2 threshold: "balanced"
-
Salve e saia do editor para aplicar as alterações.
-
Verifique as alterações:
kubectl get hpa -n app-routing-system
O HPA será atualizado automaticamente com base na nova configuração, e o NGINX ingress controller irá escalar conforme os parâmetros especificados.