Mi clúster de Amazon Elastic Container Service (Amazon ECS) utiliza proveedores de capacidad. Quiero mantener activas mis instancias de Amazon Elastic Compute Cloud (Amazon EC2) de un grupo de escalamiento automático cuando tengan tareas en ejecución.
Descripción corta
Si utilizas un proveedor de capacidad, debes configurar los ajustes del clúster de Amazon ECS para no interrumpir las tareas en ejecución cuando se desescala verticalmente. Implementa la protección de instancias de desescalamiento horizontal en el grupo de EC2 Auto Scaling y la protección de escalamiento administrado en la configuración del proveedor de capacidad de Amazon ECS. Esta configuración garantiza que Amazon ECS conserve las instancias con tareas en ejecución.
O bien, configura Amazon ECS para que agote correctamente las tareas al detener las instancias y protege instancias específicas para que no se detengan prematuramente.
La configuración utiliza los siguientes componentes:
- Proveedores de capacidad: Los proveedores de capacidad utilizan los grupos de escalamiento automático para aprovisionar instancias de EC2 de forma dinámica.
- Drenaje de instancias: Cuando una instancia de EC2 de un grupo de escalamiento automático está marcada para su terminación, pasa a un estado EN DRENAJE y ya no acepta nuevas tareas. Las tareas en ejecución deben finalizar o trasladarse a otra instancia.
- Escalamiento automático de clústeres: El escalamiento automático de clústeres utiliza proveedores de capacidad para escalar automáticamente los grupos de escalamiento automático en función de los requisitos de las tareas.
Resolución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Asegurarse de que Amazon ECS o el grupo de escalamiento automático no terminen prematuramente una instancia durante el desescalamiento horizontal
Para usar la protección de terminación administrada en el escalamiento automático de clústeres, debes activar la protección de desescalamiento horizontal de instancias en el grupo de escalamiento automático. Esta acción garantiza que el grupo de escalamiento automático conserve las instancias con tareas en ejecución.
Para activar la protección de desescalamiento horizontal, ejecute el siguiente comando update-auto-scaling-group de la AWS CLI:
aws autoscaling update-auto-scaling-group \
--auto-scaling-group-name my-asg \
--new-instances-protected-from-scale-in
Nota: Sustituye my-asg por el nombre del grupo de escalamiento automático.
A continuación, ejecuta el siguiente comando put-cluster-capacity-providers para activar la protección de terminación administrada y asegurarte de que Amazon ECS retiene las instancias con tareas en ejecución:
aws ecs put-cluster-capacity-providers \
--cluster my-cluster \
--capacity-providers my-capacity-provider \
--enable-managed-scaling \
--managed-termination-protection ENABLED
Nota: Sustituye my-cluster por el nombre de tu clúster y my-capacity provider por el nombre de tu proveedor de capacidad.
Configuración de Amazon ECS para drenar correctamente las tareas al eliminar una instancia
Se recomienda drenar correctamente las tareas cuando las eliminas de una instancia. Utiliza el drenaje de instancias administrado para permitir que Amazon ECS reprograme las tareas en otras instancias antes de la terminación.
Para activar el drenaje de instancias administrado, ejecuta el siguiente comando update-capacity-provider:
aws ecs update-capacity-provider \
--name my-cp \
--auto-scaling-group-provider '{
"managedDraining": "ENABLED"
}
Nota: Sustituye my-cp por el nombre de tu proveedor de capacidad.
Amazon ECS traslada las tareas de la instancia a otras instancias según lo permita la capacidad. Sin embargo, Amazon ECS permite un máximo de 48 horas para drenar las instancias. Si aún quedan tareas en la instancia después de este periodo, Amazon ECS termina la instancia y detiene las tareas restantes.
Retención de una tarea crítica específica
Utiliza la protección de tareas para asegurarte de que las acciones de escalamiento o despliegue de Amazon ECS no detengan las tareas críticas.
Importante: Incluso si activas la protección de tareas, Amazon ECS puede terminar la instancia subyacente. La protección de tareas solo protege las tareas para que no se detengan.
Para activar la protección de tareas, ejecuta el siguiente comando update-task-protection:
aws ecs update-task-protection \
--cluster my-cluster \
--tasks my-task-id \
--protection-enabled
Nota: Sustituye my-cluster por el nombre del clúster y my-task-id por el ID de la tarea. De forma predeterminada, la protección dura 2 horas. Para cambiar esta duración, utiliza la opción --expires-in-minutes.
Para comprobar el estado de la protección de tareas en el clúster, ejecuta el siguiente comando get-task-protection:
aws ecs get-task-protection \
--cluster my-cluster \
--tasks my-task-id
Nota: Sustituye my-cluster por el nombre del clúster y my-task-id por el ID de la tarea.
Solución de otros problemas
Si activas la protección para tu grupo de escalamiento automático, proveedor de capacidad y tareas y sigues teniendo problemas, toma las siguientes medidas:
Información relacionada
Protección de las tareas de Amazon ECS para que no terminen debido a eventos de desescalamiento horizontal
GetTaskProtection
UpdateTaskProtection
Ejemplos de protección de tareas de Amazon Elastic Container Service (Amazon ECS) en el sitio web de GitHub