Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Aumenta las tareas de ECS por host

By Paul O'BrienAug 29, 20243 min read

Esta página también está disponible en English, Deutsch, Français, Italiano, 日本語 y Português.

¿Tienes problemas para ejecutar más de unas pocas tareas por host de ECS? Si es así, sigue leyendo y descubre una solución sencilla que aumentará drásticamente la cantidad de tareas de ECS que puedes correr.

Contexto

La configuración por defecto de ECS sobre EC2 limita la cantidad de tareas de ECS que pueden ejecutarse en cada nodo. El límite exacto depende del tipo de instancia que se utilice. Esta limitación se debe a que cada tarea requiere que se le asigne una Elastic Network Interface (ENI), lo que restringe la cantidad máxima de tareas por instancia.

¡ENI trunking al rescate!

El ENI trunking (con la configuración de cuenta awsvpcTrunking) permite que un host ejecute muchas más tareas. Esto se consigue usando la ENI principal para la comunicación del host y asignando ENIs adicionales para el trunking. Estas ENIs adicionales se agregan como branch interfaces hasta alcanzar el máximo permitido por ese tipo de instancia.

Tomemos un tipo de nodo bastante común: r5.xlarge. Por defecto admite tres tareas, pero al habilitar el ENI trunking, ese número sube a 20. (Tabla de referencia con el máximo de tareas por tipo de instancia.)

Habilitar trunking en un cluster existente

Habilitar el trunking al momento de crear un cluster de ECS funciona bien, pero ¿qué pasa si ya tienes un cluster y quieres activarlo ahora?

Primero, verifica si el trunking está habilitado con el siguiente comando. Puedes ejecutarlo desde CloudShell o desde una CLI configurada correctamente:

aws ecs list-attributes --target-type container-instance --attribute-name ecs.awsvpc-trunk-id --cluster <Cluster Name> --region <Region>

Si se devuelve una lista de atributos vacía, el cluster indicado no tiene el trunking habilitado.

Consideraciones sobre el trunking

Antes de habilitar el trunking, conviene revisar la documentación de AWS, donde se detallan sus limitaciones.

Las consideraciones más comunes del ENI trunking son:

  1. Solo se admite el modo de red awsvpc.
  2. El tipo de lanzamiento debe ser EC2 (Fargate no necesita esta función, ya que por defecto se asigna una ENI dedicada a cada tarea).
  3. No se admiten redes compartidas.
  4. No se admiten contenedores Windows.
  5. Debe existir el rol vinculado al servicio (se crea por defecto al crear el cluster de ECS).
  6. Las solicitudes DNS basadas en recursos IPV4 (registro A) no deben estar habilitadas (configuración por defecto al crear instancias EC2).

Habilitemos el trunking

Si usas la consola web de AWS para habilitar el trunking en un cluster existente, la interfaz mostrará que está activo, pero lo más probable es que el comando aws ecs list-attributes devuelva un arreglo de atributos vacío, lo que indica que en realidad no lo está.

La consola de AWS mostrando, posiblemente de forma incorrecta, que el trunking está habilitado

Si ese es el caso, puedes habilitar el trunking para todos los clusters de la cuenta ejecutando el siguiente comando:

aws ecs put-account-setting-default --name awsvpcTrunking --value enabled --region <Region>

Con este método, solo necesitas configurar el valor por defecto una vez por región para cada cuenta, ya que este comando establece la propiedad de configuración predeterminada de la cuenta para el trunking.

Las nuevas instancias de ECS tomarán el cambio de configuración, o puedes reiniciar las instancias ya desplegadas. Si usas un autoscaling group, aumenta la cantidad de instancias desplegadas y recicla los nodos para aplicar el cambio sin interrupciones.

Para confirmar que el trunking está funcionando, revisa el conteo de tareas por host o vuelve a ejecutar el comando aws ecs list-attributes. Ahora debería devolver una lista de interfaces habilitadas para trunking en lugar de un arreglo de atributos vacío.

Si todavía no conoces DoiT, te invitamos a descubrirnos. Nuestro equipo está listo para conocerte y entender tus necesidades de ingeniería en la nube. Contamos exclusivamente con talento senior de Engineering y nos especializamos en consultoría avanzada en la nube, diseño de arquitecturas y asesoría en debugging. ¡Contáctanos y conversemos!