¿La mejor manera de lanzar 100 máquinas Docker idénticas en AWS?

7

Necesito hacer algunas pruebas a gran escala en un sistema. El sistema consta de 2 partes principales: Administrador y Nodos. Solo habrá un servidor administrador, pero 100 nodos. Tanto el administrador como los nodos son imágenes de Docker.

Quiero poder activar una configuración en AWS, donde se inicia una instancia de un administrador y 100 instancias (una instancia por servidor) del nodo.

¿Qué usaría para esto? El administrador y los nodos deberían poder comunicarse entre sí, y los nodos no deberían tener equilibrio de carga de ninguna manera. Por lo tanto, necesitan una IP interna dedicada con la que el gerente pueda comunicarse.

He mirado ECS y CloudFormation + EC2 con un AMI personalizado, pero no estoy seguro de cuál es el camino a seguir.

Idealmente, quiero un script que pueda ejecutar de vez en cuando para iniciar los servidores y cerrarlos fácilmente.

¿Alguna sugerencia sobre lo que puedo hacer en AWS para iniciar esta configuración con facilidad?

Carretilla
fuente

Respuestas:

4

Mire AWS Fargate : le permite ejecutar sus contenedores Docker sin tener que girar las instancias EC2 para un clúster ECS. Simplemente programe las Tareas (o Servicios), cada una obtiene su propia dirección IP y pueden comunicarse entre sí.

También puede usar AWS Service Discovery para facilitar el registro y la búsqueda de las direcciones IP de las tareas.

Por cierto, tenga en cuenta que el límite de concurrencia predeterminado de Fargate es de 20 tareas / servicios: si necesita 100 de ellos, deberá aumentar un ticket de soporte de aumento del límite de servicio.

Lo hemos elevado a 200 tareas simultáneas porque nuestro procesamiento ejecuta más de 160 contenedores en paralelo, todo en Fargate sin un solo EC2 para administrar.

Actualización: cómo hacer girar 100 contenedores

Puedo decirle cómo lo hacemos con Fargate: en nuestra cartera de CI / CD construimos la imagen del contenedor y la cargamos en ECR. Parte de la fuente también es una plantilla CloudFormation (CFN) y en la etapa de implementación de la tubería creamos / actualizamos la pila CFN que crea la definición de tarea ECS con todos los parámetros del contenedor.

Luego tenemos un trabajo de planificador escrito en Python y activado por CloudWatch Event (planificador tipo cron) que busca el ARN de TaskDefinition y ejecuta más de 160 tareas desde ese único TaskDef. Puede dar a cada tarea un parámetro adicional, o anular alguna configuración, etc. O no y simplemente girarlo.

Solíamos usar EC2 / ECS y tuvimos que hacer un paso adicional primero: escalar el grupo de AutoScaling de ECS a decenas de nodos para soportar nuestra carga de trabajo y luego al final escalarlo nuevamente a 0. Aparte de eso, es lo mismo si usted ejecútelo en Fargate o en EC2 / ECS.

Espero que ayude :)

MLu
fuente
También miré a Fargate, pero los nodos están ejecutando simulaciones, por lo que no estoy seguro de si es "malo" que no pueda controlar el tamaño de la instancia de ellos. Pero, ¿no es la configuración inicial de ECS / EC2 versus ECS / Fargate más o menos la misma, aparte de que no tiene que pensar en EC2?
Trolley
@Trolley actualizó la respuesta con nuestro método de hacer girar los más de 160 contenedores.
MLu
@Trolley Fargate reserva CPU y memoria para sus contenedores; no observamos ninguna degradación en el rendimiento en Fargate en comparación con EC2.
MLu
1

¿Por qué no usas Terraform para este propósito? Puede iniciar todas las instancias que desee, crear una red para usted, crear grupos de seguridad, ECS, IAM o lo que desee crear y finalizar fácilmente cuando lo desee. Esto es ampliamente utilizado en la industria ahora.

deosha
fuente