¿Cómo soluciono problemas de escalado con el proveedor de capacidad de Amazon ECS?

Última actualización: 14/04/2022

He configurado un proveedor de capacidad para mi clúster de Amazon Elastic Container Service (Amazon ECS). Sin embargo, el proveedor de capacidad no escala horizontalmente cuando el clúster se queda sin recursos ni reduce horizontalmente cuando la capacidad está menos ocupada.

Descripción corta

El proveedor de capacidad de su clúster de Amazon ECS no escala ni reduce horizontalmente debido a uno o más de los siguientes motivos:

  • El servicio Amazon ECS no está asociado con el proveedor de capacidad.
  • Las políticas de escalado relacionadas con el proveedor de capacidad no están adjuntadas al grupo de Auto Scaling.
  • Las políticas de escalado de seguimiento de destino no están configuradas correctamente.
  • El porcentaje de capacidad objetivo no está configurado correctamente en el proveedor de capacidad.
  • La estrategia de ubicación de tareas no se define de acuerdo con la carga de trabajo.
  • El servicio ECS falla con algunos errores y bloquea el escalado del proveedor de capacidad.
  • Está utilizando el escalado administrado para el proveedor de capacidad y el grupo de Auto Scaling tiene políticas de escalado personalizadas adjuntadas.
  • El grupo de Auto Scaling lanzó la instancia de contenedor, pero no puede unirse al clúster.
  • Sus instancias de contenedores están protegidas contra la reducción horizontal.
  • El proveedor de capacidad está bloqueado en estado de error.
  • El grupo de Auto Scaling está atascado en un bucle de escalado horizontal y vertical.

Resolución

El servicio Amazon ECS no está asociado con el proveedor de capacidad

Para comprobar si el servicio ECS está asociado con el proveedor de capacidad, ejecute el comando describe-services de AWS Command Line Interface (AWS CLI).

aws ecs describe-services --cluster example-cluster --services example-service --region example-region --query services[].capacityProviderStrategy

Si el servicio ECS está asociado con el proveedor de capacidad, la salida debe ser similar a la siguiente:

[
  [
    {
      "capacityProvider": "example-capacity-provider",
      "weight": 1,
      "base": 1
    }
  ]
]

Asegúrese de que el campo capacityProviderStrategy no sea nulo en la salida. Puede ver la configuración del servicio revisando los eventos de AWS CloudTrail para las llamadas a la API CreateService y UpdateService.

Para resolver este problema, actualice el servicio ECS con los comandos de AWS CLI update-service, run-task o put-cluster-capacity-providers. También puede actualizar el servicio mediante la consola de Amazon ECS.

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.

Cuando se crea un proveedor de capacidad y se asocia a un grupo de Auto Scaling, el grupo de Auto Scaling crea una política de escalado que utiliza el seguimiento de destinos para modificar la capacidad deseada con el objetivo de acomodar las cargas del clúster.

Para solucionar este problema, revise los eventos de CloudTrail para las API UpdateAutoScalingGroup, CreateCapacityProvider, UpdateCapacityProvider y PutScalingPolicy.

Compruebe que el grupo de Auto Scaling se ha creado como adjunto al clúster mediante la ejecución del siguiente comando:

aws ecs describe-clusters --clusters example-cluster --include ATTACHMENTS --region example-region --query clusters[].attachments[]

El resultado del comando debe ser similar al siguiente:

[
  {
    "id": "100a23456-5f0b-4abc-b998-d6789d111a",
    "type": "asp",
    "status": "CREATED",
    "details": [
      {
        "name": "capacityProviderName",
        "value": "example-capacityProvider"
      },
      {
        "name": "scalingPlanName",
        "value": "ECSManagedAutoScalingPlan-bb60c8fa-3ed7-4808-b39c-abcdef2345"
      }
    ]
  }
]

Si utiliza una política de escalado administrada, compruebe si la política está asociada al grupo de Auto Scaling haciendo lo siguiente:

  1. Abra la consola de Amazon ECS.
  2. En el panel de navegación, elija Clusters (Clústeres).
  3. Abra el clúster que desea verificar.
  4. Elija la pestaña Capacity Providers (Proveedores de capacidad).
  5. Para el proveedor de capacidad que desea comprobar, elija el ASG.
    Se le dirigirá a la página Auto Scaling groups (Grupos de Auto Scaling) en la consola de Amazon EC2.
  6. Elija la pestaña Automatic Scaling (Escalado automático).
    Puede ver las políticas de escalado.
  7. Compruebe si la política de escalado que utilice está incluida.

Además, asegúrese de incluir el prefijo AutoScaling-ECSManagedAutoScalingPlan en el nombre de la política de escalado de grupos de Auto Scaling. De lo contrario, el grupo de Auto Scaling utiliza una política de escalado que es diferente de la que administra el proveedor de capacidad. Tenga en cuenta que los proveedores de capacidad se pueden usar junto con otros tipos de políticas de escalado. Para obtener más información, consulte Escalado automático de servicios.

Las políticas de escalado de seguimiento de destino no están configuradas correctamente

Una política de escalado de seguimiento de objetivo rastrea un valor objetivo para la métrica que defina. El escalado automático del servicio Amazon ECS crea y gestiona alarmas de Amazon CloudWatch que desencadenan la política de escalado y calcula el ajuste de escalado en función del valor objetivo y la métrica. Si la política de seguimiento de destino no está configurada correctamente, es posible que las tareas no se escalen automáticamente según sea necesario.

Supongamos que la política de escalado automático de seguimiento de destino realiza un seguimiento de la métrica de utilización de la CPU en CloudWatch y usted especifica un porcentaje de seguimiento de destino de 60. En este caso, el proveedor de capacidad trabaja sobre la base del mejor esfuerzo para mantener la utilización agregada de la CPU en un 60 %. Esto da como resultado un evento de escalado horizontal cuando la utilización de la CPU es superior al 60 % y un evento de reducción horizontal en caso de que la utilización sea inferior al 60 %.

Para resolver este problema, elija la métrica correcta y establezca los valores correctos de escalado horizontal y reducción horizontal en la política de seguimiento de destino en función de su carga de trabajo. Para obtener más información, consulte Políticas de escala de seguimiento de destino.

El porcentaje de capacidad objetivo no está configurado correctamente en el proveedor de capacidad

El valor de capacidad objetivo se utiliza como el valor objetivo para la métrica de CloudWatch que se utiliza en la política de escalado de seguimiento de objetivo administrada por Amazon ECS. Este valor de capacidad objetivo se iguala en función del mejor esfuerzo. Los valores permitidos para este valor son números enteros entre 1 y 100. Por ejemplo, si establece la capacidad objetivo en 100 %, se utilizan todas las instancias, y las instancias que no están ejecutando tareas se reducen horizontalmente. Sin embargo, este comportamiento no está garantizado en todo momento. Si necesita capacidad de reserva, establezca la capacidad objetivo en un valor ligeramente inferior al 100 % en función de sus requisitos.

Para actualizar el proveedor de capacidad con el porcentaje de capacidad objetivo correcto, siga las instrucciones incluidas en Actualización de un proveedor de capacidad de grupo de Auto Scaling mediante la consola clásica.

La estrategia de ubicación de tareas no se define de acuerdo con la carga de trabajo

Las estrategias de ubicación de tareas se pueden especificar al crear un servicio o ejecutar una tarea. También puede actualizar las estrategias de asignación de tareas para los servicios existentes. Por ejemplo, si su carga de trabajo consume mucha memoria y no configuró la estrategia de asignación de tareas en consecuencia, las tareas no se reducirán ni escalarán horizontalmente en función de su uso de memoria. Asegúrese de verificar los tipos de estrategias de ubicación de tareas y defina estas estrategias de acuerdo con su carga de trabajo.

El servicio ECS falla con algunos errores y bloquea el escalado del proveedor de capacidad

Si su servicio ECS falla con algún error, el proveedor de capacidad no puede reducir ni escalar horizontalmente. Para solucionar el problema del error del servicio ECS, consulte los mensajes de eventos del servicio en la consola de Amazon ECS.

Está utilizando el escalado administrado para el proveedor de capacidad, y el grupo de Auto Scaling tiene políticas de escalado personalizadas asociadas

Cuando el clúster no se escala automáticamente, es posible que aparezca el siguiente error:

"StatusCode": "ActiveWithProblems"
"StatusMessage": "Scaling plan has been created but failed to be applied to all resources. Problems were encountered for 1 resource. See scaling plan resources for the failure details."
Este error se produce cuando se cumplen las siguientes condiciones:
  • Está utilizando el escalado administrado de AWS para el proveedor de capacidad.
  • El grupo de Auto Scaling tiene políticas de escalado personalizadas adjuntas que no han sido creadas por Amazon ECS.

Para resolver este error, consulte Cómo evitar el error ActiveWithProblems. Cuando habilita el escalado administrado, Amazon ECS administra las acciones de reducción y escalado horizontal del grupo de Auto Scaling con los planes de escalado de Auto Scaling. Se recomienda crear siempre un nuevo grupo de Auto Scaling y adjuntarlo al proveedor de capacidad.

El grupo de Auto Scaling lanzó la instancia de contenedor, pero no puede unirse al clúster

Sus instancias de contenedores están protegidas contra la reducción horizontal

Si habilitó la protección de terminación administrada cuando configuró el proveedor de capacidad, Amazon ECS evita que las instancias de Amazon EC2 en un grupo de Auto Scaling que contienen tareas finalicen durante una acción de reducción horizontal.

Para asegurarse de que el grupo de Auto Scaling puede terminar instancias antiguas cuando cambia la capacidad deseada, haga lo siguiente:

Para obtener más información, consulte ¿Cómo resuelvo el error “La configuración de protección de finalización administrada para el proveedor de capacidad no es válida” en Amazon ECS?

El proveedor de capacidad está bloqueado en estado de error

Se recomienda crear un nuevo grupo de Auto Scaling para usarlo con su proveedor de capacidad en lugar de usar un grupo existente. Si usa un grupo de Auto Scaling existente, es posible que tenga problemas para usar el proveedor de capacidad. Esto se debe a que las instancias de Amazon EC2 en estadorunning (en ejecución) que están asociadas al grupo existente y registradas en un clúster de Amazon ECS pueden no estar registradas correctamente con el proveedor de capacidad.

Para ver el estado del proveedor de capacidad, ejecute el comando de la AWS CLI describe-capacity providers.

Además, revise los eventos de CloudTrail y compruebe si hay errores relacionados con la API CreateCapacityProvider.

El grupo de Auto Scaling está atascado en un bucle de escalado horizontal y reducción horizontal

Cuando el valor de la métrica que se especifica en la política de escalado para su servicio de ECS aumenta, el grupo de Auto Scaling escala horizontalmente y lanza instancias según sea necesario. Sin embargo, si el valor de la métrica disminuye después del pico repentino, el grupo de Auto Scaling intenta reducir horizontalmente las instancias. Si el valor de la métrica fluctúa varias veces en un corto período de tiempo, el grupo de Auto Scaling puede quedarse atascado en un bucle de escalado horizontal y reducción horizontal. Para evitar este problema, asegúrese de definir el valor de umbral de la métrica en la política de escalado de acuerdo con su carga de trabajo.