¿Cómo soluciono los problemas de escalado automático de servicios en Amazon ECS?

8 minutos de lectura
0

El escalado automático del servicio configurado para mi servicio Amazon Elastic Container Service (Amazon ECS) no reduce ni escala horizontalmente el recuento de tareas deseado según sea necesario.

Descripción corta

Puede actualizar el recuento de tareas deseado para su servicio Amazon ECS automáticamente si integra su servicio de ECS con el servicio de Application Auto Scaling y las alarmas de Amazon CloudWatch.

Es posible que el escalado automático de servicios no pueda agregar o eliminar tareas como se esperaba debido a uno o más de los siguientes motivos:

  • Las políticas de escalado no están configuradas correctamente.
  • La alarma de CloudWatch que activa las políticas de escalado ha sido eliminada o editada.
  • El formato de la expresión cron no está especificado de manera correcta en la acción programada.
  • Actualizó el recuento de tareas deseado manualmente o a través de AWS CloudFormation o el kit de desarrollo en la nube de AWS (AWS CDK) a un valor inferior al mínimo o superior al valor máximo establecido en el escalado automático de servicios.
  • Su clúster de ECS no tiene suficientes recursos o capacidad para ejecutar nuevas tareas.

Resolución

Solución de problemas de alarmas de y políticas de escalado de CloudWatch

Destino escalable

  • Asegúrese de que el servicio ECS esté registrado como un destino escalable con Application Auto Scaling. Si el servicio no está registrado, registre el servicio mediante el siguiente comando. A continuación, configure las políticas de escalado y las alarmas de CloudWatch en consecuencia. Para obtener más información, consulte ¿Cómo puedo configurar el escalado automático del servicio Amazon ECS en Fargate?
aws application-autoscaling register-scalable-target --service-namespace ecs --scalable-dimension ecs:service:DesiredCount \
--resource-id service/your-cluster/your-service-name --min-capacity 1 --max-capacity 10 --region example-region
  • Use los siguientes comandos para recuperar información sobre el escalado automático del servicio ECS:
aws application-autoscaling describe-scalable-targets --service-namespace ecs --region example-region 
aws application-autoscaling describe-scaling-policies --service-namespace ecs --region example-region
aws application-autoscaling describe-scaling-activities --service-namespace ecs \ 
--scalable-dimension ecs:service:DesiredCount --resource-id service/your-cluster/your-service-name --region example-region
  • Cuando cree o actualice las alarmas de CloudWatch para el escalado automático del servicio ECS, asegúrese de que las métricas, las dimensiones, las estadísticas, el período, la condición y los valores de umbral se especifiquen correctamente. De lo contrario, la alarma no se activará para actualizar la política de escalado asociada.

Nota: si recibe errores mientras ejecuta los comandos de AWS CLI, asegúrese de que está utilizando la versión más reciente de dicha interfaz.

Escalado escalonado

  • Compruebe si se activan las alarmas de CloudWatch asociadas a las políticas de escalado. Consulte el historial de alarmas de CloudWatch para comprobar si hubo algún error.
  • Para las políticas de escalado escalonado, compruebe si el umbral de vulneración, los ajustes de pasos y el tipo de ajuste de escalado están configurados en la alarma de CloudWatch. Si no hay un ajuste de paso coincidente para el delta de vulneración, es decir, el umbral restado del valor de la métrica, puede ver el siguiente mensaje de error en el historial de alarmas: Failed to execute AutoScaling action: No step adjustment found for metric value [xx, xx] and breach delta xx (No se pudo ejecutar la acción de escalado automático: no se encontró ningún ajuste de paso para el valor métrico [xx, xx] y el delta de vulneración xx)
    Por lo tanto, asegúrese de que todos los ajustes de paso, es decir, de -infinito a 0 para la reducción horizontal y de 0 a +infinito para el escalado horizontal, estén cubiertos en las políticas.
    Nota: Por lo general, para una política de escalado horizontal, en los ajustes de paso, solo el límite superior puede ser nulo (infinito positivo). Para una política de escalado horizontal, solo el límite inferior puede ser nulo (infinito negativo). Para obtener más información, consulte el Ajustes de paso.

Escalado de seguimiento de destino

  • Dado que las políticas de escalado de seguimiento de destino las administra AWS, Application Auto Scaling crea alarmas de CloudWatch para reducir o escalar horizontalmente en función del valor o umbral del objetivo que se especifica durante la creación de estas políticas. Por lo tanto, no edite ni elimine estas alarmas. Editar o eliminar estas alarmas afecta al comportamiento de escalado. Si modificó o eliminó estas alarmas, asegúrese de volver a crear la política de seguimiento de destino.
  • Puede tener varias políticas de escalado de seguimiento de destino para un servicio ECS, siempre y cuando cada política utilice una métrica diferente. La intención de Application Auto Scaling es priorizar la disponibilidad. Por lo tanto, el comportamiento de estas políticas varía en función de si las políticas de seguimiento de destino están listas para el escalado o la reducción horizontal. Application Auto Scaling escala horizontalmente las tareas si alguna de las políticas de seguimiento de destino está lista para ello, pero solo reduce horizontalmente si todas las políticas de seguimiento de destino (con la sección de reducción horizontal habilitada) están listas para reducirse horizontalmente.
  • Cuando se configuran varias políticas de escalado, incluidas las políticas de seguimiento de destino y escalado escalonado, para un servicio de ECS, debe asegurarse de que no entren en conflicto. Estos conflictos pueden provocar un comportamiento indeseable, como escalados y reducciones y horizontales consecutivos, lo que resulta en una oscilación innecesaria del recuento de tareas.

Para obtener más información, consulte Políticas de escalado de seguimiento de destino para Application Auto Scaling.

Solución de problemas de expresión cron incorrecta

Asegúrese de que la expresión cron especificada en la programación sea correcta en la configuración de las acciones programadas para Application Auto Scaling. El formato cron que admite Application Auto Scaling consta de seis campos separados por espacios en blanco: [Minutos] [Horas] [Día_del_mes] [Mes] [Día_de_la_semana] [Año].

Para obtener más información, consulte Acciones programadas de ejemplo para Application Auto Scaling.

Solución de problemas de actualización de recuento de tareas

Tenga en cuenta lo siguiente cuando actualice manualmente o utilice CloudFormation o AWS CDK para actualizar el recuento de tareas deseado para su servicio ECS:

  • Si actualizó el recuento de tareas deseado para su servicio ECS a un valor que está por debajo del valor de capacidad mínimo y una alarma desencadena una actividad de escalado horizontal, el escalado automático del servicio escala el recuento deseado hasta el valor de capacidad mínimo. A continuación, el escalado automático de servicios continúa escalando horizontalmente según sea necesario, en función de la política de escalado asociada a la alarma. Sin embargo, una actividad de reducción horizontal no ajusta el recuento deseado, porque el recuento deseado ya está por debajo del valor de capacidad mínimo.
  • Si actualizó el recuento de tareas deseado para su servicio ECS a un valor que está por encima del valor de capacidad máxima y una alarma desencadena una actividad de reducción horizontal, el escalado automático de servicios escala el recuento deseado al valor de capacidad máximo. A continuación, el escalado automático de servicios continúa reduciéndose horizontalmente según sea necesario, en función de la política de escalado asociada a la alarma. Sin embargo, una actividad de escalado horizontal no ajusta el recuento deseado, porque el recuento deseado ya está por encima del valor de capacidad máxima.
  • Si creó su servicio ECS con CloudFormation o CDK sin especificar el campo DesiredCount, el recuento deseado se establece en un valor predeterminado de 1. Sin embargo, cuando el mismo servicio se actualiza a través de CloudFormation o CDK sin especificar el campo DesiredCount, el recuento deseado existente en la implementación actual se usa para la nueva implementación. Por lo tanto, cuando se especifique el valor de recuento deseado en la pila de CloudFormation o en AWS CDK, asegúrese de que el valor esté entre los valores mínimo y máximo durante la actualización del servicio.

Solución de problemas de capacidad del clúster

Cuando el clúster de ECS no tiene recursos suficientes, como instancias de contenedores de Amazon Elastic Compute Cloud (Amazon EC2), para ejecutar tareas, la actividad de escalado iniciada por las políticas de escalado sigue sin cumplirse. En este caso, se registra un mensaje de error en los eventos de servicio. Para evitar estos problemas de capacidad de Amazon EC2 y lanzar las tareas correctamente, aproveche los proveedores de capacidad de Amazon ECS para aprovisionar instancias de EC2 automáticamente, según sea necesario.

Nota: durante las actividades de escalado, el escalado automático de servicios utiliza el recuento de tareas en ejecución real en un servicio como punto de partida, en lugar del recuento deseado. Esto evita un escalado excesivo que podría no satisfacerse, por ejemplo, si no hay suficientes recursos de instancias de contenedores para asignar las tareas adicionales. Si la capacidad de la instancia del contenedor está disponible más adelante, la actividad de escalado pendiente podría tener éxito. Más adelante, continuarán las actividades de escalado tras el periodo de recuperación.


Información relacionada

Servicio de escalado automático

Referencia de comandos de la CLI de AWS para el escalado automático

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años