

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Habilite el modo automático de Amazon EKS en todos los clústeres de EKS mediante GitHub acciones
<a name="enable-eks-auto-mode-using-github-actions"></a>

*Urbija Goswami y Anugrah Lakra, Amazon Web Services*

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

Los clústeres de [Amazon Elastic Kubernetes Service (EKS](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/amazon-elastic-kubernetes-service.html)) suelen requerir la administración manual de los recursos informáticos a través de grupos de nodos. Esto genera una sobrecarga operativa para:
+ Decisiones de planificación y escalamiento de la capacidad
+ Aprovisionamiento de nodos y administración del ciclo de vida
+ Optimización de costos en diferentes tipos de carga de trabajo
+ Mantenimiento y actualizaciones de la infraestructura

Amazon EKS [Auto Mode](https://docs.aws.amazon.com/eks/latest/userguide/automode.html) automatiza la administración de los recursos informáticos al aprovisionar y escalar los nodos de forma dinámica en función de las demandas de carga de trabajo, lo que elimina la necesidad de administrar manualmente los grupos de nodos.

Sin embargo, muchas organizaciones tienen dificultades para habilitar y administrar Amazon EKS Auto Mode de manera uniforme en sus clústeres nuevos y existentes. Los desafíos más comunes incluyen:
+ Procesos de migración complejos desde grupos de nodos existentes
+ Riesgo de interrupción del servicio durante la transición
+ Necesidad de planificar y probar cuidadosamente la capacidad
+ Requisito de permisos y [configuraciones específicos de 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)
+ Coordinación entre varios equipos y entornos

Este patrón implementa un flujo de trabajo de [GitHub acciones](https://docs.github.com/en/actions) que habilita el modo automático de EKS en los clústeres de EKS de una región de AWS específica. [Antes de activar el modo automático, el flujo de trabajo crea copias de seguridad con fecha y hora del estado del clúster (configuración del clúster, grupos de nodos, versiones de Helm y recursos personalizados) y las carga en un bucket de Amazon S3.](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 

Tras activar el modo automático, el flujo de trabajo vacía y elimina los grupos de nodos antiguos, actualiza los permisos de los roles del clúster y limpia los componentes de escalado anteriores, como Karpenter y Cluster Autoscaler. El flujo de trabajo se puede integrar con las canalizaciones de integración continua y continua () existentes. delivery/deployment CI/CD

## Requisitos previos y limitaciones
<a name="enable-eks-auto-mode-using-github-actions-prereqs"></a>

**Requisitos previos **

**1. Necesario**
+ Una [GitHub cuenta](https://github.com/) y tu propio GitHub repositorio para ejecutar el flujo de trabajo
+ Una [cuenta de AWS](https://aws.amazon.com/account/) activa con permisos administrativos

**2. Instalación de herramientas locales**
+ [Terraform](https://developer.hashicorp.com/terraform/install) versión 1.13.0 o posterior
+ [GitHub CLI](https://cli.github.com/) (gh), configurada con las credenciales adecuadas
+ [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) y [eksctl](https://docs.aws.amazon.com/eks/latest/eksctl/installation.html), configurados para la administración de clústeres

**3. Requisitos del clúster EKS**
+ Kubernetes versión 1.29 o posterior
+ Configuración de acceso al punto final:
  + O bien está configurada para puntos finales públicos y privados 
  + O punto final privado con puerta de enlace NAT en subredes privadas
+ La [API de EKS](https://docs.aws.amazon.com/eks/latest/userguide/grant-k8s-access.html) y el acceso a los [ConfigMap](https://docs.aws.amazon.com/eks/latest/userguide/auth-configmap.html)clústeres están habilitados (se requiere para que EKS pueda gestionar dinámicamente los nodos del modo automático y actualizar el aws-auth ConfigMap para una correcta autenticación del clúster durante la migración)
+ Grupos de [nodos activos o grupos de nodos](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html) gestionados

**4. Requisitos de configuración de IAM OIDC**
+ El rol de IAM y el proveedor de identidades para ello incluyen: GitHub 
  + Política de confianza para OIDC GitHub 
  + Permisos para:
    + Administración de clústeres de EKS
    + acceso a buckets de S3
    + Administración de roles de IAM
    + Administración de redes EC2
+ Consulte el código [iam.tf](https://github.com/aws-samples/sample-enable-eks-auto-mode-using-github-actions/blob/main/iam.tf) para una configuración sencilla con Terraform. El rol de IAM (GitHubActionsEKSRole) se creará cuando se aplique el código de Terraform.

**Limitaciones**
+ Solo es compatible con clústeres de EKS con la versión 1.29 y superior de Kubernetes
+ Solo es compatible con la versión 1.1.0 y superior de Karpenter
+ Region-specific implementación. Algunos servicios de AWS no están disponibles en todas las regiones de AWS. Para conocer la disponibilidad regional, consulte [los servicios de AWS por región](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)
+ Requiere accesibilidad a los puntos de conexión del clúster
+ Limitado a grupos AWS-managed de nodos

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

**Pila de tecnología 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/)

**Arquitectura de destino**

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


1. El usuario activa el flujo de trabajo de GitHub acciones desde el GitHub repositorio.

1. El flujo de trabajo de GitHub acciones asume una función de IAM y utiliza OIDC para realizar los cambios necesarios en la cuenta de AWS. También comprueba la presencia del rol EKS Auto Node en la cuenta y, si no está presente, se crea el rol y se adjuntan las políticas necesarias. 

1. Se carga en un bucket de S3 una copia de seguridad del estado actual del clúster de EKS que necesita el modo automático activado.

1. Se recupera la función de clúster del clúster que necesita el modo automático activado y se le añaden permisos adicionales (AmazonEKSComputePolicy AmazonEKSBlockStoragePolicy AmazonEKSLoadBalancingPolicy, AmazonEKSNetworkingPolicy,,, AmazonEKSClusterPolicy) si no están presentes en el modo automático de EKS. Además, como paso previo a la migración, las subredes de los clústeres se actualizan con etiquetas para habilitar el modo automático de EKS. 

1. El flujo de trabajo habilita el modo automático de EKS en el clúster de EKS.

1. Los grupos de nodos antiguos se identifican y eliminan. Esto se omite si el usuario no ha concedido los permisos para la función de IAM que se describen en los pasos de configuración opcionales que se indican a continuación.

1. Los componentes de escalado (Karpenter y Cluster Autoscaler) también se eliminan si estaban presentes anteriormente.

 El flujo de trabajo de GitHub Actions consta de tres tareas principales:

1. `check-clusters`: identifica los clústeres que no tienen el modo automático activado y actualiza las políticas de IAM y las etiquetas de subred.

1. `backup-and-check`: Realiza una copia de seguridad del estado del clúster antes de la migración.

1. `gradual-migration`: Activa el modo automático y, al mismo tiempo, agota gradualmente los grupos de nodos existentes y limpia los componentes de escalado antiguos. También realiza una verificación final del estado de los clústeres tras la migración. 

**nota**  
Si necesita copias de seguridad de la configuración de los nodos o planea eliminar nodes/node grupos durante la migración al modo automático de EKS, puede añadir a aws-auth el rol de IAM creado con el código terraform. ConfigMap Sin él, aún puede ver las configuraciones de los grupos de nodos. 



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

*AWS CLI:*

La [Interfaz de la línea de comandos de AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en el intérprete de comandos de la línea de comandos. En nuestra solución, utilizamos la interfaz de línea de comandos para que los servicios de AWS ejecuten las actualizaciones de la configuración del clúster de EKS, las actualizaciones de los roles de IAM y consulten el estado del clúster durante todo el proceso de automatización.

*Amazon EKS:*

[Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) lo ayuda a ejecutar Kubernetes en AWS sin necesidad de instalar ni mantener su propio plano de control o nodos de Kubernetes. En este patrón, Amazon EKS es el servicio de destino en el que el modo automático está habilitado para automatizar el aprovisionamiento informático y el escalado de nodos en los clústeres de una región específica.

*IAM:*

[AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le permite administrar de forma segura el acceso a los recursos de AWS mediante el control de quién está autenticado y autorizado a utilizarlos. En nuestra solución, lo utilizamos para administrar los permisos de GitHub Actions para modificar las configuraciones de los clústeres de EKS mediante la federación OIDC. La solución también modifica los permisos de los roles del clúster y añade una tarea para crear el rol de nodo de EKS, de modo que el modo automático de EKS pueda programar los módulos pendientes en los nuevos nodos que activa como parte de los grupos de nodos.

*Amazon S3***:**

[Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos. En nuestra solución, utilizamos un depósito S3 para almacenar las copias de seguridad con fecha y hora de los clústeres antes de que se habilite el modo automático de EKS en ellos, lo que ayudaría a la recuperación ante desastres.

**Otras herramientas:**

*GitHub Acciones:*

[GitHub Actions](https://docs.github.com/en/actions) es una CI/CD plataforma que se utiliza en nuestra solución para automatizar el flujo de trabajo de activación del modo automático de EKS. También proporciona una autenticación segura a través del OIDC y gestiona la ejecución de los procesos en varios clústeres.  

*HashiCorp Terraform:*

[Terraform](https://developer.hashicorp.com/terraform/docs) es una herramienta de infraestructura como código (IaC) que facilita usar el código para aprovisionar y administrar los recursos y la infraestructura en la nube. Nuestra solución utiliza terraform para aprovisionar las funciones y políticas de IAM y para añadir la configuración de proveedores de OIDC para una integración segura de Actions. GitHub  

**Repositorio de código**

El código de este patrón está disponible en el repositorio GitHub [EKS Auto Mode Enablement](https://github.com/aws-samples/sample-enable-eks-auto-mode-using-github-actions/tree/main) via Actions. GitHub 

## Prácticas recomendadas
<a name="enable-eks-auto-mode-using-github-actions-best-practices"></a>
+ **Seguridad**:
  + Siga el principio de privilegio mínimo y conceda los permisos mínimos necesarios para llevar a cabo una tarea. Para obtener más información, consulte las [mejores prácticas de seguridad y concesión de privilegios mínimos en la](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege.) documentación de IAM. Consulte el archivo [iam.tf](https://github.com/aws-samples/sample-enable-eks-auto-mode-using-github-actions/blob/main/iam.tf) del repositorio para ver la configuración mínima requerida. 
  + Aplica la política de confianza de roles de IAM a tu GitHub repositorio y sucursal específicos para evitar que grupos de trabajo no autorizados asuman ese rol. 
  + Habilite el registro del plano de control de EKS (servidor API, auditoría, autenticador) antes de iniciar la migración para poder diagnosticar los problemas de programación o autenticación una vez activado el modo automático. 
  + Añada --sse AES256 a todos los comandos aws s3 cp del [script de respaldo para aplicar el cifrado del lado del servidor en las copias](https://github.com/aws-samples/sample-enable-eks-auto-mode-using-github-actions/blob/main/scripts/backup-cluster-state.sh) de seguridad del estado del clúster. 
+ **Fiabilidad:** 
  + Pruebe primero el flujo de trabajo con un clúster que no sea de producción. Compruebe que las cargas de trabajo se reprograman correctamente en los nodos de modo automático antes de migrar los clústeres de producción. 
  + Compruebe que las copias de seguridad de S3 se hayan completado correctamente y que contengan datos válidos sobre la configuración del clúster, el grupo de nodos, la versión de Helm y los recursos personalizados antes de continuar con la activación del modo automático. 
  + Tras activar el modo automático, supervise los eventos de programación de los pods y la latencia de aprovisionamiento de nodos mediante [Amazon CloudWatch Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html) para detectar problemas de forma temprana. 
+ **Rendimiento**: 
  + Revise periódicamente los patrones de escalado del grupo de nodos en modo automático y ajuste las solicitudes y los límites de los recursos de la carga de trabajo para evitar el sobreaprovisionamiento o los retrasos en la programación.
+ **Costo:** 
  + Etiquete los clústeres de EKS y los recursos asociados (funciones de IAM, depósitos de backup de S3, subredes) con metadatos de entorno y propiedad para facilitar el seguimiento de los costes y la visibilidad operativa. Para obtener más información, consulte la [documentación sobre el etiquetado de los recursos de AWS](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html.). Puede editar el archivo de flujo de trabajo para añadir etiquetas personalizadas durante el proceso de migración. 
  + Configure alertas de AWS Cost Explorer para monitorear los cambios en los costos de procesamiento después de habilitar el modo automático, ya que el modo automático puede cambiar los tipos de instancias y el comportamiento de escalado. Para obtener más información, consulte la [documentación sobre cómo analizar los costos con AWS Cost Explorer](https://docs.aws.amazon.com/cost-management/latest/userguide/ce-what-is.html.).  
+ **Operaciones**: 
  + Mantenga el archivo de flujo de trabajo y las configuraciones de Terraform en el control de versiones y documente cualquier anulación específica del entorno, como la región, el ARN del rol o el nombre del bucket de S3.   

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

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure el GitHub repositorio. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/enable-eks-auto-mode-using-github-actions.html) | AWS DevOps, arquitecto de nube | 

### (Opcional) Configure un rol de IAM
<a name="optional-set-up-an-iam-role"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure IAM para realizar copias de seguridad y eliminar grupos de nodos | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/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>**Sustituya **$CLUSTER\_NAME y $ACCOUNT\_ID** por los valores adecuados.** [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/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 />Sustituya **$AWS\_REGION y $ROLE\_ARN por la región** **específica y el ARN** del rol de IAM creado anteriormente, respectivamente.  | AWS DevOps, arquitecto de nube | 

### Ejecute y valide
<a name="execute-and-validate"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Activa el flujo de trabajo de GitHub acciones. | El flujo de trabajo se activa automáticamente cuando se introduce algún cambio en las ramas de funciones, principales o de desarrollo. Para activarlo manualmente mediante la GitHub interfaz de usuario: 1. Ve al repositorio el GitHub 2. Haga clic en la pestaña «Acciones» 3. Seleccione el flujo de trabajo (canalización de modo automático) 4. Haga clic en el botón «Ejecutar flujo de trabajo» 5. Elija la rama y haga clic en «Ejecutar flujo de trabajo»<br />El flujo de trabajo gestiona la [verificación](https://github.com/aws-samples/sample-enable-eks-auto-mode-using-github-actions/blob/22b546b05630c63e5637928ad8a4f5947ad8fb33/.github/workflows/enable-eks-auto-mode.yml#L283) tras la migración consultando la configuración informática de cada clúster migrado mediante la AWS CLI para confirmar que el modo automático de EKS se ha activado correctamente y muestra la configuración informática actual en formato de tabla. | AWS DevOps, arquitecto de nube | 

### Configure la implementación en varios entornos
<a name="configure-multi-environment-deployment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implementación de un despliegue en varios entornos. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/enable-eks-auto-mode-using-github-actions.html) |  | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Eliminación de recursos. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/enable-eks-auto-mode-using-github-actions.html) | AWS general, arquitecto de nube | 

## Resolución de problemas
<a name="enable-eks-auto-mode-using-github-actions-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| **Problemas de autenticación**<br /><br /> | • Compruebe que el proveedor de GitHub OIDC esté configurado correctamente en AWS IAM <br />• Comprueba que el ARN del rol de IAM en git secrets coincide con el rol real creado con terraform () GitHubActionsEKSRole<br />• Asegúrese de que el GitHub repositorio tenga configurados los secretos necesarios: AWS\_REGION y. AWS\_ROLE\_ARN<br />• Valide que la configuración de la región de AWS coincida con las ubicaciones de sus clústeres | 
| **¿Problemas con los permisos**<br /><br /> | <role-arn>• Pruebe los permisos de los roles de IAM localmente: bash aws sts assume-role --role-arn --role-session-name test-session aws eks list-clusters<br />• Asegúrese de UpdateClusterConfig que el DescribeCluster rol tenga los permisos eks: y eks: | 
| **Compatibilidad de clústeres**<br /><br /> | <cluster-name>• Confirme que los clústeres de EKS ejecutan Kubernetes 1.29 o superior: bash aws eks describe-cluster --name --query 'cluster.version'<br />• Compruebe que los clústeres estén en estado ACTIVO antes de activar el modo automático | 
| **Fallos en el flujo**<br /> | • Compruebe los registros de GitHub acciones para ver si hay mensajes de error específicos<br /> • Compruebe la sintaxis del archivo de flujo de trabajo en. github/workflows/auto-mode-pipeline.yml<br /> • Asegúrese de que las variables de entorno estén configuradas correctamente en el flujo de trabajo | 

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

1. [Documentación oficial del modo automático EKS para empezar](https://docs.aws.amazon.com/eks/latest/userguide/automode.html)

1. [Actualización de la documentación de CLI de configuración de clústeres](https://docs.aws.amazon.com/cli/latest/reference/eks/update-cluster-config.html)

1. [GitHub secretos de las GitHub acciones](https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets)

1. [GitHub Documentación de acciones](https://docs.github.com/en/actions) 

1. [Documentación de la federación de la OIDC](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html) 