

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.

# Configuración del escalado automático basado en eventos en Amazon EKS mediante Amazon EKS Pod Identity y KEDA
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda"></a>

*Dipen Desai, Abhay Diwan, Kamal Joshi y Mahendra Revanasiddappa, Amazon Web Services*

## Resumen
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-summary"></a>

Las plataformas de orquestación, como [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html), han simplificado la administración del ciclo de vida de las aplicaciones basadas en contenedores. Esto ayuda a las organizaciones a centrarse en crear, proteger, operar y mantener aplicaciones basadas en contenedores. A medida que las implementaciones basadas en eventos se vuelven más comunes, las organizaciones escalan con mayor frecuencia las implementaciones de Kubernetes en función de diversos orígenes de eventos. Este método, combinado con el escalado automático, puede generar importantes ahorros de costos al proporcionar recursos de cómputo bajo demanda y un escalado eficiente que se adapta a la lógica de la aplicación.

[KEDA](https://keda.sh/) es un escalador automático basado en eventos que se basa en Kubernetes. KEDA lo ayuda a escalar cualquier contenedor de Kubernetes en función de la cantidad de eventos que deben procesarse. Es ligero y se integra con cualquier clúster de Kubernetes. También funciona con componentes estándar de Kubernetes, como el [escalado automático de pods horizontales (HPA)](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/). KEDA también ofrece una [TriggerAuthentication](https://keda.sh/docs/2.14/concepts/authentication/#re-use-credentials-and-delegate-auth-with-triggerauthentication)función que le ayuda a delegar la autenticación. Permite describir los parámetros de autenticación que están separados del contenedor de despliegue ScaledObject y del contenedor de despliegue.

AWS proporciona funciones AWS Identity and Access Management (IAM) que admiten diversas opciones de implementación de Kubernetes, incluidas Amazon EKS, Amazon EKS Anywhere Red Hat OpenShift Service en AWS (ROSA) y clústeres de Kubernetes autogestionados en Amazon Elastic Compute Cloud (Amazon). EC2 Estas funciones utilizan estructuras de IAM, como los proveedores de identidad de OpenID Connect (OIDC) y las políticas de confianza de IAM, para funcionar en diferentes entornos sin depender directamente de los servicios de Amazon EKS o. APIs Para obtener más información, consulte [Roles de IAM para cuentas de servicio](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) en la documentación de Amazon EKS.

[Amazon EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html) simplifica el proceso para que las cuentas de servicio de Kubernetes asuman roles de IAM sin necesidad de proveedores de OIDC. Ofrece la posibilidad de administrar las credenciales de sus aplicaciones. En lugar de crear y distribuir tus AWS credenciales a los contenedores o usar el rol de la EC2 instancia de Amazon, asocias un rol de IAM a una cuenta de servicio de Kubernetes y configuras tus Pods para que usen la cuenta de servicio. Esto lo ayuda a utilizar un rol de IAM en varios clústeres y simplifica la administración de políticas al permitir la reutilización de las políticas de permisos en todos los roles de IAM.

Al implementar KEDA con Amazon EKS Pod Identity, las empresas pueden lograr un escalado automático eficiente basado en eventos y una administración de credenciales simplificada. Las aplicaciones se escalan en función de la demanda, lo que optimiza la utilización de los recursos y reduce los costos.

Este patrón lo ayuda a integrar Amazon EKS Pod Identity con KEDA. Muestra cómo puede utilizar la cuenta de servicio `keda-operator` y delegar la autenticación con `TriggerAuthentication`. También describe cómo configurar una relación de confianza entre un rol de IAM para el operador de KEDA y un rol de IAM para la aplicación. Esta relación de confianza permite a KEDA supervisar los mensajes de las colas de eventos y ajustar la escala de los objetos de Kubernetes de destino.

## Requisitos previos y limitaciones
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-prereqs"></a>

**Requisitos previos **
+ AWS Command Line Interface [(AWS CLI) versión 2.13.17 o posterior, instalada](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ La versión 3.11.5 o posterior de Python [instalada](https://www.python.org/downloads/)
+ AWS SDK para Python (Boto3) [versión 1.34.135 o posterior, instalada](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)
+ La versión 3.12.3 o posterior de Helm [instalada](https://helm.sh/docs/intro/install/)
+ La versión 1.25.1 o posterior de kubectl [instalada](https://kubernetes.io/docs/tasks/tools/)
+ La versión 26.1.1 o posterior de Docker Engine [instalada](https://docs.docker.com/engine/install/)
+ Un clúster de Amazon EKS (versión 1.24 o posterior) [creado](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)
+ Se [cumplen](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html#pod-id-agent-add-on-create) los requisitos previos para crear el agente de Amazon EKS Pod Identity

**Limitaciones**
+ Es necesario establecer una relación de confianza entre los roles `keda-operator` y `keda-identity`. Las instrucciones se proporcionan en la sección [Epics](#event-driven-auto-scaling-with-eks-pod-identity-and-keda-epics) de este patrón.

## Arquitectura
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-architecture"></a>

En este patrón, se crean los siguientes recursos: AWS 
+ **Repositorio de Amazon Elastic Container Registry (Amazon ECR)**: en este patrón, este repositorio se denomina `keda-pod-identity-registry`. Este repositorio privado se usa para almacenar imágenes de Docker de la aplicación de muestra.
+ **Cola de Amazon Simple Queue Service (Amazon SQS)**: en este patrón, esta cola se denomina `event-messages-queue`. La cola actúa como un búfer de mensajes que recopila y almacena los mensajes entrantes. KEDA supervisa las métricas de la cola, como el recuento de mensajes o la longitud de la cola, y escala automáticamente la aplicación en función de estas métricas.
+ **Rol de IAM para la aplicación**: en este patrón, este rol se denomina `keda-identity`. El rol `keda-operator` asume este rol. Este rol permite tener acceso a la cola de Amazon SQS.
+ **Rol de IAM para el operador KEDA**: en este patrón, este rol se denomina `keda-operator`. El operador KEDA usa esta función para realizar las llamadas a la AWS API necesarias. Este rol concede permisos para asumir el rol `keda-identity`. Debido a la relación de confianza entre los roles `keda-operator` y `keda-identity`, el rol `keda-operator` tiene permisos de Amazon SQS.

A través de los recursos personalizados `TriggerAuthentication` y `ScaledObject` de Kubernetes, el operador usa el rol `keda-identity` para conectarse con una cola de Amazon SQS. En función del tamaño de la cola, KEDA escala automáticamente la implementación de la aplicación. Añade 1 pod por cada 5 mensajes no leídos de la cola. En la configuración predeterminada, si no hay mensajes sin leer en la cola de Amazon SQS, la aplicación se reduce verticalmente a 0 pods. El operador de KEDA supervisa la cola en un intervalo especificado.

 

La siguiente imagen muestra cómo se utiliza Amazon EKS Pod Identity para proporcionar al rol `keda-operator` un acceso seguro a la cola de Amazon SQS.

![Uso de KEDA y Amazon EKS Pod Identity para escalar automáticamente una aplicación basada en Kubernetes.](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/56f7506d-e8d3-43e5-bec6-42267fedd0ae/images/05bdbd09-9eb8-4c0b-8c0d-efe38aecb683.png)


En el diagrama, se muestra el siguiente flujo de trabajo:

1. El agente Amazon EKS Pod Identity se instala en el clúster de Amazon EKS.

1. El operador de KEDA se implementa en el espacio de nombres de KEDA del clúster de Amazon EKS.

1. Los roles `keda-operator` y de `keda-identity` IAM se crean en el destino. Cuenta de AWS

1. Se establece una relación de confianza entre los roles de IAM.

1. La aplicación se implementa en el espacio de nombres `security`.

1. El operador de KEDA sondea los mensajes de una cola de Amazon SQS.

1. KEDA inicia HPA, que escala automáticamente la aplicación en función del tamaño de la cola.

## Tools (Herramientas)
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-tools"></a>

**Servicios de AWS**
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) le ayuda a ejecutar AWS Kubernetes sin necesidad de instalar o mantener su propio plano de control o nodos de Kubernetes.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.
+ [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) ofrece una cola alojada segura, duradera y disponible que le permite integrar y desacoplar sistemas y componentes de software distribuidos.

**Otras herramientas**
+ [KEDA](https://keda.sh/) es un escalador automático basado en eventos que se basa en Kubernetes.

**Repositorio de código**

El código de este patrón está disponible en el [escalado GitHub automático basado en eventos mediante EKS Pod Identity y el repositorio KEDA](https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda/tree/main).

## Prácticas recomendadas
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-best-practices"></a>

Recomendamos que siga las siguientes prácticas recomendadas:
+ [Prácticas recomendadas de Amazon EKS](https://docs.aws.amazon.com/eks/latest/best-practices/introduction.html)
+ [Security best practices in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) (Prácticas recomendadas de seguridad en IAM)
+ [Prácticas recomendadas de Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-best-practices.html)

## Epics
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-epics"></a>

### Cree recursos AWS
<a name="create-aws-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree el rol de IAM del operador de KEDA. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Administrador de AWS | 
| Cree un rol de IAM para la aplicación de muestra. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Administrador de AWS | 
| Crear una cola de Amazon SQS. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS general | 
| Cree un repositorio de Amazon ECR. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS general | 

### Configuración de un clúster de Amazon EKS
<a name="set-up-the-eks-cluster"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente el agente Amazon EKS Pod Identity. | Para el clúster de Amazon EKS, configure el agente Amazon EKS Pod Identity. Siga las instrucciones de [Configuración del agente Amazon EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html#pod-id-agent-add-on-create) en la documentación de Amazon EKS. | AWS DevOps | 
| Implemente KEDA. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingeniero | 
| Asigne el rol de IAM a la cuenta de servicio de Kubernetes. | Siga las instrucciones de [Asignación de un rol de IAM a una cuenta de servicio de Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-association.html) en la documentación de Amazon EKS. Use los siguientes valores:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS DevOps | 
| Creación de un espacio de nombres de . | Introduzca el siguiente comando para crear un espacio de nombres `security` en el clúster de Amazon EKS de destino:<pre>kubectl create ns security</pre> | DevOps ingeniero | 

### Implemente la aplicación de muestra.
<a name="deploy-the-sample-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clone los archivos de la aplicación. | Introduzca el siguiente comando para clonar el [autoescalado basado en eventos mediante EKS Pod Identity y el repositorio KEDA desde](https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda/tree/main): GitHub<pre>git clone https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda.git</pre> | DevOps ingeniero | 
| Cree la imagen de Docker. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingeniero | 
| Envíe la imagen de Docker a Amazon ECR. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html)Para encontrar los comandos de inserción, vaya a la página del repositorio de Amazon ECR y, a continuación, seleccione **Ver comandos de inserción**. | DevOps ingeniero | 
| Implemente la aplicación de muestra. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingeniero | 
| Asigne el rol de IAM a la cuenta de servicio de la aplicación. | Realice una de las siguientes acciones para asociar el rol de IAM `keda-identity` a la cuenta de servicio de la aplicación de ejemplo:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingeniero | 
| Implemente `ScaledObject` y `TriggerAuthentication`. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingeniero | 

### Prueba de escalado automático
<a name="test-auto-scaling"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Envíe mensajes a la cola de Amazon SQS. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingeniero | 
| Supervise los pods de aplicaciones. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingeniero | 

## Resolución de problemas
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| El operador de KEDA no puede escalar la aplicación. | Introduzca el siguiente comando para comprobar los registros del rol de IAM `keda-operator`:<pre>kubectl logs -n keda -l app=keda-operator -c keda-operator</pre><br /> <br />Si hay un código de respuesta`HTTP 403`, la aplicación y el escalador de KEDA no tienen permisos suficientes para acceder a la cola de Amazon SQS. Realice los siguientes pasos:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html)<br />Si se produce un error `Assume-Role`, el [rol de IAM de un nodo de Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html) no puede asumir el rol de IAM que está definido para `TriggerAuthentication`. Realice los siguientes pasos:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | 

## Recursos relacionados
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-resources"></a>
+ [Configuración del agente Amazon EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html) (documentación de Amazon EKS)
+ [Implementación de KEDA](https://keda.sh/docs/2.14/deploy/) (documentación de KEDA)
+ [ScaledObject especificación](https://keda.sh/docs/2.16/reference/scaledobject-spec/) (documentación de KEDA)
+ [Autenticación con TriggerAuthentication](https://keda.sh/docs/2.14/concepts/authentication/) (documentación de KEDA)