Configuré un clúster de AWS ECS con 3 instancias (m5.large), con una instancia en cada zona de disponibilidad (A, B y C). El Servicio se configura de la siguiente manera:
En la definición de tareas, he usado lo siguiente:
A nivel de contenedor, he configurado solo Memory Soft Limit:
He usado awslogs para iniciar sesión. La configuración anterior funciona y cuando inicio el servicio, hay una ventana acoplable ejecutándose en cada una de las instancias. Las 'estadísticas de la ventana acoplable' en una de las instancias muestran lo siguiente:
MEM USAGE / LIMIT 230MiB / 7.501GiBY la instancia del contenedor (Consola de ECS) muestra lo siguiente:
Resources Registered Available CPU 2048 2048 Memory 7680 5632 Ports 5 portsLos resultados anteriores son los mismos en las 3 instancias: se han reservado 2 GB de memoria (límite suave) y el límite de memoria superior es una memoria de instancia de casi 8 GB (sin límite estricto establecido). Todo funciona como se esperaba hasta ahora.
Pero cuando vuelvo a implementar el código (usando la implementación forzada) de Jenkins, aparece el siguiente error en el registro de Jenkins:
"message": "(service App-V1-Service) was unable to place a task because no container instance met all of its requirements. The closest matching (container-instance 90d4ba21-4b19-4e31-c42d-d7223b34f17b) has insufficient memory available. For more information, see the Troubleshooting section of the Amazon ECS Developer Guide.En Jenkins, el trabajo aparece como 'Éxito', pero es la versión anterior del código la que se está ejecutando. Hay suficiente memoria disponible en las tres instancias. Además, cambié el porcentaje saludable mínimo a 30 con la esperanza de que ECS pueda detener el contenedor y volver a colocar el nuevo. Cualquier solución o sugerencia para depurar esto más a fondo será de gran ayuda.
Al igual que durante la implementación, el cronograma de ECS asignará la memoria según el límite flexible para cada contenedor que se pueda
2048 * 3 = 6144 MBque es menor que la memoria disponible en la instancia
5632 (available memory) < 6144 (required memory)Si está ejecutando una réplica en la misma instancia de contenedor de ECS, le recomendaré mantener un límite suave mínimo que debe ser menor o igual a 1 GB . ECS también lo sugiere.
Entonces, con esta configuración, también ejecutará la implementación azul-verde . Como esto, no hay nada de malo en mantener el límite suave mínimo , ya que el contenedor puede escalar para usar más memoria cuando se requiere, por lo que aplicar un poco de memoria grande para el límite suave no afecta el rendimiento.
No recomendaré bajar el Minimum Healthy Percent: 0 ya que disminuir el límite suave a 1 GB resolverá el problema .
O si desea mantener el mismo límite de memoria, reduzca el Minimum Healthy Percent