Saltar al contenido

¿Qué debo saber sobre la asignación de CPU en Amazon ECS?

6 minutos de lectura
0

Quiero asignar CPU a las tareas de Amazon Elastic Container Service (Amazon ECS), pero no sé por dónde empezar.

Descripción corta

Al crear una definición de tarea, se recomienda definir las cuotas para los recursos de la CPU en el nivel de tarea y de contenedor. Puedes ajustar los valores de asignación de CPU para administrar el rendimiento general de tu clúster de Amazon ECS.

Resolución

Amazon ECS usa unidades de CPU como unidad estándar de medida para los recursos de CPU. Una vCPU para Linux equivale a 1024 CPU. Por ejemplo, 2048 CPU equivalen a 2 vCPU. Puedes especificar CPU o vCPU en la definición de la tarea. ECS convierte automáticamente los valores de vCPU en CPU durante el registro.

Nota: Los contenedores de Windows ignoran los parámetros de memoria y CPU en el nivel de tarea. En el caso de los contenedores de Windows, se recomienda especificar los recursos en el nivel de contenedor. Para obtener más información, consulta Tamaño de tarea.

Asignación de CPU en el nivel de tarea

Puedes ejecutar tareas de Amazon ECS en instancias de AWS Fargate o Amazon Elastic Compute Cloud (Amazon EC2). El comportamiento de asignación de CPU en el nivel de tarea es diferente para cada plataforma.

AWS Fargate

En Linux y Windows, AWS Fargate requiere un parámetro cpu en el nivel de tarea para asignar los recursos solicitados a la tarea. Puedes seleccionar los valores de memory y cpu entre los tamaños de tarea predefinidos que están disponibles para AWS Fargate.

Instancias de Amazon EC2

Nota: El parámetro cpu es opcional para las tareas que se ejecutan en instancias de Linux.

Si defines el parámetro cpu en Linux, tendrá las siguientes cuotas:

  • Tus contenedores tendrán acceso limitado en función de la cantidad de cpu definida en el nivel de tarea.
  • El parámetro task cpu establece una cuota de CPU para todos los contenedores y una reserva mínima de CPU cuando Amazon ECS programa la tarea en una instancia de contenedor.
  • Amazon ECS convierte las CPU en recursos compartidos de CPU de Linux dentro de la tarea. Linux usa estos recursos compartidos como un mecanismo ponderado para determinar la prioridad de acceso a la CPU.
  • El parámetro cpu que definas en el nivel de tarea establece los recursos de CPU máximos permitidos para las tareas del contenedor. Los contenedores que se ejecutan en esta configuración de tareas solo pueden usar la capacidad de la CPU que especifiques en el tamaño de la tarea.

El siguiente escenario es un ejemplo de asignación y utilización de unidades de CPU en una instancia de EC2.

Registras una instancia m5.large en un clúster que proporciona 2048 CPU. Una tarea se ejecuta en la instancia y utiliza 1024 CPU definidas en el nivel de tarea. La instancia muestra un 68 % de utilización de la CPU de EC2. Esta configuración mantiene 1024 CPU disponibles en el grupo de instancias. La utilización actual de la CPU no afecta a la cantidad de CPU que puedes programar para nuevas tareas. Aunque la utilización de las instancias supere el 50 %, puedes seguir usando todas las CPU disponibles en el grupo de instancias para nuevas tareas.

Con las 1024 CPU restantes, puedes programar dos tareas más, cada una con 512 CPU en el nivel de tarea o de contenedor. También puedes programar una tarea con dos contenedores que usen 1024 CPU en el nivel de tarea y 512 CPU para cada contenedor. Si no especificas las CPU, puedes programar tantas tareas como ECS admita para tu modo de red. Esta acción no afecta a las CPU de la instancia de contenedor.

Asignación de CPU en el nivel de contenedor

Amazon ECS evalúa las definiciones de CPU en el nivel de contenedor en el momento de la programación y en la versión ejecutable cuando no existe ninguna contención de CPU. El comportamiento de asignación varía según la configuración de la tarea y el tipo de plataforma.

Comportamiento del momento de programación

Los siguientes factores afectan a la forma en que Amazon ECS programa las tareas en tus instancias de contenedor:

  • Si no estableces una definición de cpu en el nivel de tarea, la cantidad total de CPU que definas en tus contenedores se convierte en la reserva de CPU.
  • La cantidad total de CPU en tu definición de cpu en el nivel de contenedor no puede superar las CPU que definas en el nivel de tarea.

Comportamiento de la versión ejecutable

Los siguientes factores afectan a la asignación de CPU cuando se ejecuta la tarea, específicamente cuando no hay ninguna contención de CPU:

  • Si estableces una definición de cpu en el nivel de tarea, tus contenedores solo podrán acceder a los recursos de CPU hasta el valor de cpu que definas en el nivel de tarea.
  • Si no estableces una definición de cpu en el nivel de tarea, los contenedores de tu tarea podrán acceder a todos los recursos de CPU de tu instancia. Esto se aplica independientemente de la definición de cpu que establezcas en el nivel de contenedor.
  • Si utilizas instancias de Windows que no admiten la CPU en el nivel de tarea, los contenedores utilizan la definición de cpu en el nivel de contenedor. Windows aplica la cuota como absoluta. Para obtener más información, consulta Entorno.
  • En el caso de las instancias de contenedor de Linux, las definiciones de cpu en el nivel de contenedor se asignan directamente a los parámetros CpuShares. Para obtener más información, consulta Create a container (Creación de un contenedor) en el sitio web de Docker.

Contención de CPU

La contención de la CPU ocurre cuando varios procesos solicitan tiempo de cpu. Durante la contención de CPU, Amazon ECS limita tus contenedores para que coincidan con los recursos que defines en la definición de cpu en el nivel de contenedor.

Importante: Comprueba que la aplicación que se ejecuta en Amazon ECS pueda detectar la configuración del contenedor. Algunas aplicaciones, como Java 10, detectan la configuración de los contenedores y utilizan solo las cuotas de CPU que definas en el nivel de contenedor. Estas aplicaciones utilizan la definición en el nivel de contenedor aunque incluso durante una contención de CPU.

Información relacionada

¿Cómo puedo asignar memoria a las tareas en Amazon ECS?