

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Ative o Amazon EKS Auto Mode em todos os clusters EKS usando GitHub ações
<a name="enable-eks-auto-mode-using-github-actions"></a>

*Urbija Goswami e Anugrah Lakra, da Amazon Web Services*

## Resumo
<a name="enable-eks-auto-mode-using-github-actions-summary"></a>

Os clusters do [Amazon Elastic Kubernetes Service (EKS](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/amazon-elastic-kubernetes-service.html)) tradicionalmente exigem gerenciamento manual de recursos computacionais por meio de grupos de nós. Isso cria uma sobrecarga operacional para:
+ Decisões de planejamento e escalabilidade de capacidade
+ Provisionamento de nós e gerenciamento do ciclo de vida
+ Otimização de custos em diferentes tipos de carga de trabalho
+ Manutenção e atualizações da infraestrutura

O Amazon EKS [Auto Mode](https://docs.aws.amazon.com/eks/latest/userguide/automode.html) automatiza o gerenciamento de recursos computacionais provisionando e escalando dinamicamente os nós com base nas demandas da carga de trabalho, eliminando a necessidade do gerenciamento manual de grupos de nós.

No entanto, muitas organizações lutam para habilitar e gerenciar consistentemente o Amazon EKS Auto Mode em seus clusters novos e existentes. Os desafios comuns incluem:
+ Processos complexos de migração de grupos de nós existentes
+ Risco de interrupção do serviço durante a transição
+ Necessidade de planejamento e teste cuidadosos de capacidade
+ Requisito de permissões e configurações específicas [do Amazon IAM](https://aws.amazon.com/iam/?trk=6a436c72-0178-4620-97ad-0220ccc59fd0&sc_channel=ps&ef_id=CjwKCAjw7vzOBhBxEiwAc7WNr57daOn9724PwXVGy7aBxG_uuEHktjCWJbcY1q1BrZBaApyi1sAb_BoCQj0QAvD_BwE:G:s&s_kwcid=AL!4422!3!795924581177!e!!g!!amazon%20iam!23523526050!193629723318&gad_campaignid=23523526050&gbraid=0AAAAADjHtp_aCwsziIR-n3ST_xwoCqAuc&gclid=CjwKCAjw7vzOBhBxEiwAc7WNr57daOn9724PwXVGy7aBxG_uuEHktjCWJbcY1q1BrZBaApyi1sAb_BoCQj0QAvD_BwE)
+ Coordenação entre várias equipes e ambientes

Esse padrão implementa um fluxo de trabalho de [GitHub ações](https://docs.github.com/en/actions) que ativa o modo automático do EKS em clusters do EKS em uma região específica da AWS. [Antes de ativar o modo automático, o fluxo de trabalho cria backups com data e hora do estado do cluster (configuração do cluster, grupos de nós, versões do Helm e recursos personalizados) e os carrega em um bucket do Amazon S3.](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 

Depois de ativar o Modo Automático, o fluxo de trabalho drena e exclui grupos de nós antigos, atualiza as permissões da função do cluster e limpa os componentes de escalabilidade anteriores, como Karpenter e Cluster Autoscaler. O fluxo de trabalho pode ser integrado aos pipelines existentes de integração contínua e contínua delivery/deployment (CI/CD).

## Pré-requisitos e limitações
<a name="enable-eks-auto-mode-using-github-actions-prereqs"></a>

**Pré-requisitos **

**1. Obrigatório**
+ Uma [GitHub conta](https://github.com/) e seu próprio GitHub repositório para executar o fluxo de trabalho
+ Uma [conta ativa da AWS](https://aws.amazon.com/account/) com permissões administrativas

**2. Instalação de ferramentas locais**
+ [Terraform](https://developer.hashicorp.com/terraform/install) versão 1.13.0 ou posterior
+ [GitHub CLI](https://cli.github.com/) (gh), configurada com as credenciais apropriadas
+ [kubectl e [eksctl](https://docs.aws.amazon.com/eks/latest/eksctl/installation.html)](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html), configurados para gerenciamento de clusters

**3. Requisitos do cluster EKS**
+ Kubernetes versão 1.29 ou posterior
+ Configuração de acesso ao endpoint:
  + Ou está configurado para endpoints públicos e privados 
  + Ou endpoint privado com NAT Gateway em sub-redes privadas
+ [API EKS](https://docs.aws.amazon.com/eks/latest/userguide/grant-k8s-access.html) e acesso ao [ConfigMap](https://docs.aws.amazon.com/eks/latest/userguide/auth-configmap.html)cluster ativados (necessários para permitir que o EKS gerencie dinamicamente os nós do Modo Automático e atualize o aws-auth ConfigMap para a autenticação adequada do cluster durante a migração)
+ [Grupos de nós ativos ou pools de nós gerenciados](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html)

**4. Requisitos de configuração do IAM OIDC**
+ A função e o provedor de identidade do IAM para GitHub isso incluem:
  + Política de confiança para GitHub OIDC
  + Permissões para:
    + Gerenciamento de clusters do EKS
    + Acesso ao bucket do S3
    + Gerenciamento de perfis do IAM
    + Gerenciamento de rede EC2
+ Consulte o código [iam.tf](https://github.com/aws-samples/sample-enable-eks-auto-mode-using-github-actions/blob/main/iam.tf) para uma configuração simples usando o Terraform. A função do IAM (GitHubActionsEKSRole) será criada quando o código do Terraform for aplicado.

**Limitações**
+ Só é compatível com clusters EKS com Kubernetes versão 1.29 e superior
+ Suporta apenas a versão 1.1.0 e superior do Karpenter
+ Region-specific implementação. Alguns serviços da AWS não estão disponíveis em todas as regiões da AWS. Para ver a disponibilidade da região, consulte [os serviços da AWS por região](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)
+ Requer acessibilidade do endpoint do cluster
+ Limitado a grupos de AWS-managed nós

## Arquitetura
<a name="enable-eks-auto-mode-using-github-actions-architecture"></a>

**Pilha de tecnologias de destino**

1. [https://docs.github.com/en/actions](https://docs.github.com/en/actions)

1. [https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)

1. [https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/amazon-elastic-kubernetes-service.html](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/amazon-elastic-kubernetes-service.html)

1. [https://aws.amazon.com/s3/](https://aws.amazon.com/s3/)

**Arquitetura de destino**

![](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/e1fa4e49-96a5-42ae-9886-766298664db4/images/a2c46a84-3bf5-4f1e-8216-ab29b4ba894e.png)


1. O fluxo de trabalho de GitHub ações é acionado do GitHub repositório pelo usuário.

1. O GitHub Actions Workflow assume uma função do IAM usando o OIDC para fazer as alterações necessárias na conta da AWS. Ele também verifica a presença da função EKS Auto Node na conta e, se não estiver presente, a função é criada e as políticas necessárias são anexadas. 

1. Um backup do estado atual do cluster EKS que precisa do Modo Automático ativado é carregado em um bucket do S3.

1. A função de cluster do cluster que precisa do Modo Automático ativado é recuperada e permissões adicionais (AmazonEKSComputePolicy,,, AmazonEKSBlockStoragePolicy AmazonEKSLoadBalancingPolicy AmazonEKSNetworkingPolicy, AmazonEKSClusterPolicy) são adicionadas a ela se não estiverem presentes no Modo Automático EKS. Além disso, como uma etapa de pré-migração, as sub-redes dos clusters são atualizadas com tags para habilitação do EKS Auto Mode. 

1. O fluxo de trabalho ativa o EKS Auto Mode no cluster EKS.

1. Grupos de nós antigos são identificados e excluídos. Isso é ignorado se o usuário não tiver concedido as permissões para a função do IAM descritas nas etapas opcionais de configuração abaixo.

1. Os componentes de escalabilidade (Karpenter e Cluster Autoscaler) também são removidos se estiverem presentes anteriormente.

 O fluxo de trabalho de GitHub ações consiste em três trabalhos principais:

1. `check-clusters`: identifica clusters sem o modo automático ativado e atualiza as políticas do IAM e as tags de sub-rede.

1. `backup-and-check`: faz backup do estado do cluster antes da migração.

1. `gradual-migration`: ativa o modo automático enquanto drena gradualmente os grupos de nós existentes e limpa os componentes de escalabilidade antigos. Ele também faz uma verificação final dos estados dos clusters após a migração. 

**nota**  
Se você precisar de backups de configuração de nós ou planeja excluir nodes/node grupos durante a migração para o Modo Automático do EKS, adicione a função do IAM criada usando o código terraform ao ConfigMap aws-auth. Sem isso, você ainda pode visualizar as configurações do grupo de nós. 



## Ferramentas
<a name="enable-eks-auto-mode-using-github-actions-tools"></a>

*CLI DA AWS:*

A ‭[AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)‭ é uma ferramenta de código aberto que ajuda na interação com os serviços da AWS por meio de comandos no seu shell de linha de comandos. Em nossa solução, usamos a interface de linha de comando dos serviços da AWS para executar atualizações de configuração de cluster EKS, atualizações de funções do IAM e consultar o status do cluster em todo o processo de automação.

*Amazon EKS:*

O [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) ajuda você a executar o Kubernetes na AWS sem precisar instalar e manter seus próprios nós ou ambiente de gerenciamento do Kubernetes. Nesse padrão, o Amazon EKS é o serviço de destino em que o Modo Automático está habilitado para automatizar o provisionamento computacional e a escalabilidade de nós entre clusters em uma região específica.

*IAM:*

O [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus recursos da AWS, controlando quem está autenticado e autorizado a usá-los. Em nossa solução, nós o usamos para gerenciar permissões para GitHub ações para modificar as configurações do cluster EKS por meio da federação OIDC. A solução também modifica as permissões da função de cluster e adiciona um trabalho para criar a função de nó EKS para que o EKS Auto Mode possa programar os pods pendentes em novos nós que ele cria como parte dos pools de nós.

***Amazon S3:***

O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados. Em nossa solução, usamos um bucket S3 para armazenar os backups com data e hora dos clusters antes que o EKS Auto Mode seja ativado neles, o que ajudaria na recuperação de desastres.

**Outras ferramentas:**

*GitHub Ações:*

[GitHub Actions](https://docs.github.com/en/actions) é uma CI/CD plataforma usada em nossa solução para automatizar o fluxo de trabalho de ativação do EKS Auto Mode. Ele também fornece autenticação segura via OIDC e gerencia a execução do pipeline em vários clusters.  

*HashiCorp Terraforma:*

O [Terraform](https://developer.hashicorp.com/terraform/docs) é uma ferramenta de infraestrutura como código (IaC) que ajuda a provisionar e gerenciar recursos e infraestrutura de nuvem por meio de código. Nossa solução usa o terraform para provisionar funções e políticas do IAM e para adicionar a configuração do provedor OIDC para integração segura GitHub de ações. 

**Repositório de código**

O código desse padrão está disponível no GitHub [EKS Auto Mode Enablement por meio do repositório GitHub Actions](https://github.com/aws-samples/sample-enable-eks-auto-mode-using-github-actions/tree/main).

## Práticas recomendadas
<a name="enable-eks-auto-mode-using-github-actions-best-practices"></a>
+ **Segurança**:
  + Respeite o princípio de privilégio mínimo, garantindo somente as permissões estritamente necessárias para a execução de uma tarefa. Para obter mais informações, consulte [Conceder privilégios mínimos e melhores práticas de segurança na documentação do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege.). Consulte o arquivo [iam.tf](https://github.com/aws-samples/sample-enable-eks-auto-mode-using-github-actions/blob/main/iam.tf) no repositório para obter a configuração mínima necessária. 
  + Defina o escopo da política de confiança da função do IAM para seu GitHub repositório e ramificação específicos para evitar que execuções de fluxo de trabalho não autorizadas assumam a função. 
  + Ative o registro do plano de controle do EKS (servidor de API, auditoria, autenticador) antes de iniciar a migração para que você possa diagnosticar problemas de agendamento ou autenticação após a ativação do Modo Automático. 
  + Adicione --sse AES256 a todos os comandos aws s3 cp no [script de backup](https://github.com/aws-samples/sample-enable-eks-auto-mode-using-github-actions/blob/main/scripts/backup-cluster-state.sh) para aplicar a criptografia do lado do servidor em backups do estado do cluster. 
+ **Confiabilidade**: 
  + Teste primeiro o fluxo de trabalho em um cluster que não seja de produção. Verifique se as cargas de trabalho são reprogramadas corretamente nos nós do Modo Automático antes de migrar os clusters de produção. 
  + Verifique se os backups do S3 foram concluídos com êxito e contêm dados válidos de configuração de cluster, grupo de nós, versão do Helm e recursos personalizados antes de continuar com a ativação do Modo Automático. 
  + Depois de ativar o Modo Automático, monitore os eventos de agendamento de pods e a latência de provisionamento de nós usando o [ CloudWatch Amazon Container](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html) Insights para detectar problemas com antecedência. 
+ **Desempenho**: 
  + Revise periodicamente os padrões de escalabilidade do pool de nós do Modo Automático e ajuste as solicitações e os limites de recursos da carga de trabalho para evitar excesso de provisionamento ou atrasos no agendamento.
+ **Custos:** 
  + Marque clusters EKS e recursos associados (funções do IAM, buckets de backup do S3, sub-redes) com metadados de ambiente e propriedade para apoiar o controle de custos e a visibilidade operacional. Para obter mais informações, consulte a [documentação sobre marcação de recursos da AWS](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html.). Você pode editar o arquivo do fluxo de trabalho para adicionar tags personalizadas durante o processo de migração. 
  + Configure alertas do AWS Cost Explorer para monitorar mudanças nos custos computacionais após ativar o Modo Automático, pois o Modo Automático pode alterar os tipos de instância e o comportamento de escalabilidade. Para obter mais informações, consulte a [documentação Analisando seus custos com o AWS Cost Explorer](https://docs.aws.amazon.com/cost-management/latest/userguide/ce-what-is.html.).  
+ **Operações**: 
  + Mantenha o arquivo do fluxo de trabalho e as configurações do Terraform no controle de versão e documente todas as substituições específicas do ambiente, como região, ARN da função ou nome do bucket do S3.   

## Épicos
<a name="enable-eks-auto-mode-using-github-actions-epics"></a>

### Ferramenta SetUp
<a name="tool-setup"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o GitHub repositório. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/enable-eks-auto-mode-using-github-actions.html) | AWS DevOps, arquiteto de nuvem | 

### (Opcional) Configurar uma função do IAM
<a name="optional-set-up-an-iam-role"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configurar o IAM para backup e exclusão de grupos de nós | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/enable-eks-auto-mode-using-github-actions.html)<pre>eksctl create iamidentitymapping \ --cluster $CLUSTER_NAME\ --region us-east-1 \ --arn arn:aws:iam::$ACCOUNT_ID:role/GitHubActionsEKSRole \ --group system:masters \ --username github-actions</pre>Substitua **$CLUSTER\_NAME e **$ACCOUNT\_ID**** pelos valores apropriados. [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/enable-eks-auto-mode-using-github-actions.html)<pre>CLUSTERS=$(aws eks list-clusters --region $AWS_REGION --query 'clusters[]' --output text)<br /><br />CLUSTERS_NEEDING_AUTO_MODE=""<br /><br />for cluster in $CLUSTERS; do<br />    <br />    <br />    AUTO_MODE=$(aws eks describe-cluster --name $cluster --region $AWS_REGION --query 'cluster.computeConfig.enabled' --output text 2>/dev/null || echo "false")<br />    <br />    if [ "$AUTO_MODE" != "True" ]; then<br />       <br />        CLUSTERS_NEEDING_AUTO_MODE="$CLUSTERS_NEEDING_AUTO_MODE $cluster"<br />        <br />        echo " Adding role access to cluster..."<br />        eksctl create iamidentitymapping \<br />          --cluster $cluster \<br />          --region $AWS_REGION \<br />          --arn $ROLE_ARN \<br />          --group system:masters\<br />          --username github-actions || echo "  ⚠️  Role mapping may already exist"<br />        <br />        echo "  ✅ Role access configured for $cluster"<br />done</pre><br />Substitua **$AWS\_REGION e $ROLE\_ARN pela região** **específica e pelo arn** da função IAM criada acima, respectivamente.  | AWS DevOps, arquiteto de nuvem | 

### Execute e valide
<a name="execute-and-validate"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Acione o fluxo de trabalho de GitHub ações. | O fluxo de trabalho é acionado automaticamente quando qualquer alteração é enviada para as ramificações de recursos, principal ou de desenvolvimento. Para acionar manualmente via GitHub UI: 1. Vá para o repositório em GitHub 2. Clique na guia “Ações” 3. Selecione o fluxo de trabalho (pipeline de modo automático) 4. Clique no botão “Executar fluxo de trabalho” 5. Escolha a ramificação e clique em “Executar fluxo de trabalho”<br />O fluxo de trabalho gerencia a [verificação](https://github.com/aws-samples/sample-enable-eks-auto-mode-using-github-actions/blob/22b546b05630c63e5637928ad8a4f5947ad8fb33/.github/workflows/enable-eks-auto-mode.yml#L283) após a migração consultando a configuração computacional de cada cluster migrado usando a AWS CLI para confirmar que o EKS Auto Mode foi ativado com sucesso e exibe as configurações computacionais atuais em formato de tabela. | AWS DevOps, arquiteto de nuvem | 

### Configurar a implantação em vários ambientes
<a name="configure-multi-environment-deployment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implementação da implantação em vários ambientes. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/enable-eks-auto-mode-using-github-actions.html) |  | 

### Limpeza
<a name="cleanup"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Limpar os recursos | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/enable-eks-auto-mode-using-github-actions.html) | AWS geral, arquiteto de nuvem | 

## Solução de problemas
<a name="enable-eks-auto-mode-using-github-actions-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| **Problemas de autenticação**<br /><br /> | • Verifique se o provedor GitHub OIDC está configurado corretamente no AWS IAM <br />• Verifique se o ARN da função do IAM em git secrets corresponde à função real criada com terraform () GitHubActionsEKSRole<br />• Certifique-se de que o GitHub repositório tenha os segredos necessários configurados - AWS\_REGION e. AWS\_ROLE\_ARN<br />• Validar as configurações da região da AWS que correspondam às localizações do seu cluster | 
| **Problemas de permissão**<br /><br /> | <role-arn>• Teste as permissões de funções do IAM localmente: bash aws sts assume-role --role-arn --role-session-name test-session aws eks list-clusters<br />• Certifique-se de que a função tenha DescribeCluster permissões eks: UpdateClusterConfig e eks: | 
| **Compatibilidade de clusters**<br /><br /> | <cluster-name>• Confirme se os clusters EKS estão executando o Kubernetes 1.29 ou superior: bash aws eks describe-cluster --name --query 'cluster.version'<br />• Verifique se os clusters estão no estado ATIVO antes de ativar o Modo Automático | 
| **falhas no fluxo de trabalho**<br /> | • Verifique os registros de GitHub ações para ver mensagens de erro específicas<br /> • Verifique a sintaxe do arquivo do fluxo de trabalho em. github/workflows/auto-mode-pipeline.yml<br /> • Garantir que as variáveis de ambiente estejam definidas corretamente no fluxo de trabalho | 

## Recursos relacionados
<a name="enable-eks-auto-mode-using-github-actions-resources"></a>

1. [Documentação oficial do EKS Auto Mode para começar](https://docs.aws.amazon.com/eks/latest/userguide/automode.html)

1. [Atualizar a documentação da CLI de configuração do cluster](https://docs.aws.amazon.com/cli/latest/reference/eks/update-cluster-config.html)

1. [GitHub segredos para GitHub ações](https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets)

1. [GitHub Documentação de ações](https://docs.github.com/en/actions) 

1. [Documentação da federação OIDC](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html) 