Implementar uma arquitetura hub-spoke para gerenciamento de fleet de clusters EKS usando as três tecnologias juntas: kro para orquestrar a criação dos clusters, ACK para provisionar os recursos AWS, e ArgoCD EKS Capability para bootstrapar e gerenciar os addons via GitOps.
O exemplo oficial do kro demonstra exatamente esse padrão: um cluster de gerenciamento (hub) com as três EKS Capabilities habilitadas provisiona e bootstrapa clusters de workload (spokes) de forma totalmente declarativa e GitOps.
Habilite ACK, kro e ArgoCD como EKS Capabilities no cluster hub. Cada uma requer a IAM Role criada pelo Terraform na fase anterior.
Dica: O ArgoCD requer AWS Identity Center configurado na conta. Você precisará do ARN da instância IDC e do ID do usuário que terá acesso admin ao ArgoCD.
Obtenha a URL do ArgoCD, gere um token de acesso e registre o repositório GitOps. Em seguida, aplique o App of Apps que inicia toda a automação GitOps.
Configure as contas spoke com as IAM Roles necessárias para o ACK cross-account, declare o cluster spoke no repositório GitOps e observe o kro + ACK provisionando tudo automaticamente.
Dica: Mesmo usando uma única conta, o script create_ack_workload_roles.sh precisa ser executado - ele cria as roles que o ACK usa para provisionar recursos na conta spoke.
# kro orquestrando a criaçãokubectl get EksClusterwithvpcs -A
# ACK criando recursos AWSkubectl get vpcs.ec2.services.k8s.aws -A
kubectl get clusters.eks.services.k8s.aws -A
Quando STATE=ACTIVE, conectar ao spoke e validar addons:
exportAWS_PROFILE=spoke_account1
aws eks update-kubeconfig --name workload-cluster1 --region us-east-1
kubectl get pods -A
Você implementou uma plataforma completa de fleet management onde um único cluster hub, com três EKS Capabilities gerenciadas pela AWS, provisiona e bootstrapa clusters de workload de forma totalmente declarativa.
Problemas comuns que clientes encontram nessa arquitetura:
Troubleshoot issues with ACK capabilities - Capability ACTIVE mas recursos não sendo criados, recursos criados na AWS mas não aparecendo no Kubernetes, problemas de cross-account