Tutorial: Escalado de instancias de contenedores con alarmas de CloudWatch - Amazon Elastic Container Service

Tutorial: Escalado de instancias de contenedores con alarmas de CloudWatch

nota

En diciembre de 2019, Amazon ECS lanzó el escalado automático de clústeres como un método alternativo para el escalado de instancias de contenedor. Para obtener más información, consulte Escalado automático de clústeres de Amazon ECS .

Los siguientes procedimientos le ayudan a crear un grupo de Auto Scaling para un clúster de Amazon ECS. El grupo de Auto Scaling contiene instancias de contenedor que puede escalar (y reducir) horizontalmente con alarmas de CloudWatch.

Según los tipos de instancias de Amazon EC2 que utilice en sus clústeres y la cantidad de instancias de contenedor que tenga en un clúster, las tareas tienen una cantidad limitada de recursos que pueden utilizar cuando se ejecutan. Amazon ECS monitorea los recursos disponibles en el clúster para trabajar con los programadores y colocar tareas. Si el clúster se queda sin alguno de estos recursos, por ejemplo memoria, finalmente no podrá lanzar más tareas hasta agregar más instancias de contenedor, reducir el número de tareas deseadas en un servicio o detener algunas de las tareas en ejecución del clúster para liberar el recurso limitado.

En este tutorial, creará una alarma de CloudWatch y una política de escalado por pasos mediante la métrica MemoryReservation para el clúster. Cuando la reserva de memoria del clúster está por encima del 75 % (lo que significa que solo el 25 % de la memoria del clúster está disponible para reserva de nuevas tareas), la alarma activa el grupo de Auto Scaling para agregar otra instancia y proporcionar más recursos a sus tareas y servicios.

Requisitos previos

En este tutorial, se da por hecho que tiene métricas de CloudWatch habilitadas para sus clústeres y servicios. Las métricas no están disponibles hasta que los clústeres y servicios envíen las métricas a CloudWatch, y no puede crear alarmas de CloudWatch para métricas que aún no existen. Para obtener más información, consulte Activación de las métricas CloudWatch .

Paso 1: Crear una alarma de CloudWatch para una métrica

Una vez que haya habilitado las métricas de CloudWatch para los clústeres y los servicios, y que las métricas para el clúster se encuentren visibles en la consola de CloudWatch, puede configurar alertas sobre ellas. Para obtener más información, consulte Creación de alarmas de Amazon CloudWatch en la Guía del usuario de Amazon CloudWatch.

Para este tutorial, crea una alarma en la métrica MemoryReservation del clúster para alertar cuando la reserva de memoria del clúster sea superior al 75%.

Para crear una alarma de CloudWatch para una métrica

  1. Abra la consola de CloudWatch en https://console.aws.amazon.com/cloudwatch/.

  2. En el panel de navegación izquierdo, elija Alarms (Alarmas), Create Alarm (Crear alarma).

  3. En el panel CloudWatch Metrics by Category, seleccione ECS Metrics > ClusterName.

  4. En la página Modify Alarm, elija la métrica MemoryReservation para el clúster predeterminado y seleccione Next.

  5. En la sección Alarm Threshold, escriba el nombre y la descripción de la alarma.

    • Name: memory-above-75-pct

    • Description: Cluster memory reservation above 75%

  6. Defina el requisito de umbral y periodo de tiempo para MemoryReservation superior al 75% durante un periodo de tiempo.

    
                                Umbral de alarma de CloudWatch
  7. (Opcional) Configure el envío de una notificación cuando se activa la alarma. También puede optar por eliminar la notificación si no desea configurar una ahora.

  8. Elija Create Alarm (Crear alarma). Ahora puede utilizar esta alarma para activar su grupo de Auto Scaling a fin de agregar una instancia de contenedor cuando la reserva de memoria sea superior al 75 %.

  9. (Opcional) También puede crear otra alarma que se active cuando la reserva de memoria se encuentre por debajo del 25 %, lo cual se puede utilizar para eliminar una instancia de contenedor de su grupo de Auto Scaling.

Paso 2: Crear una configuración de lanzamiento para un grupo de Auto Scaling

Ahora que ha habilitado las métricas de CloudWatch y ha creado una alarma a partir de una de estas métricas, puede crear una configuración de lanzamiento y un grupo de Auto Scaling para el clúster. Para obtener más información y otras opciones de configuración, consulte Configuraciones de lanzamiento en la Guía del usuario de Amazon EC2 Auto Scaling.

Para crear una configuración de lanzamiento de Auto Scaling

  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, seleccione Auto Scaling Groups (Grupos de Auto Scaling).

  3. En la página Welcome to Auto Scaling (Bienvenido a Auto Scaling), elija Create Auto Scaling Group (Crear grupo de Auto Scaling).

  4. En la página Create Auto Scaling group (Crear grupo de Auto Scaling), elija Create a new launch configuration (Crear una nueva configuración de lanzamiento).

  5. En el paso Choose AMI (Elegir AMI) del asistente Create Auto Scaling Group (Crear grupo de Auto Scaling), elija Community AMIs (Comunidad de AMI).

  6. Elija la AMI de Amazon Linux 2 optimizada para Amazon ECS más reciente para su grupo de Auto Scaling. Para obtener más información acerca de cómo recuperar la AMI de Amazon Linux 2 optimizada para Amazon ECS más reciente, consulte Recuperación de metadatos de las AMI optimizadas para Amazon ECS.

  7. En el paso Choose Instance Type (Elegir tipo de instancias) del asistente Create Auto Scaling Group (Crear grupo de Auto Scaling), elija un tipo de instancias para su grupo de Auto Scaling y, a continuación, Next: Configure details (Siguiente: Configurar detalles).

  8. En el paso Configure details del asistente Create Auto Scaling Group, introduzca la siguiente información. Todos los demás campos son opcionales. Para obtener más información, consulte Creación de configuraciones de lanzamiento en la Guía del usuario de Amazon EC2 Auto Scaling.

    • En Name:, escriba un nombre para la configuración de lanzamiento.

    • Función de IAM: Seleccione la ecsInstanceRole para sus instancias de contenedor. Si ha configurado esta función, consulte Rol de IAM de instancia de contenedor de Amazon ECS.

    • Tipo de dirección IP: seleccione la opción de tipo de dirección IP que desea para sus instancias de contenedor. Para que el tráfico externo pueda ponerse en contacto con sus contenedores, seleccione Assign a public IP address to every instance (Asignar una dirección IP pública a cada instancia).

  9. Expanda la sección Advanced Details (Detalles avanzados) para especificar datos de usuario para las instancias de contenedor de Amazon ECS. Para obtener más información, consulte Configuración del agente de contenedor de Amazon ECS .

    Pegue el script siguiente en el campo User data (Datos de usuario). Haga referencia al nombre de clúster con el que está trabajando.

    #!/bin/bash echo ECS_CLUSTER=my-cluster >> /etc/ecs/ecs.config
  10. Elija Next: Add Storage (Siguiente: Agregar almacenamiento).

  11. En el paso Add Storage (Adición de almacenamiento) del asistente (Crear grupo de Auto Scaling), realice los cambios de configuración de almacenamiento que necesite para sus instancias y haga clic en Next: Configure Security Group (Siguiente: Configurar grupo de seguridad).

  12. En el paso Configure Security Group (Configurar grupo de seguridad) del asistente Create Auto Scaling group (Crear grupo de Auto Scaling), seleccione un grupo de seguridad existente que satisfaga las necesidades de sus contenedores o cree un nuevo grupo de seguridad y elija Review (Revisar).

  13. Revise la configuración de lanzamiento y elija Create launch configuration.

  14. Seleccione una clave privada para conectarse a las instancias con SSH y elija Create launch configuration (Crear configuración de lanzamiento). Pase a la creación de un grupo de Auto Scaling con la nueva configuración de lanzamiento.

Paso 3: Crear un grupo de Auto Scaling con políticas de escalado por pasos

Una vez que la configuración de lanzamiento esté completa, continúe con el siguiente procedimiento para crear un grupo de Auto Scaling que utilice su configuración de lanzamiento.

Para crear un grupo de Auto Scaling con políticas de escalado por pasos

  1. En el paso Configure Auto Scaling group details (Configurar detalles de grupo de Auto Scaling) del asistente Create Auto Scaling group (Crear grupo de Auto Scaling), introduzca la siguiente información y elija Next: Configure scaling policies (Siguiente: configurar políticas de escalado).

    • Group name (Nombre del grupo): ingrese un nombre para el grupo de Auto Scaling.

    • Group size (Tamaño del grupo): especifique el número de instancias de contenedor con las que debe comenzar el grupo de Auto Scaling.

    • Network (Red): elija una VPC en la que lanzará las instancias de contenedor.

    • Subnet (Subred): elija las subredes en las que desea lanzar las instancias de contenedor. Para un clúster de alta disponibilidad, le recomendamos que habilite todas las subredes de la región.

  2. En el paso Configure scaling policies del asistente Create Auto Scaling Group, elija Use scaling policies to adjust the capacity of this group.

  3. Ingrese el número mínimo y máximo de instancias de contenedor para su grupo de Auto Scaling.

  4. Elija Scale the Auto Scaling group using step or simple scaling policies (Escalar el grupo de Auto Scaling mediante políticas de escalado por pasos o simples).

  5. En la sección Increase Group Size (Aumentar tamaño del grupo), introduzca la siguiente información:

    • Execute policy when (Ejecutar la política cuando): seleccione la alarma memory-above-75-pct de CloudWatch que configuró anteriormente.

    • Take the action (Realizar la acción): introduzca el número de unidades de capacidad (instancias) que desea añadir a su clúster cuando se activa la alarma.

  6. Si ha configurado una alarma para activar una reducción del tamaño del grupo, configúrela en la sección Decrease Group Size y especifique cuántas instancias se deben eliminar en caso de que la alarma se active. De lo contrario, minimice la sección Decrease Group Size (Reducir el tamaño de grupo) haciendo clic en la X que se encuentra en la esquina superior derecha de la sección.

    nota

    Si configura el grupo de Auto Scaling para eliminar instancias de contenedor, las tareas que se ejecutan en las instancias de contenedor eliminadas también se detienen. Si sus tareas se ejecutan como parte de un servicio, Amazon ECS reinicia esas tareas en otra instancia si los recursos necesarios están disponibles (CPU, memoria, puertos). Sin embargo, las tareas que se iniciaron manualmente no se reinician automáticamente.

  7. Elija Review (Revisar) y Create Auto Scaling group (Crear grupo de Auto Scaling).

Paso 4: Verificar y probar el grupo de Auto Scaling

Ahora que ha creado su grupo de Auto Scaling, debería ver las instancias lanzadas en la página Instances (Instancias) de la consola de Amazon EC2. Estas instancias deben registrarse en su clúster de ECS así como después del lanzamiento.

Verifique que las instancias EC2 están registradas en el clúster. En la consola de ECS, seleccione el clúster con el que ha registrado las instancias. En la página Cluster, elija ECS Instances. Compruebe que el valor Agent Connected (Agente conectado es True (Verdadero) para las instancias mostradas.

Para probar que su grupo de Auto Scaling esté configurado correctamente, cree algunas tareas que consuman una cantidad de memoria considerable y comience a lanzarlas en su clúster. Una vez que el clúster supere el 75 % de la reserva de memoria de la alarma de CloudWatch para el número de períodos especificado, debería ver un nuevo lanzamiento de instancia en la consola de Amazon EC2.

Paso 5: Limpieza

Puede eliminar una política de escalado si ya no la necesita. También debe eliminar las alarmas de CloudWatch. Al eliminar una política de escalado por pasos, se elimina la acción de alarma subyacente, pero no se elimina la alarma de CloudWatch asociada a la política de escalado, aunque ya no tenga una acción asociada.

Para eliminar una política de escalado por pasos y su alarma de CloudWatch asociada

  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, seleccione Auto Scaling y elija Auto Scaling Groups (Grupos de Auto Scaling).

  3. Seleccione el grupo de Auto Scaling.

  4. En la pestaña Scaling Policies (Políticas de escalado), seleccione Actions (Acciones), Delete (Eliminar).

  5. Cuando se le indique que confirme, seleccione Yes, Delete (Sí, borrar).

  6. Realice lo siguiente para eliminar la alarma de CloudWatch asociada a la política.

    1. Abra la consola de CloudWatch en https://console.aws.amazon.com/cloudwatch/.

    2. En el panel de navegación, elija Alarms.

    3. Elija la alarma y elija Action (Acción), Delete (Eliminar).

    4. Cuando se le pida confirmación, elija Delete (Eliminar).

Cuando haya completado este tutorial, puede que desee conservar el grupo de Auto Scaling y las instancias de Amazon EC2 en servicio para el clúster. No obstante, si no está utilizando estos recursos de forma activa, debería plantearse limpiarlos para que la cuenta no incurra en cargos innecesarios. Puede eliminar el grupo de Auto Scaling para terminar las instancias de Amazon EC2 que contiene, pero la configuración de lanzamiento permanece intacta. Puede crear un nuevo grupo de Auto Scaling con la configuración de lanzamiento más adelante, si lo desea.

Para eliminar el grupo de Auto Scaling

  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, seleccione Auto Scaling Groups (Grupos de Auto Scaling).

  3. Elija el grupo de Auto Scaling que creó anteriormente.

  4. Elija Actions (Acciones), Delete (Eliminar).

  5. Elija Yes, Delete (Sí, eliminar).