¿Cuál es la diferencia entre una tarea y un servicio en AWS ECS?

114

Parece que uno puede ejecutar una Tarea o un Servicio basado en una Definición de Tarea. ¿Cuáles son las diferencias y similitudes entre Task y Service? ¿Hay alguna pista en el hecho de que se puede especificar "Grupo de tareas" al crear una tarea pero no un servicio? ¿Son la tarea y el servicio las instancias jerárquicamente iguales de la definición de la tarea, o el servicio se compone de tareas?

Bob Jones
fuente

Respuestas:

235

Una definición de tarea es una colección de 1 o más configuraciones de contenedor . Algunas Tareas pueden necesitar solo un contenedor, mientras que otras Tareas pueden necesitar 2 o más contenedores potencialmente vinculados que se ejecutan simultáneamente. La definición de tarea le permite especificar qué imagen de Docker usar, qué puertos exponer, cuánta CPU y memoria asignar, cómo recopilar registros y definir variables de entorno.

Una Tarea se crea cuando ejecuta una Tarea directamente, que lanza contenedores (definidos en la definición de la tarea) hasta que se detienen o salen por sí mismos, momento en el cual no se reemplazan automáticamente . Ejecutar tareas directamente es ideal para trabajos de ejecución corta, tal vez como ejemplo de cosas que se lograron a través de CRON.

Un Servicio se utiliza para garantizar que siempre tenga una cierta cantidad de Tareas ejecutándose en todo momento . Si el contenedor de una tarea se cierra debido a un error, o la instancia EC2 subyacente falla y se reemplaza, el servicio ECS reemplazará la tarea fallida. Es por eso que creamos Clústeres para que el Servicio tenga suficientes recursos en términos de CPU, Memoria y Puertos de Red para usar. Para nosotros, realmente no importa en qué instancia se ejecuten las tareas mientras se ejecuten. Una configuración de servicio hace referencia a una definición de tarea. Un servicio es responsable de crear tareas .

Los servicios se utilizan normalmente para aplicaciones de larga ejecución, como servidores web. Por ejemplo, si implementé mi sitio web impulsado por Node.JS en Oregon (us-west-2), me gustaría decir que al menos tres tareas se ejecutan en las tres zonas de disponibilidad (AZ) por el bien de la alta disponibilidad; si uno falla, tengo otros dos y el fallado será reemplazado (¡léalo como autocuración !). Crear un servicio es la forma de hacerlo. Si tuviera 6 instancias EC2 en mi clúster, 2 por AZ, el Servicio equilibrará automáticamente las Tareas en las zonas lo mejor que pueda y al mismo tiempo considerará los recursos de la CPU, la memoria y la red.

ACTUALIZAR:

No estoy seguro de que ayude a pensar en estas cosas jerárquicamente.

Otro punto muy importante es que un Servicio se puede configurar para usar un balanceador de carga, de modo que a medida que crea las Tareas, es decir, lanza contenedores definidos en la Definición de Tareas, el Servicio registrará automáticamente la instancia EC2 del contenedor con el balanceador de carga. Las tareas no se pueden configurar para usar un equilibrador de carga, solo los Servicios pueden.

talentedmrjones
fuente
1
¡Muchas gracias @talentedmrjones! Entonces, ¿es tan simple como "usar Task para trabajos de ejecución corta y usar Service para servicios de ejecución prolongada"? ¿Alguna posibilidad de que pueda comentar sobre "Son la tarea y el servicio jerárquicamente iguales instanciaciones de la definición de tarea, o el servicio se compone de tareas"?
Bob Jones
Lo que no entiendo: por qué cuando se crea la tarea puedo cambiar los valores de las variables de entorno pero no parece ser posible para el servicio
Nikolay Klimchuk
1
Los servicios de @NikolayKlimchuk solo administran las tareas; son las tareas mismas las que definen y usan los envars.
bwobst
¿Qué es un "grupo de tareas"
red888
@NikolayKlimchuk perdón por la respuesta tardía. Los servicios se utilizan para programar contenedores, las tareas se utilizan para definir contenedores. Es por eso que usa las tareas para controlar env vars.
talentedmrjones
42

Bellamente explicado en palabras por @talentedmrjones. La imagen de abajo te ayudará a visualizarla fácilmente :)

Clúster, servicio, instancia EC2 y tarea en acción

realPK
fuente
¡Buena visualización! :-)
sgsi
2
Si algún lector de respuestas desea profundizar en Amazon ECS, visite freecodecamp.org/news/… . ¡Bellamente explicado!
realPK
@realPK es una página muy útil, ¡gracias por la recomendación!
Christophe
2

Definición de tarea:

Este es el plano que describe qué contenedores de Docker ejecutar y representa su aplicación. Incluye varias tareas.

Definición de tarea

Servicio:

Una instancia de Definición de tarea. También define las tareas mínimas y máximas de una definición de tarea ejecutada en un momento dado, ajuste de escala automático y equilibrio de carga.

Instancias de contenedor de ECS:

Esta es una instancia EC2 que tiene Docker y un ECS Container Agent ejecutándose. El Agente se encarga de la comunicación entre ECS y la instancia, proporcionando el estado de los contenedores en ejecución y gestionando los nuevos en ejecución.

Relación:

ingrese la descripción de la imagen aquí

xwa130
fuente