Quando os pods de gateway do ASM compartilham nós com cargas de trabalho de aplicações, a contenção de recursos pode degradar o desempenho do gateway ou causar falhas de agendamento durante picos de tráfego. Dedicar nós específicos aos pods de gateway isola o tratamento do tráfego de entrada da lógica de negócios, evita a competição por recursos e estabelece uma fronteira de segurança clara.
As etapas a seguir utilizam rótulos de nó, taints e afinidade de nó para fixar os pods de gateway do ASM em nós específicos e impedir que outras cargas de trabalho sejam executadas nesses nós.
Como funciona
O agendamento dedicado combina três mecanismos do Kubernetes:
|
Mecanismo |
Finalidade |
|
Rótulo de nó |
Identifica o nó de destino para que as regras de afinidade possam selecioná-lo |
|
Taint |
Repele todos os pods sem tolerância correspondente, mantendo outras cargas de trabalho fora do nó |
|
Afinidade de nó + tolerância |
Atrai os pods de gateway para o nó rotulado e permite que eles tolerem o taint |
Taints e tolerâncias atuam em conjunto para evitar que o sistema agende pods em nós inadequados:
Se um pod não tolerar um taint específico, o nó com esse taint não aceitará o pod e bloqueará seu agendamento.
Se um pod tolerar um taint específico, ele poderá ser agendado em um nó com o taint correspondente, mas isso não é obrigatório.
Sem o taint, outros pods ainda podem ser alocados no nó rotulado. Sem a afinidade de nó, os pods de gateway podem ser agendados em outros locais. A combinação dos três mecanismos garante que os pods de gateway sejam executados exclusivamente no nó designado.
Pré-requisitos
Antes de começar, verifique se você tem:
Um cluster adicionado à instância do ASM
kubectlconfigurado para se conectar ao cluster
Etapa 1: Rotular o nó de destino
Adicione um rótulo ao nó onde os pods de gateway devem ser executados. O agendador utiliza esse rótulo na regra de afinidade de nó configurada na Etapa 3.
-
Liste todos os nós no cluster:
kubectl get nodes -
Adicione um rótulo ao nó de destino:
# Syntax kubectl label nodes <node-name> <label-key>=<label-value> # Example kubectl label nodes node1 mykey4pod=asmgatewaySubstitua os seguintes espaços reservados:
Espaço reservado
Descrição
Exemplo
<node-name>Nome do nó de destino obtido na saída de
kubectl get nodesnode1<label-key>Chave de rótulo personalizada
mykey4pod<label-value>Valor de rótulo personalizado
asmgateway -
Verifique o rótulo:
kubectl get nodes --show-labels | grep mykey4pod
Etapa 2: Aplicar taint ao nó de destino
Aplique um taint ao nó para repelir pods sem tolerância correspondente. Essa ação mantém as cargas de trabalho da aplicação fora do nó dedicado ao gateway.
kubectl taint nodes node1 mykey=myvalue:NoSchedule
Este taint é composto por três elementos:
|
Componente |
Valor |
Significado |
|
Chave |
|
Identifica o taint |
|
Valor |
|
Combinado com a chave para formar a identidade do taint |
|
Efeito |
|
Impede o agendamento de novos pods sem tolerância correspondente neste nó. Pods existentes não são removidos. |
Nota: O Kubernetes suporta três efeitos de taint:
|
Efeito |
Comportamento |
|
|
Bloqueia novos pods que não toleram o taint. Os pods existentes permanecem. |
|
|
Versão flexível do |
|
|
Bloqueia novos pods e remove os pods existentes que não toleram o taint. |
Para isolamento de nós de gateway, o efeito NoSchedule geralmente é suficiente. Utilize NoExecute caso também precise remover pods existentes que não sejam de gateway do nó.
Etapa 3: Configure afinidade de nó e tolerâncias no gateway do ASM
Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha ASM Gateways > Ingress Gateway.
Na página Ingress Gateway, localize o gateway de destino e clique em YAML.
-
Na caixa de diálogo Edit, adicione o bloco abaixo ao campo
spece clique em OK.Campo
Descrição
requiredDuringSchedulingIgnoredDuringExecutionRegra de afinidade rígida — o agendador aloca pods apenas em nós correspondentes. Use
preferredDuringSchedulingIgnoredDuringExecutionpara uma regra flexível que permita fallback para outros nós.matchExpressions.key/valuesDeve corresponder ao rótulo adicionado na Etapa 1 (
mykey4pod=asmgateway).tolerations.key/value/effectDeve corresponder ao taint adicionado na Etapa 2 (
mykey=myvalue:NoSchedule).affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: mykey4pod operator: In values: - asmgateway tolerations: - key: "mykey" operator: "Equal" value: "myvalue" effect: "NoSchedule"
Etapa 4: Verifique o resultado do agendamento
Confirme se os pods de gateway estão em execução no nó dedicado.
Opção A: Usar kubectl
kubectl get pods -n istio-system -o wide | grep <gateway-name>
A saída será semelhante a:
<gateway-name>-xxx 1/1 Running 0 2m 10.x.x.x node1 <none> <none>
A coluna NODE deve exibir node1 (ou o nó rotulado e com taint aplicado).
Opção B: Usar o console do ACK
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, localize o cluster e clique em seu nome. No painel de navegação à esquerda, escolha Workloads > Pods.
Na página Pods, selecione istio-system na lista suspensa Namespace.
Verifique a coluna Node referente aos pods de gateway. O valor deve corresponder ao nó configurado.
Próximos passos
Para distribuir pods de gateway em vários nós dedicados visando maior disponibilidade, aplique rótulos e taints em nós adicionais e inclua seus rótulos no array
matchExpressions.values.Para remover as restrições de agendamento, exclua o rótulo e o taint do nó e remova os blocos
affinityetolerationsdo YAML do gateway.