Garantir alta disponibilidade em clusters Kubernetes de missão crítica exige resiliência física. Embora a AWS ofereça arquiteturas Multi-AZ com excelente estabilidade, falhas severas localizadas em uma única Zona de Disponibilidade (Availability Zone) ainda podem afetar o desempenho de aplicações distribuídas.
A combinação do orquestrador de nós de alto desempenho Karpenter com o AWS Route 53 Application Recovery Controller (ARC) Zonal Shift permite que equipes de engenharia retirem cargas de trabalho de zonas em degradação de forma automatizada e em minutos.
Como Funciona o Zonal Shift no EKS
O ARC Zonal Shift permite que você indique à AWS a intenção de desviar o tráfego de uma AZ específica. Ao fazer isso, o Karpenter responde destruindo nós localizados nessa zona e provisionando novas instâncias nas zonas saudáveis remanescentes.
graph TD
subgraph Cluster EKS
AZ-A[AZ us-east-1a: Saudável] --> Node1[Karpenter Node]
AZ-B[AZ us-east-1b: Instável] -.->|Zonal Shift Acionado| Terminate[Esvaziar Nós]
AZ-C[AZ us-east-1c: Saudável] --> Node2[Karpenter Node]
end
Terminate -->|Karpenter Reprovisiona| AZ-A
Terminate -->|Karpenter Reprovisiona| AZ-C
Configuração do Karpenter NodePool para Multi-AZ
Para garantir que o Karpenter possa readequar a infraestrutura de nós sem restrições, configure o NodePool limitando a zona instável durante um evento de failover. Veja uma configuração modelo do Karpenter:
apiVersion: karpenter.sh/v1beta1
kind: NodePool
metadata:
name: default
spec:
template:
spec:
requirements:
- key: kubernetes.io/arch
operator: In
values: ["amd64"]
- key: karpenter.sh/capacity-type
operator: In
values: ["on-demand"]
- key: topology.kubernetes.io/zone
operator: In
values: ["us-east-1a", "us-east-1c"] # us-east-1b evacuada temporariamente
O Fluxo de Evacuação via AWS CLI
Durante um evento de instabilidade de rede ou energia em uma AZ, a evacuação pode ser iniciada de maneira manual (via console/CLI) ou automatizada (através de alarmes de monitoramento sintético do CloudWatch).
# Inicia um desvio de tráfego de 3 horas para um recurso de load balancer
aws arc-zonal-shift start-zonal-shift \
--away-from "us-east-1b" \
--expires-in "3h" \
--resource-identifier "arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/app/my-alb/12345" \
--comment "Evacuação preventiva de AZ devido a flutuações de rede"
O uso de Karpenter e Zonal Shift reduz drasticamente o tempo de recuperação (RTO), passando de horas (onde aplicações aguardavam timeouts de rede) para minutos, onde a infraestrutura é dinamicamente reconstruída fora do raio de impacto da falha.