

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Abilita la modalità automatica di Amazon EKS tra i cluster EKS utilizzando GitHub Actions
<a name="enable-eks-auto-mode-using-github-actions"></a>

*Urbija Goswami e Anugrah Lakra, Amazon Web Services*

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

I cluster [Amazon Elastic Kubernetes Service (EKS](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/amazon-elastic-kubernetes-service.html)) richiedono tradizionalmente la gestione manuale delle risorse di elaborazione tramite gruppi di nodi. Ciò crea un sovraccarico operativo per:
+ Decisioni relative alla pianificazione e alla scalabilità della capacità
+ Provisioning dei nodi e gestione del ciclo di vita
+ Ottimizzazione dei costi per diversi tipi di carichi di lavoro
+ Manutenzione e aggiornamenti dell'infrastruttura

[La modalità automatica](https://docs.aws.amazon.com/eks/latest/userguide/automode.html) di Amazon EKS automatizza la gestione delle risorse di elaborazione effettuando il provisioning e la scalabilità dinamici dei nodi in base alle richieste del carico di lavoro, eliminando la necessità di una gestione manuale dei gruppi di nodi.

Tuttavia, molte organizzazioni hanno difficoltà ad abilitare e gestire in modo coerente Amazon EKS Auto Mode nei cluster esistenti e nuovi. Le sfide più comuni includono:
+ Processi di migrazione complessi da gruppi di nodi esistenti
+ Rischio di interruzione del servizio durante la transizione
+ Necessità di un'attenta pianificazione e test della capacità
+ Requisiti per autorizzazioni e configurazioni specifiche di [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)
+ Coordinamento tra più team e ambienti

Questo modello implementa un flusso di lavoro [GitHub Actions](https://docs.github.com/en/actions) che abilita la modalità automatica EKS sui cluster EKS in una regione AWS specifica. [Prima di abilitare la modalità automatica, il flusso di lavoro crea backup con data e ora dello stato del cluster (configurazione del cluster, gruppi di nodi, versioni Helm e risorse personalizzate) e li carica in un bucket Amazon S3.](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 

Dopo aver abilitato la modalità automatica, il flusso di lavoro scarica ed elimina i vecchi gruppi di nodi, aggiorna le autorizzazioni dei ruoli del cluster e ripulisce i componenti di scalabilità precedenti come Karpenter e Cluster Autoscaler. Il flusso di lavoro può essere integrato con le pipeline di integrazione continua e continuous () esistenti. delivery/deployment CI/CD

## Prerequisiti e limitazioni
<a name="enable-eks-auto-mode-using-github-actions-prereqs"></a>

**Prerequisiti**

**1. Richiesto**
+ Un [GitHub account](https://github.com/) e un GitHub repository personale per eseguire il flusso di lavoro
+ Un [account AWS](https://aws.amazon.com/account/) attivo con autorizzazioni amministrative

**2. Installazione degli strumenti locali**
+ [Terraform](https://developer.hashicorp.com/terraform/install) versione 1.13.0 o successiva
+ [GitHub CLI](https://cli.github.com/) (gh), configurata con credenziali appropriate
+ [kubectl ed eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)[, configurati per la gestione dei cluster](https://docs.aws.amazon.com/eks/latest/eksctl/installation.html)

**3. Requisiti del cluster EKS**
+ Kubernetes versione 1.29 o successiva
+ Configurazione dell'accesso agli endpoint:
  + O è impostato su endpoint pubblici e privati 
  + Oppure endpoint privato con gateway NAT in sottoreti private
+ [API EKS](https://docs.aws.amazon.com/eks/latest/userguide/grant-k8s-access.html) e accesso al [ConfigMap](https://docs.aws.amazon.com/eks/latest/userguide/auth-configmap.html)cluster abilitati (necessario per consentire a EKS di gestire dinamicamente i nodi Auto Mode e aggiornare ConfigMap aws-auth per una corretta autenticazione del cluster durante la migrazione)
+ [Gruppi di nodi attivi o pool di nodi gestiti](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html)

**4. Requisiti di configurazione IAM OIDC**
+ Il provider di ruoli e identità IAM a GitHub tal fine include:
  + Politica di fiducia per GitHub OIDC
  + Autorizzazioni per:
    + Gestione dei cluster EKS
    + Accesso al bucket S3
    + Gestione del ruolo IAM
    + Gestione della rete EC2
+ Vedi il codice [iam.tf](https://github.com/aws-samples/sample-enable-eks-auto-mode-using-github-actions/blob/main/iam.tf) per una semplice configurazione con Terraform. Il ruolo IAM (GitHubActionsEKSRole) verrà creato quando viene applicato il codice Terraform.

**Limitazioni**
+ Supporta solo i cluster EKS con Kubernetes versione 1.29 e successive
+ Supporta solo la versione 1.1.0 e successive di Karpenter
+ Region-specific implementazione. Alcuni servizi AWS non sono disponibili in tutte le regioni AWS. Per la disponibilità regionale, consulta [i servizi AWS per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)
+ Richiede l'accessibilità degli endpoint del cluster
+ Limitato ai gruppi di nodi AWS-managed 

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

**Stack tecnologico Target**

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/)

**Architettura Target**

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


1. Il flusso di lavoro GitHub delle azioni viene attivato dal GitHub Repository dall'utente.

1.  GitHub Actions Workflow assume un ruolo IAM utilizzando OIDC per apportare le modifiche necessarie all'account AWS. Verifica inoltre la presenza del ruolo EKS Auto Node nell'account e, se non è presente, il ruolo viene creato e vengono allegate le politiche necessarie. 

1. Un backup dello stato corrente del cluster EKS che richiede l'attivazione della modalità automatica viene caricato su un bucket S3.

1. Il ruolo del cluster che richiede l'attivazione della modalità automatica viene recuperato e vengono aggiunte autorizzazioni aggiuntive (AmazonEKSComputePolicy,,, AmazonEKSBlockStoragePolicy AmazonEKSLoadBalancingPolicy AmazonEKSNetworkingPolicy, AmazonEKSClusterPolicy) se non sono presenti per EKS Auto Mode. Inoltre, come fase precedente alla migrazione, le sottoreti dei cluster vengono aggiornate con tag per l'abilitazione della modalità EKS Auto. 

1. Il flusso di lavoro abilita la modalità EKS Auto nel cluster EKS.

1. I vecchi gruppi di nodi vengono identificati ed eliminati. Questa operazione viene ignorata se l'utente non ha fornito le autorizzazioni per il ruolo IAM descritto nei passaggi di configurazione opzionali riportati di seguito.

1. Anche i componenti di scalabilità (Karpenter e Cluster Autoscaler) vengono rimossi se presenti in precedenza.

 Il flusso di lavoro GitHub Actions è composto da tre processi principali:

1. `check-clusters`: identifica i cluster senza la modalità automatica abilitata e aggiorna le policy IAM e i tag di sottorete.

1. `backup-and-check`: esegue il backup dello stato del cluster prima della migrazione.

1. `gradual-migration`: attiva la modalità automatica mentre svuota gradualmente i gruppi di nodi esistenti e pulisce i vecchi componenti di scalabilità. Esegue anche una verifica finale degli stati dei cluster dopo la migrazione. 

**Nota**  
Se hai bisogno di backup della configurazione dei nodi o prevedi di eliminare i nodes/node gruppi durante la migrazione a EKS Auto Mode, puoi aggiungere il ruolo IAM creato utilizzando il codice terraform ad aws-auth. ConfigMap Senza di esso, puoi comunque visualizzare le configurazioni dei gruppi di nodi. 



## Tools (Strumenti)
<a name="enable-eks-auto-mode-using-github-actions-tools"></a>

*CLI AWS:*

[AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) è uno strumento open source che ti aiuta a interagire con i servizi AWS tramite comandi nella tua shell a riga di comando. Nella nostra soluzione, utilizziamo l'interfaccia a riga di comando per i servizi AWS per eseguire aggiornamenti della configurazione del cluster EKS, aggiornamenti dei ruoli IAM e interrogare lo stato del cluster durante tutto il processo di automazione.

*Amazon EKS:*

[Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS) ti aiuta a eseguire Kubernetes su AWS senza dover installare o gestire il tuo piano di controllo o i tuoi nodi Kubernetes. In questo modello, Amazon EKS è il servizio di destinazione in cui la modalità automatica è abilitata per automatizzare il provisioning di elaborazione e la scalabilità dei nodi tra i cluster in una regione specifica.

*IAM/*

[AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue risorse AWS controllando chi è autenticato e autorizzato a utilizzarle. Nella nostra soluzione, la utilizziamo per gestire le autorizzazioni relative alle azioni di modifica delle GitHub configurazioni dei cluster EKS tramite la federazione OIDC. La soluzione modifica anche le autorizzazioni dei ruoli del cluster e aggiunge un processo per creare EKS Node Role in modo che EKS Auto Mode possa pianificare i pod in sospeso nei nuovi nodi che attiva come parte dei pool di nodi.

***Amazon S3:***

[Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati. Nella nostra soluzione, utilizziamo un bucket S3 per archiviare i backup con data e ora dei cluster prima che in essi venga abilitata la modalità EKS Auto, il che aiuterebbe nel ripristino di emergenza.

**Altri strumenti:**

*GitHub Operazioni:*

[GitHub Actions](https://docs.github.com/en/actions) è una CI/CD piattaforma utilizzata nella nostra soluzione per automatizzare il flusso di lavoro di abilitazione di EKS Auto Mode. Fornisce inoltre un'autenticazione sicura tramite OIDC e gestisce l'esecuzione della pipeline su più cluster.  

*HashiCorp Terraform:*

[Terraform](https://developer.hashicorp.com/terraform/docs) è uno strumento Infrastructure as Code (IaC) che consente di utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud. La nostra soluzione utilizza terraform per fornire ruoli e politiche IAM e per aggiungere la configurazione del provider OIDC per l'integrazione sicura di Actions. GitHub  

**Archivio di codice**

Il codice per questo pattern è disponibile nel repository GitHub [EKS Auto Mode Enablement via GitHub ](https://github.com/aws-samples/sample-enable-eks-auto-mode-using-github-actions/tree/main) Actions.

## Best practice
<a name="enable-eks-auto-mode-using-github-actions-best-practices"></a>
+ **Sicurezza**:
  + Segui il principio del privilegio minimo e concedi le autorizzazioni minime necessarie per eseguire un'attività. Per ulteriori informazioni, consulta le [best practice di G rant least privilege e Security nella](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege.) documentazione IAM. Consulta il file [iam.tf](https://github.com/aws-samples/sample-enable-eks-auto-mode-using-github-actions/blob/main/iam.tf) nel repository per la configurazione minima richiesta. 
  + Amplia la policy di fiducia dei ruoli IAM in base al tuo GitHub repository e filiale specifici per evitare che vengano eseguiti flussi di lavoro non autorizzati ad assumere il ruolo. 
  + Abilita la registrazione del piano di controllo EKS (server API, audit, authenticator) prima di iniziare la migrazione in modo da poter diagnosticare problemi di pianificazione o autenticazione dopo aver abilitato la modalità automatica. 
  + Aggiungi --sse AES256 a tutti i comandi aws s3 cp nello script di backup per applicare la crittografia lato server sui [backup](https://github.com/aws-samples/sample-enable-eks-auto-mode-using-github-actions/blob/main/scripts/backup-cluster-state.sh) dello stato del cluster. 
+ **Affidabilità:** 
  + Verifica prima il flusso di lavoro su un cluster non di produzione. Verifica che i carichi di lavoro vengano riprogrammati correttamente sui nodi Auto Mode prima di migrare i cluster di produzione. 
  + Verifica che i backup S3 siano stati completati correttamente e contengano configurazioni di cluster, gruppi di nodi, release Helm e dati di risorse personalizzati validi prima di procedere con l'attivazione della modalità Auto. 
  + Dopo aver abilitato la modalità automatica, monitora gli eventi di pianificazione dei pod e la latenza di provisioning dei nodi utilizzando [Amazon CloudWatch Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html) per rilevare tempestivamente i problemi. 
+ **Prestazioni:** 
  + Rivedi periodicamente i modelli di scalabilità dei pool di nodi in modalità automatica e modifica le richieste e i limiti delle risorse del carico di lavoro per evitare ritardi nell'eccessivo provisioning o nella pianificazione.
+ **Costo:** 
  + Contrassegna i cluster EKS e le risorse associate (ruoli IAM, bucket di backup S3, sottoreti) con metadati di ambiente e proprietà per supportare il monitoraggio dei costi e la visibilità operativa. Per ulteriori informazioni, consulta la [documentazione sull'etichettatura delle risorse AWS](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html.). Puoi modificare il file del flusso di lavoro per aggiungere tag personalizzati durante il processo di migrazione. 
  + Imposta gli avvisi di AWS Cost Explorer per monitorare le variazioni dei costi di calcolo dopo aver abilitato la modalità automatica, poiché la modalità automatica può modificare i tipi di istanze e il comportamento di scalabilità. Per ulteriori informazioni, consulta la [documentazione sull'analisi dei costi con AWS Cost Explorer](https://docs.aws.amazon.com/cost-management/latest/userguide/ce-what-is.html.).  
+ **Operazioni**: 
  + Conserva il file del flusso di lavoro e le configurazioni Terraform nel controllo della versione e documenta eventuali modifiche specifiche dell'ambiente come regione, ruolo ARN o nome del bucket S3.   

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

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura il GitHub repository. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/enable-eks-auto-mode-using-github-actions.html) | AWS DevOps, architetto del cloud | 

### (Facoltativo) Imposta un ruolo IAM
<a name="optional-set-up-an-iam-role"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura IAM per il backup e l'eliminazione dei gruppi di nodi | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/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>**Sostituisci **$CLUSTER\_NAME e $ACCOUNT\_ID** con i valori appropriati.** [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/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 />Sostituisci **$AWS\_REGION e $ROLE\_ARN rispettivamente con la regione** **specifica e l'arn** del ruolo IAM creati sopra.  | AWS DevOps, architetto del cloud | 

### Esegui e convalida
<a name="execute-and-validate"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Attiva il flusso di lavoro GitHub Actions. | Il flusso di lavoro viene attivato automaticamente quando vengono apportate modifiche ai rami delle funzionalità, principale o di sviluppo. Per attivare manualmente tramite l' GitHub interfaccia utente: 1. Vai al repository su GitHub 2. Fai clic sulla scheda «Azioni» 3. Seleziona il flusso di lavoro (auto-mode-pipeline) 4. Fai clic sul pulsante «Esegui flusso di lavoro» 5. Scegli il ramo e fai clic su «Esegui flusso di lavoro»<br />Il flusso di lavoro gestisce la [verifica](https://github.com/aws-samples/sample-enable-eks-auto-mode-using-github-actions/blob/22b546b05630c63e5637928ad8a4f5947ad8fb33/.github/workflows/enable-eks-auto-mode.yml#L283) dopo la migrazione interrogando la configurazione di calcolo di ogni cluster migrato utilizzando l'AWS CLI per confermare che EKS Auto Mode è stata abilitata correttamente e visualizza le impostazioni di calcolo correnti in un formato tabellare. | AWS DevOps, architetto del cloud | 

### Configura la distribuzione multiambiente
<a name="configure-multi-environment-deployment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Implementazione di una distribuzione multiambiente. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/enable-eks-auto-mode-using-github-actions.html) |  | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Eliminare le risorse. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/enable-eks-auto-mode-using-github-actions.html) | General AWS, architetto del cloud | 

## Risoluzione dei problemi
<a name="enable-eks-auto-mode-using-github-actions-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| **Problemi di autenticazione**<br /><br /> | • Verificare che il provider GitHub OIDC sia configurato correttamente in AWS IAM <br />• Verifica che il ruolo IAM ARN in git secrets corrisponda al ruolo effettivo creato con terraform () GitHubActionsEKSRole<br />• Assicurati che il GitHub repository abbia i segreti necessari configurati: AWS\_REGION e. AWS\_ROLE\_ARN<br />• Verifica che le impostazioni della regione AWS corrispondano alle posizioni dei cluster | 
| **Problemi di autorizzazione**<br /><br /> | <role-arn>• Verifica i permessi dei ruoli IAM localmente: bash aws sts assume-role --role-arn --role-session-name test-session aws eks list-clusters<br />• Assicurati che UpdateClusterConfig il DescribeCluster ruolo abbia i permessi eks: ed eks: | 
| **Compatibilità con i cluster**<br /><br /> | <cluster-name>• Conferma che i cluster EKS eseguano Kubernetes 1.29 o versioni successive: bash aws eks describe-cluster --name --query 'cluster.version'<br />• Verifica che i cluster siano in stato ATTIVO prima di abilitare la modalità automatica | 
| **Errori del flusso di lavoro**<br /> | • Controlla i registri GitHub delle azioni per messaggi di errore specifici<br /> • Verificare la sintassi del file di workflow in. github/workflows/auto-mode-pipeline.yml<br /> • Assicurarsi che le variabili di ambiente siano impostate correttamente nel flusso di lavoro | 

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

1. [Documentazione ufficiale di EKS Auto Mode per iniziare](https://docs.aws.amazon.com/eks/latest/userguide/automode.html)

1. [Aggiorna la documentazione CLI di configurazione del cluster](https://docs.aws.amazon.com/cli/latest/reference/eks/update-cluster-config.html)

1. [GitHub segreti per le azioni GitHub ](https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets)

1. [GitHub Documentazione sulle azioni](https://docs.github.com/en/actions) 

1. [Documentazione della federazione OIDC](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html) 