Estrategias y controladores de implementación de servicios de Amazon ECS
Antes de implementar el servicio, determine las opciones para implementarlo y las características que utilizará el servicio.
Estrategia de programación
Existen dos estrategias del programador de servicio:
-
REPLICA
: la estrategia de programación de réplicas sitúa y mantiene en el clúster el número de tareas deseado. De forma predeterminada, el programador de servicio distribuye las tareas en zonas de disponibilidad. Puede utilizar estrategias y restricciones de ubicación de tareas para personalizar las decisiones de ubicación de las tareas. Para obtener más información, consulte Estrategia de programación de réplicas. -
DAEMON
: la estrategia de programación del daemon implementa exactamente una tarea en cada instancia de contenedor activa que cumpla todas las restricciones de ubicación de tareas que se especifiquen para el clúster. Cuando se utiliza esta estrategia, no es necesario especificar un número deseado de tareas, ni una estrategia de ubicación de tareas ni utilizar políticas de Auto Scaling de servicios. Para obtener más información, consulte Estrategia de programación de daemon.nota
Las tareas de Fargate no admiten la estrategia de programación de
DAEMON
.
Estrategia de programación de réplicas
La estrategia de programación de réplicas sitúa y mantiene en el clúster el número de tareas deseado.
En el caso de un servicio que ejecuta tareas en Fargate, cuando el programador de servicios lanza nuevas tareas o deja de ejecutarlas, el programador de servicios hace lo mejor para mantener un equilibrio entre las zonas de disponibilidad. No es necesario especificar estrategias ni restricciones de ubicación de tareas.
Al crear un servicio que ejecuta tareas en instancias EC2, tiene la opción de especificar estrategias y restricciones de ubicación de tareas a fin de personalizar las decisiones de ubicación de tareas. Si no se especifican estrategias o restricciones de ubicación de tareas, el programador de servicios repartirá las tareas de forma predeterminada entre las zonas de disponibilidad. El programador de servicios utiliza la siguiente lógica:
-
Determina cuál de las instancias de contenedor de su clúster puede admitir la definición de la tarea de su servicio (por ejemplo, la CPU, la memoria, los puertos y los atributos de la instancia de contenedor requeridos).
-
Determina qué instancias de contenedor satisfacen las restricciones de ubicación definidas para el servicio.
-
Si tiene un servicio de réplica que depende de un servicio de daemon (por ejemplo, una tarea del enrutador del registro de daemon que debe estar ejecutándose antes de que las tareas puedan utilizar el registro), cree una restricción de ubicación de tareas que garantice que las tareas del servicio de daemon se coloquen en la instancia de EC2 antes que las tareas del servicio de réplica. Para obtener más información, consulte Ejemplos de restricciones para ubicación de tareas de Amazon ECS.
-
Cuando hay una estrategia de ubicación definida, utilice esa estrategia para seleccionar una instancia entre los candidatos restantes.
-
Si no hay ninguna estrategia de ubicación definida, utilice la siguiente lógica para equilibrar las tareas entre las zonas de disponibilidad de su clúster:
-
Ordena las instancias de contenedor válidas. Da prioridad a las instancias que tienen el menor número de tareas en ejecución para este servicio en su respectiva zona de disponibilidad. Por ejemplo, si la zona A tiene una tarea de servicio en ejecución y las zonas B y C tienen cero cada una, las instancias de contenedor válidas en la zona B o C se consideran óptimas para colocación.
-
Ubica la nueva tarea de servicio en una instancia de contenedor válida en una zona de disponibilidad óptima en función de los pasos anteriores. Favorece las instancias de contenedores con el menor número de tareas en ejecución para este servicio.
-
Le recomendamos que utilice la característica de reequilibrio de servicios cuando utilice la estrategia de REPLICA
, ya que ayuda a garantizar una alta disponibilidad del servicio.
Estrategia de programación de daemon
La estrategia de programación de daemon implementa exactamente una tarea en cada instancia de contenedor activa que cumpla todas las restricciones de ubicación de tareas especificadas en el clúster. El programador de servicios evalúa las restricciones de ubicación de las tareas en ejecución y detiene las tareas que no cumplen las restricciones de ubicación. Al utilizar esta estrategia, no es necesario especificar un número deseado de tareas ni una estrategia de ubicación de tareas, ni utilizar políticas de escalado automático de servicio.
Amazon ECS reserva los recursos de computación de la instancia de contenedor, incluido CPU, memoria e interfaces de red, para las tareas del daemon. Cuando se lanza un servicio daemon en un clúster con otros servicios de réplica, Amazon ECS prioriza la tarea del daemon. Esto significa que la tarea del daemon es la primera en lanzarse en las instancias y la última en detenerse después de que se detengan todas las tareas de réplica. Esta estrategia garantiza que las tareas de réplica pendientes no utilicen esos recursos y estén disponibles para las tareas del daemon.
El programador de servicios del daemon no ubica tareas en las instancias que tienen el estado DRAINING
. Si una instancia de contenedor cambia al estado DRAINING
, las tareas del daemon que incluya se detienen. El programador de servicios también monitorea cuándo se agregan nuevas instancias de contenedor al clúster y agrega las tareas de daemon en ellas.
Al especificar una configuración de implementación, el valor del parámetro maximumPercent
debe ser 100
(especificado como porcentaje), que es el valor predeterminado que se utiliza si no se establece. El valor predeterminado del parámetro minimumHealthyPercent
es 0
(especificado como porcentaje).
Debe reiniciar el servicio cuando cambie las restricciones de ubicación del servicio del daemon. Amazon ECS actualiza de forma dinámica los recursos reservados en instancias aptas para la tarea del daemon. Para las instancias existentes, el programador intenta ubicar la tarea en la instancia.
Una nueva implementación se inicia cuando hay un cambio en el tamaño de la tarea o en la reserva de recursos del contenedor en la definición de la tarea. Una nueva implementación también comienza cuando se actualiza un servicio o se establece una revisión diferente de la definición de la tarea. Amazon ECS recoge las reservas de memoria y CPU actualizadas para el daemon y, a continuación, bloquea esa capacidad para la tarea del daemon.
Si no hay recursos suficientes para cualquiera de los casos anteriores, ocurre lo siguiente:
-
Se produce un error en la ubicación de la tarea.
-
Se genera un evento de CloudWatch.
-
Amazon ECS continúa intentando programar la tarea en la instancia a la espera de que los recursos estén disponibles.
-
Amazon ECS libera todas las instancias reservadas que ya no cumplan con los criterios de restricción de ubicación y detiene las tareas de daemon correspondientes.
La estrategia de programación de daemon se puede utilizar en los siguientes casos:
-
Ejecución de contenedores de aplicaciones
-
Ejecución de contenedores de soporte para tareas de registro, monitoreo y seguimiento
Las tareas que utilizan el tipo de lanzamiento de Fargate o los tipos de controlador de implementación CODE_DEPLOY
o EXTERNAL
no admiten la estrategia de programación del daemon.
Cuando el programador de servicios detiene las tareas en ejecución, intenta mantener un balance entre las zonas de disponibilidad del clúster. El programador utiliza la siguiente lógica:
-
Si se ha definido una estrategia de ubicación, utilice esta estrategia para seleccionar las tareas que deben terminar. Por ejemplo, si un servicio tiene definida una estrategia de distribución de zonas de disponibilidad, se seleccionará una tarea que deje a las demás tareas con la mejor distribución.
-
Si no hay ninguna estrategia de ubicación definida, mantenga el equilibrio entre las zonas de disponibilidad de su clúster con la siguiente lógica:
-
Ordene las instancias de contenedor válidas. Dé prioridad a las instancias que tienen el mayor número de tareas en ejecución para este servicio en su respectiva zona de disponibilidad. Por ejemplo, si la zona A tiene una tarea de servicio en ejecución y las zonas B y C tienen dos cada una, las instancias de contenedor en la zona B o C se consideran óptimas para terminación.
-
Detenga la tarea en una instancia de contenedor en una zona de disponibilidad óptima en función de los pasos anteriores. Priorice las instancias de contenedores con el mayor número de tareas en ejecución para este servicio.
-
Controladores de implementación
El controlador de implementación es el mecanismo que determina cómo se implementan las tareas del servicio. Las opciones válidas son las siguientes:
-
ECS
Al crear un servicio que utiliza el controlador de implementación de
ECS
, puede elegir entre las siguientes estrategias de implementación:ROLLING
: cuando crea un servicio que utiliza la estrategia de implementación de actualización continua (ROLLING
), el programador de servicios de Amazon ECS sustituye las tareas que se están ejecutando actualmente por unas nuevas. El número de tareas que Amazon ECS agrega o elimina del servicio durante una actualización continua se controla mediante la configuración de implementación del servicio.Las implementaciones de actualizaciones continuas son las más adecuadas para los siguientes escenarios:
-
Actualizaciones graduales del servicio: debe actualizar el servicio de forma gradual sin desconectar todo el servicio de una sola vez.
-
Requisitos de recursos limitados: desea evitar los costos generados por los recursos adicionales que supone ejecutar dos entornos completos de forma simultánea (como lo exigen las implementaciones azul/verde).
-
Tiempo de implementación aceptable: su aplicación puede tolerar un proceso de implementación más prolongado, ya que las actualizaciones continuas sustituyen las tareas una por una.
-
No es necesario realizar una reversión inmediata: su servicio puede tolerar un proceso de reversión que tarde minutos en lugar de segundos.
-
Proceso de implementación simple: prefiere un método de implementación sencillo sin la complejidad de administrar varios entornos, grupos de destino y oyentes.
-
No se requiere un equilibrador de carga: su servicio no usa ni requiere un equilibrador de carga, equilibrador de carga de aplicación, equilibrador de carga de red o Service Connect (que son necesarios para las implementaciones azul/verde).
-
Aplicaciones con estado: su aplicación mantiene un estado que dificulta la ejecución de dos entornos paralelos.
-
Sensibilidad a los costos: desea no tener que ejecutar entornos duplicados durante la implementación para minimizar los costos de implementación.
Las actualizaciones continuas son la estrategia de implementación predeterminada de los servicios y proporcionan un equilibrio entre la seguridad de la implementación y la eficiencia de los recursos en muchos escenarios de aplicaciones comunes.
-
BLUE_GREEN
: una estrategia de implementación azul/verde (BLUE_GREEN
) es una metodología de lanzamiento que reduce el tiempo de inactividad y el riesgo al ejecutar dos entornos de producción idénticos, denominados azul y verde. Con las implementaciones azul/verde de Amazon ECS, puede validar las nuevas revisiones de servicios antes de dirigir el tráfico de producción hacia ellas. Este método proporciona una forma más segura de implementar cambios con la capacidad de revertirlos rápidamente si es necesario.Las implementaciones azul/verde de Amazon ECS son las más adecuadas para los siguientes escenarios:
-
Validación de servicio: cuando tiene que validar nuevas revisiones de servicio antes de dirigir el tráfico de producción hacia ellas
-
Tiempo de inactividad cero: cuando su servicio requiere implementaciones sin tiempo de inactividad
-
Reversión instantánea: cuando necesita la capacidad de revertir rápidamente si se detectan problemas
-
Requisito de equilibrador de carga: cuando su servicio utiliza un equilibrador de carga de aplicación, equilibrador de carga de red o Service Connect
-
-
Externo
Utilice un controlador de implementación de terceros.
-
Implementación azul/verde (con tecnología de AWS CodeDeploy)
CodeDeploy instala una versión actualizada de la aplicación como un nuevo conjunto de tareas de sustitución y vuelve a enrutar el tráfico de producción del conjunto de tareas original al conjunto de tareas de sustitución. Cuando la implementación se realiza correctamente, se termina el conjunto de tareas original. Este tipo de implementación permite verificar la nueva implementación de un servicio antes de enviar el tráfico de producción hacia este.