Ao usar o controlador de Ingress NGINX, os pods que executam o controlador funcionam como pontos de entrada e encaminhadores reais de tráfego. A confiabilidade desses pods determina a confiabilidade geral do controlador. Por padrão, o controlador de Ingress NGINX usa dois pods após a instalação, quantidade suficiente para a maioria dos cenários. Para alcançar alta confiabilidade, controle o número de pods e o método de agendamento.
Pré-requisitos
O controlador de Ingress NGINX está instalado. Para mais informações, consulte Gerencie o componente Nginx Ingress Controller.
Um cliente kubectl está conectado ao cluster ACK. Para mais informações, consulte Conectar-se a um cluster ACK usando kubectl.
Visualize os pods padrão implantados para o controlador de Ingress NGINX
Após a instalação do controlador de Ingress NGINX, uma aplicação que provisiona dois pods é implantada no cluster.
Execute o comando a seguir para visualizar os pods que executam o controlador de Ingress NGINX:
kubectl -n kube-system get pod | grep nginx-ingress-controller
Saída esperada:
nginx-ingress-controller-*****nxs 1/1 Running 0 3h
nginx-ingress-controller-*****9pm 1/1 Running 0 3h
Como garantir alta confiabilidade para o controlador de Ingress NGINX
Por padrão, o controlador de Ingress NGINX usa uma configuração de afinidade que garante a implantação de apenas um pod do controlador por nó. Certifique-se de que o número de pods não exceda o número de nós no cluster.
Aumente o número de pods que executam o controlador
Aumentar o número de pods que executam o controlador previne falhas isoladas em um único pod.
-
Execute o comando
kubectl scalepara escalar horizontalmente o deployment do controlador de Ingress NGINX. O comando a seguir aumenta o número de pods para três.kubectl -n kube-system scale --replicas=3 deployment/nginx-ingress-controllerSaída esperada:
deployment.extensions/nginx-ingress-controller scaled -
Execute o comando a seguir para visualizar os pods que executam o controlador de Ingress NGINX:
kubectl -n kube-system get pod | grep nginx-ingress-controllerSaída esperada:
nginx-ingress-controller-******** 1/1 Running 0 3h nginx-ingress-controller-******** 1/1 Running 0 3h nginx-ingress-controller-******** 1/1 Running 0 33s
Agende pods em nós de alta especificação
Agendar pods em nós de alta especificação evita degradação de desempenho ou evicção devido à insuficiência de recursos no nó.
-
Execute o comando a seguir para visualizar o uso atual de recursos do cluster:
kubectl top nodesSaída esperada:
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% cn-shanghai.********.230 71m 1% 1712Mi 31% cn-shanghai.********.226 63m 1% 1669Mi 30% cn-shanghai.********.229 125m 3% 2545Mi 46% cn-shanghai.********.253 152m 3% 3804Mi 69%A saída mostra os recursos de CPU e memória já utilizados por cada nó. Selecione nós com mais recursos disponíveis para o agendamento.
-
Execute o comando a seguir para adicionar o rótulo
node-role.kubernetes.io/ingress="true"aos nós. No exemplo abaixo, o rótulo é adicionado aos nóscn-shanghai.********.226ecn-shanghai.********.230, que possuem mais recursos de CPU disponíveis.ImportanteO número de nós rotulados deve ser maior ou igual ao número de pods. Se a quantidade de nós rotulados for menor que o número de pods do controlador, alguns pods podem falhar na implantação.
Caso esteja usando um cluster dedicado ACK, não adicione rótulos aos nós Master.
kubectl label nodes cn-shanghai.********.226 cn-shanghai.********.230 node-role.kubernetes.io/ingress="true"Saída esperada:
node/cn-shanghai.********.226 labeled node/cn-shanghai.********.230 labeled -
Execute o comando a seguir para atualize o deployment usado pelo Nginx Ingress Controller. Adicione a configuração nodeSelector para garantir que os pods do controlador sejam implantados apenas em nós com o rótulo
node-role.kubernetes.io/ingress="true".kubectl -n kube-system patch deployment nginx-ingress-controller -p '{"spec": {"template": {"spec": {"nodeSelector": {"node-role.kubernetes.io/ingress": "true"}}}}}'Saída esperada:
deployment.extensions/nginx-ingress-controller patched -
Execute o comando a seguir para visualizar os pods de Ingress implantados nos nós do cluster com o rótulo
node-role.kubernetes.io/ingress="true".kubectl -n kube-system get pod -o wide | grep nginx-ingress-controllerSaída esperada:
nginx-ingress-controller-*****nxs 1/1 Running 0 74m 10.1.117.186 cn-shanghai.********.230 nginx-ingress-controller-*****9pm 1/1 Running 0 74m 10.1.117.172 cn-shanghai.********.226