Escalado automático de clústeres de Amazon ECS - Amazon Elastic Container Service

Escalado automático de clústeres de Amazon ECS

importante

Desde el 27 de mayo de 2022, Amazon ECS ha cambiado la forma en la que administra los recursos que facilitan el escalado automático de clústeres. Para obtener más información, consulte Actualización de la forma en que Amazon ECS crea recursos para el escalado automático de clústeres.

Amazon ECS puede administrar el escalado de las instancias de Amazon EC2 registradas en el clúster. A esto se lo conoce como escalado automático de clústeres de Amazon ECS. Esto se realiza mediante un proveedor de capacidad de grupo de escalado automático de Amazon ECS con escalado administrado activado. Al utilizar un proveedor de capacidad de grupo de escalado automático con escalado administrado activado, Amazon ECS crea dos métricas personalizadas de CloudWatch y una política de escalado de seguimiento de destino que se adjunta al grupo de escalado automático. A continuación, Amazon ECS administra las acciones de reducción o escalado horizontal del grupo de escalado automático en función de la carga de tareas en el clúster. Para obtener más información acerca de los proveedores de capacidad de grupos de escalado automático, consulte Proveedores de capacidad de grupos de Auto Scaling.

nota

El escalado automático de clústeres de Amazon ECS solo se admite cuando se utilizan proveedores de capacidad de grupos de escalado automático. Para cargas de trabajo de Amazon ECS alojadas en AWS Fargate, consulte Proveedores de capacidad de AWS Fargate.

Cómo funciona el Auto Scaling de clúster

El siguiente es el flujo de trabajo básico que se utiliza para el escalado automático de clústeres de Amazon ECS. Para obtener más información, consulte Active el Auto Scaling de clústeres .

  1. Creación de un grupo de Auto Scaling

  2. Cree un proveedor de capacidad que utilice ese grupo de escalado automático

  3. Active el escalado administrado para el proveedor de capacidad

  4. Asocie el proveedor de capacidad con un clúster

Para cada proveedor de capacidad de grupo de escalado automático asociado a un clúster, Amazon ECS crea y administra los siguientes recursos.

  • Una alarma CloudWatch de bajo valor métrico

  • Una alarma CloudWatch de alto valor métrico

  • Una política de escalado de seguimiento de destino

    nota

    Amazon ECS crea la política de escalado de seguimiento de destino y la asocia al grupo de escalado automático. Para actualizar la política de escalado de seguimiento de destino, debe actualizar la configuración de escalado administrada por el proveedor de capacidad en lugar de actualizar la política de escalado directamente.

Cuando se desactiva el escalado administrado o se desasocia el proveedor de capacidad de un clúster, Amazon ECS elimina tanto las métricas de CloudWatch como los recursos de política de escalado de seguimiento de destino.

Las siguientes métricas ayudan a determinar qué acciones se deben llevar a cabo:

  • CapacityProviderReservation: porcentaje de instancias de contenedores de clúster que se utilizan para un proveedor de capacidad específico. Amazon ECS genera esta métrica.

  • DesiredCapacity: la cantidad de capacidad del grupo de Auto Scaling.

Amazon ECS inicia el proceso de Auto Scaling del clúster para cada proveedor de capacidad asociado a su clúster. Cada minuto, Amazon ECS recopila información que determina si el grupo de Auto Scaling necesita escalar o no. Cuando las tareas iniciadas no se pueden colocar en instancias disponibles, el grupo de Auto Scaling se reduce al lanzar nuevas instancias. Cuando hay instancias en ejecución sin tareas, el grupo de escalado automático se reduce horizontalmente mediante la terminación de instancias sin tareas en ejecución.

Amazon ECS inicia la métrica CapacityProviderReservation y, a continuación, publica la métrica en CloudWatch en el espacio de nombres de AWS/ECS/ManagedScaling. La métrica CapacityProviderReservation hace que se produzca una de las siguientes acciones:

  • El valor CapacityProviderReservation es igual al 100 %: el grupo de Auto Scaling no necesita recudir ni escalar horizontalmente, porque todas las instancias de contenedores ejecutan al menos una tarea que no es daemon.

  • El valor CapacityProviderReservation superior al 100 %: no hay instancias disponibles para las tareas iniciadas. La métrica CapacityProviderReservation genera una alarma de CloudWatch. Esta alarma actualiza el valor DesiredCapacity del grupo de Auto Scaling. El grupo de Auto Scaling utiliza este valor para lanzar instancias EC2 y, a continuación, registrarlas en el clúster.

  • El valor CapacityProviderReservation es inferior al 100 %: hay al menos una instancia de contenedor que no ejecuta una tarea que no sea daemon. La métrica CapacityProviderReservation genera una alarma de CloudWatch. Esta alarma actualiza el valor DesiredCapacity del grupo de Auto Scaling. El grupo de Auto Scaling utiliza este valor para terminar las instancias de contenedor de EC2 y, a continuación, anularlas del registro del clúster.

Consideraciones de Auto Scaling de clústeres

Cuando se utiliza el Auto Scaling de clústeres, se debe tener en cuenta lo siguiente:

  • La capacidad deseada para el grupo de Auto Scaling asociado a un proveedor de capacidad no debe cambiarse ni administrarse mediante ninguna política de escalado que no sea la que administra Amazon ECS.

  • Amazon ECS utiliza un rol de IAM vinculado al servicio AWSServiceRoleForECS para los permisos que necesita para llamar a AWS Auto Scaling en su nombre. Para obtener más información acerca del uso y la creación de roles de IAM vinculados al servicio de Amazon ECS, consulte Rol vinculado a servicios para Amazon ECS.

  • Cuando se utilizan proveedores de capacidad con grupos de Auto Scaling, el usuario de IAM que crea el proveedor de capacidad necesita el permiso autoscaling:CreateOrUpdateTags porque Amazon ECS agrega una etiqueta al grupo de Auto Scaling cuando lo asocia al proveedor de capacidad.

    importante

    Asegúrese de que las herramientas que utilice no eliminen la etiqueta AmazonECSManaged del grupo de Auto Scaling. Si se elimina esta etiqueta, Amazon ECS no podrá administrarlo al realizar el escalado del clúster.

  • El Auto Scaling de clústeres no modifica la MinimumCapacity o MaximumCapacity para el grupo. Para que el grupo escale horizontalmente, el valor de MaximumCapacity (Capacidad máxima) debe ser mayor o igual que 0.

  • Un proveedor de capacidad solo se puede conectar a un clúster al mismo tiempo cuando el escalado administrado está activado. Si el proveedor de capacidad ha desactivado el escalado administrado, puede asociarlo a varios clústeres.

  • Cuando se desactiva el escalado administrado, el proveedor de capacidad no realiza operaciones de reducción horizontal ni escalado horizontal. En este caso, puede utilizar una estrategia de proveedor de capacidad para equilibrar las tareas entre los proveedores de capacidad.

  • Amazon ECS utiliza la estrategia de ubicación y las restricciones de ubicación con la capacidad existente en el momento actual. Una estrategia de ubicación puede distribuir las tareas entre zonas de disponibilidad o instancias de Amazon ECS. Esta estrategia difunde con el tiempo todas las tareas en todas las instancias para que cada tarea en ejecución se inicie en su propia instancia dedicada. Para evitar este comportamiento, no utilice la estrategia spread junto con la estrategia binpack. Para obtener más información, consulte Estrategias de ubicación de tareas de Amazon ECS .

Considere lo siguiente al utilizar la nueva consola:

  • La característica de escalado administrado de Amazon ECS está activada de forma predeterminada. Para obtener más información, consulte Comportamiento de escalado horizontal administrado .

  • La terminación administrada está apagada de forma predeterminada.

  • La protección de reducción horizontal de instancias de Auto Scaling está apagada de forma predeterminada. Para obtener más información, consulte Uso de la protección para la reducción horizontal de instancias en la Guía del usuario de Amazon EC2 Auto Scaling.

  • El grupo de Auto Scaling utilizado con el proveedor de capacidad no puede tener ajustes de ponderación de instancias. No se admite la ponderación de instancias cuando se utiliza con un proveedor de capacidad de Amazon ECS.

Protection de terminación administrada

La protección contra la reducción horizontal en instancias de Auto Scaling controla qué instancias EC2 se pueden terminar. Las instancias con la característica de reducción horizontal activada no se pueden terminar durante el proceso de reducción horizontal. La protección de terminación administrada significa que Amazon ECS solo termina las instancias de EC2 que no tienen ninguna ejecución de tareas que no sean daemon de Amazon ECS. Cuando utiliza la protección de terminación administrada, Amazon ECS activa primero la opción de protección de reducción horizontal para las instancias de EC2 del grupo de Auto Scaling y, a continuación, coloca las tareas en las instancias. Cuando se detienen todas las tareas que no son daemon en una instancia, Amazon ECS inicia el proceso de reducción horizontal y desactiva la protección de reducción horizontal de la instancia de EC2. El grupo de Auto Scaling puede terminar la instancia.

Consideraciones de protección contra la terminación administrada

Cuando utilice la protección contra terminación administrada con la nueva consola, tenga en cuenta lo siguiente:

  • El grupo de Auto Scaling se configura automáticamente para usar la protección de instancias administradas y el escalado administrado.

  • La protección de reducción horizontal de instancias de Auto Scaling está apagada de forma predeterminada. Para obtener más información, consulte Uso de la protección para la reducción horizontal de instancias en la Guía del usuario de Amazon EC2 Auto Scaling.

Comportamiento de escalado horizontal administrado

Cuando tiene proveedores de capacidad de grupos de Auto Scaling que usan escalado administrado habilitado, Amazon ECS calcula el límite mínimo del número óptimo de instancias que se van a agregar al clúster y utiliza este valor para determinar cuántas instancias se deben solicitar. A continuación, se describe el comportamiento de escalado horizontal en más detalle.

  1. Agrupe todas las tareas de aprovisionamiento de tal modo que cada grupo tenga exactamente los mismos requisitos de recursos.

  2. Cuando se utilizan varios tipos de instancias en un grupo, las instancias del grupo de Auto Scaling se ordenan por sus parámetros, como vCPU, memoria, interfaces de red elásticas (ENI), puertos y GPU. Se seleccionan los tipos de instancias más pequeños y más grandes para cada parámetro. Para obtener más información acerca de cómo elegir el tipo de instancia, consulte Characterizing your application (Caracterización de la aplicación) en laGuía de prácticas recomendadas de Amazon ECS.

  3. Para cada grupo de tareas, Amazon ECS calcula el número de instancias requeridas para ejecutar las tareas no colocadas. Este cálculo utiliza una estrategia binpack que tiene en cuenta los requisitos de vCPU, memoria, interfaces de red elásticas (ENI), puertos y GPU de las tareas y la disponibilidad de recursos de las instancias de Amazon EC2. Los valores de los tipos de instancias más grandes se consideran como el recuento máximo de instancias calculado. Los valores del tipo de instancia más pequeño se utilizan como protección. Si el tipo de instancia más pequeño no puede ejecutar al menos una instancia de la tarea, el cálculo considera que la tarea no es compatible y se excluye del cálculo de escalado horizontal. Cuando ninguna de las tareas es compatible con el tipo de instancia más pequeño, el clúster de Auto Scaling se detiene y el valor CapacityProviderReservation se mantiene en el 100 %.

  4. Amazon ECS publica la métrica CapacityProviderReservation en CloudWatch con respecto al minimumScalingStepSize si el recuento máximo de instancias calculado es menor que el tamaño mínimo del paso de escalado, o el menor valor del maximumScalingStepSize o del recuento máximo de instancias calculado.

  5. Las alarmas de CloudWatch consumen la métrica CapacityProviderReservation (publicada por Amazon ECS) para los proveedores de capacidad y aumentan la DesiredCapacity del grupo de Auto Scaling solo cuando el valor es mayor que el valor targetCapacity. El valor targetCapacity es una configuración de proveedor de capacidad que se envía a la alarma de CloudWatch durante la fase en que se activa el escalado automático del clúster.

    Puede fijar la targetCapacity cuando crea el grupo de escalado automático o modificar el valor después de crear el grupo. El valor predeterminado es 100 %.

  6. El grupo de Auto Scaling lanza instancias de EC2 adicionales. Para evitar el sobreaprovisionamiento de la operación de escalado horizontal, el escalado automática se asegura de que la capacidad de la instancia de EC2 lanzada recientemente se estabilice antes de lanzar nuevas instancias. El escalado automático comprueba si todas las instancias existentes han superado el instanceWarmupPeriod (ahora menos el tiempo de lanzamiento de la instancia). Si alguna instancia se encuentra dentro del instanceWarmupPeriod, Amazon ECS bloquea la operación de escalado horizontal hasta que finalice el instanceWarmupPeriod.

    El número predeterminado de segundos para que se caliente una instancia recién lanzada es de 300.

Para obtener una explicación más detallada de cómo funciona esta lógica, consulte Profundización en el escalado automático de clústeres de Amazon ECS.

Consideraciones de escalado horizontal

Tenga en cuenta lo siguiente para el proceso de escalado horizontal:

  1. Aunque existen varias restricciones de ubicación, le recomendamos que solo use la restricción de ubicación de tareas distinctInstance. Esta restricción de ubicación evita que el proceso de escalado horizontal se detenga porque está utilizando una restricción de ubicación que no es compatible con las instancias muestreadas.

  2. El escalado administrado funciona mejor si el grupo de Auto Scaling utiliza los mismos tipos de instancia o similares. Para obtener más información, consulte Comportamiento de escalado horizontal administrado .

  3. Cuando se requiere un proceso de escalado horizontal y no hay instancias de contenedores disponibles y, a continuación, una instancia de contenedor está disponible, Amazon ECS siempre se escala al 200 % (dos instancias).

  4. El instanceWarmupPeriod podría afectar al límite de escala general, porque el segundo paso de escalado horizontal espera hasta que el tiempo del instanceWarmupPeriod caduca. Si necesita reducir este tiempo, asegúrese de que el valor sea lo suficientemente grande como para que la instancia de EC2 lance e inicie el agente de Amazon ECS (lo que evita el sobreaprovisionamiento).

  5. El Auto Scaling de clústeres admite configuración de lanzamiento, plantillas de lanzamiento y varios tipos de instancias en el grupo de Auto Scaling del proveedor de capacidad. También puede utilizar la selección del tipo de instancia basada en atributos sin tener varios tipos de instancias.

  6. Cuando utilice un grupo de Auto Scaling con tipos de instancias bajo demanda e instancias múltiples o instancias de spot, coloque los tipos de instancias más grandes en la lista de prioridades y no especifique ninguna ponderación. En este momento, no se admite la especificación de ponderaciones. Para obtener más información, consulte Grupos de Auto Scaling con varios tipos de instancias en la Guía del usuario de AWS Auto Scaling.

  7. A continuación, Amazon ECS lanzará el minimumScalingStepSize si el recuento máximo de instancias calculado es menor que el tamaño mínimo del paso de escalado, o el maximumScalingStepSize o el valor del recuento máximo de instancias calculado, de ambas opciones, la que sea menor.

  8. Si se trata de un servicio Amazon ECS, o la API de run-task lanza una tarea y las instancias de contenedor del proveedor de capacidad no tienen recursos suficientes para iniciar la tarea, a continuación, Amazon ECS limita el número de tareas con este estado para cada clúster e impide que cualquier tarea se ejecute por encima de este límite. Para obtener más información, consulte Cuotas de servicio de Amazon ECS .

Comportamiento de reducción horizontal administrada

Amazon ECS supervisa las instancias de contenedor de cada proveedor de capacidad dentro del clúster. Cuando al menos una instancia de contenedor no tiene al menos una tarea en ejecución, se considera vacía y Amazon ECS inicia el proceso la reducción horizontal. A continuación, se describe este comportamiento con más detalle.

  1. Amazon ECS calcula el número de instancias de contenedores vacías. Una instancia de contenedor se considera vacía cuando no se están ejecutando tareas sin daemon.

  2. Amazon ECS establece el valor CapcityProviderReservation a 100: el número de instancias de contenedor vacías. Por ejemplo, si el número de instancias de contenedor vacías es 2, el valor se establece en 98 %. A continuación, Amazon ECS publica la métrica en CloudWatch.

  3. La métrica CapacityProviderReservation genera una alarma de CloudWatch. Esta alarma actualiza el valor DesiredCapacity del grupo de Auto Scaling. Si ocurre una de las siguientes acciones:

    • Si no utiliza la terminación administrada del proveedor de capacidad, el grupo de Auto Scaling termina y el número del grupo de Auto Scaling terminará el número de instancias de EC2 para llegar a DesiredCapacity. A continuación, las instancias de contenedor se anulan del registro del clúster.

    • Si todas las instancias de contenedor utilizan la protección de terminación administrada del proveedor de capacidad, Amazon ECS elimina la protección de reducción horizontal de las instancias de contenedor que no tienen tareas que no sean daemon en ejecución. El grupo de Auto Scaling podrá terminar las instancias de EC2. A continuación, las instancias de contenedor se anulan del registro del clúster.

Consideraciones de reducción horizontal

Tenga en cuenta lo siguiente para el proceso de reducción horizontal:

  • La instancia de contenedor de Amazon ECS se considera disponible para reducir horizontalmente cuando no hay tareas que no sean daemon en ejecución.

  • Las alarmas de reducción horizontal de CloudWatch requieren 15 puntos de datos (15 minutos) antes de que comience el proceso de reducción horizontal del grupo de Auto Scaling. Una vez que se inicia el proceso de reducción horizontal hasta que Amazon ECS necesite reducir el número de instancias de contenedores registradas, el grupo de Auto Scaling establece el valor DesireCapacity superior a una instancia y menos del 10 % por minuto.

  • Cuando Amazon ECS solicita un escalado horizontal (cuando CapcityProviderReservation es superior a 100) mientras un proceso de reducción horizontal está en curso, el proceso de reducción se detiene y comenzará desde el principio si es necesario.

Consideraciones de seguimiento de destino

Al crear o actualizar un proveedor de capacidad con el escalado administrado activado, puede configurar el targetCapacity para que las tareas futuras se puedan lanzar más rápidamente sin esperar a que el grupo de escalado automático lance más instancias. Amazon ECS utiliza el valor de capacidad de destino para administrar la métrica de CloudWatch que crea el servicio para facilitar el escalado automático de clústeres. Amazon ECS administra la métrica de CloudWatch para que el grupo de escalado automático se trate como un estado estable para que no se requiera ninguna acción de escalado. Los valores pueden ser del 0 al 100 %. Por ejemplo, para configurar Amazon ECS para que 10 % de la capacidad se mantenga libre además de la utilizada por las tareas de Amazon ECS, establezca el valor de capacidad de destino en 90 %.

Al establecer el valor targetCapacity para un proveedor de capacidad, se debe tener en cuenta lo siguiente.

  • Un valor targetCapacity inferior al 100 % representa la cantidad de capacidad libre (instancias de Amazon EC2) que debe estar presente en el clúster. Capacidad libre significa que no hay tareas en ejecución.

  • Restricciones de ubicación, tales como zonas de disponibilidad, sin más binpack obliga a Amazon ECS a ejecutar finalmente una tarea por instancia, lo que podría no ser el comportamiento deseado. Para evitar este comportamiento, no utilice la estrategia spread junto con la estrategia binpack.

Actualización de la forma en que Amazon ECS crea recursos para el escalado automático de clústeres

Desde el 27 de mayo de 2022, Amazon ECS ha cambiado la forma en la que administra los recursos que facilitan el escalado automático de clústeres. Para simplificar la experiencia, Amazon ECS ya no requiere un plan de escalado de AWS Auto Scaling cuando se habilita el escalado administrado en un proveedor de capacidad de grupo de escalado automático. Este cambio no tiene ningún impacto funcional en los flujos de trabajo de escalado automático de clústeres y no afecta a los precios ni al rendimiento.

Los proveedores de capacidad creados antes del 27 de mayo de 2022 que utilizan los planes de escalado de AWS Auto Scaling seguirán funcionando como antes.

Revise las siguientes consideraciones:

  • Le recomendamos que no actualice ni elimine el plan de escalado de ECS-managed AWS Auto Scaling o los recursos de políticas de escalado asociados a sus proveedores de capacidad.

  • Podrá acceder al recurso del plan de escalado para clústeres en la consola de Auto Scaling, así como mediante el describe-clusters con archivos adjuntos. Para obtener más información, consulte la documentación de la API DescribeClusters.

  • El grupo de Auto Scaling que actúa como proveedor de capacidad de clúster no debe tener políticas de escalado.

  • El número de planes de Auto Scaling por cuenta es limitado. Para obtener más información, consulte Cuotas para los planes de escalado en la Guía del usuario de Amazon EC2 Auto Scaling.

A partir del 27 de mayo de 2022, Amazon ECS ya no crea un plan de escalado de AWS Auto Scaling para proveedores de capacidad creados recientemente. En su lugar, Amazon ECS utiliza la política de escalado de seguimiento de destino asociada al grupo de escalado automático para realizar un escalado dinámico basado en la especificación de la capacidad de destino. Para obtener más información, consulte Proveedores de capacidad de grupos de Auto Scaling .

Esta experiencia simplificada ahora le permite aprovechar un grupo de escalado automático existente con una política de escalado para utilizarla al crear un nuevo proveedor de capacidad. Le recomendamos no modificar los recursos (o el plan) de la política de escalado administrados por ECS. Sin embargo, al crear nuevos recursos de proveedor de capacidad, si tiene herramientas personalizadas que hicieron modificaciones al plan de escalado de AWS Auto Scaling, lleve a cabo una de las siguientes operaciones:

  • (Recomendado) Actualice su proveedor de capacidad para modificar la configuración de escalado administrado de Amazon ECS. Para obtener más información, consulte UpdateCapacityProvider.

  • Actualice la política de escalado asociada al grupo de escalado automático para modificar la configuración de seguimiento de destino utilizada. Para obtener más información, consulte PutScalingPolicy.