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

Última actualización: 15-04-2022

Estoy buscando información relacionada con la asignación de CPU a tareas en Amazon Elastic Container Service (Amazon ECS).

Descripción corta

Al crear una definición de tarea, puede definir límites para los recursos de la CPU. Estos límites se pueden definir a nivel de tarea y de contenedor.

El rendimiento general de su clúster de Amazon ECS se ve afectado en función de estos límites. Según los comportamientos de Amazon ECS y su caso de uso, debe ajustar los valores de asignación de CPU a nivel de tarea y de contenedor. Use la siguiente información para determinar la asignación de CPU que cumpla con los requisitos de su carga de trabajo y aplicación.

Resolución

Amazon ECS utiliza una unidad de medida estándar para los recursos de CPU denominada unidades de CPU. 1024 unidades de CPU equivalen a 1 vCPU.

Por ejemplo, 2048 unidades de CPU equivalen a 2 vCPU.

Nota: al definir las definiciones de tareas, también puede usar 1 vCPU en lugar de 1024. Cuando se registra la definición de tarea, ECS convierte el valor en unidades.

Asignación de CPU a nivel de tarea

Las tareas de Amazon ECS se pueden ejecutar en instancias de AWS Fargate o Amazon Elastic Compute Cloud (EC2).

Cuando establezca el parámetro cpu en el nivel de tarea, también establecerá la cantidad máxima de recursos de CPU que se permite a los contenedores en una tarea.

AWS Fargate

AWS Fargate requiere un parámetro cpu en el nivel de tarea para asignar los recursos solicitados a la tarea. Puede seleccionar la memoria y la CPU de los tamaños de tareas predefinidos disponibles para AWS Fargate. Puede obtener más información sobre las diferentes combinaciones en la sección Memoria y CPU de tarea de la Guía para desarrolladores de AWS Fargate.

Amazon EC2

Al ejecutar tareas en Amazon EC2, el parámetro cpu es opcional.

Si define el parámetro cpu, tenga en cuenta lo siguiente:

  • Sus contenedores tendrán acceso limitado en función de la cantidad de cpu definida.
  • El valor definido en el parámetro cpu se convierte en la reserva de CPU para que la tarea se programe en una instancia de contenedor.
    Nota: esto también se aplica a la definición de nivel de contenedor.

Por ejemplo, un parámetro cpu definido en Amazon EC2 con la siguiente configuración dispondrá de 1024 unidades de CPU restantes en su grupo:

  • Una instancia de EC2 m5.large registrada en un clúster de ECS como instancia de contenedor para un total de 2048 unidades de CPU.
  • Una tarea con cpu: 1024 en el nivel de tarea definido se está ejecutando en la instancia.
  • El valor CPUUtilization actual de la instancia de EC2 es 68 %.

El valor actual de CPUUtilization no afecta a la cantidad de unidades de CPU disponibles en la instancia de contenedor para la programación de tareas. Incluso si la instancia supera el 50 % de su utilización, seguirá teniendo la mitad de las unidades de su grupo disponibles para que den inicio nuevas tareas. Esto se debe a que el parámetro actúa solo como reserva y límite de CPU y no se traduce directamente en el uso de la CPU en sí.

Con este ejemplo, hay varios resultados que pueden ocurrir si solo se tiene en cuenta la CPU:

  • Puede programar dos tareas más con el parámetro cpu: 512 definido en definiciones de nivel de tarea o de contenedor.
  • Puede programar una tarea, con dos contenedores, con el parámetro cpu: 1024 definido en el nivel de tarea y el parámetro cpu: 512 definido en el nivel de contenedor en cada contenedor.
  • Si el parámetro cpu no está definido, puede programar tantas tareas como ECS admita para el modo de red que seleccionó. Las unidades de CPU disponibles en la instancia de contenedor de ECS para la programación no se ven afectadas.

Asignación de CPU a nivel de contenedor

Las definiciones del parámetro cpu a nivel de contenedor se consideran en los siguientes escenarios:

En el momento de la programación:

  • Cuando no se establece un parámetro cpu a nivel de tarea, la cantidad total de unidades de CPU definidas en los contenedores se convierte en la reserva de CPU.
  • El número total de unidades de CPU en la definición de nivel de contenedor de cpu no puede ser mayor que las unidades de CPU definidas en la asignación a nivel de tarea.

Durante el tiempo de ejecución, sin contención de CPU:

  • Si se establece la definición del parámetro cpu a nivel de tarea, sus contenedores solo tendrán acceso a los recursos de la cpu hasta el valor definido en cpu a nivel de tarea.
  • Si no se establece la definición del parámetro cpu a nivel de tarea, los contenedores de su tarea tienen acceso a todos los recursos de CPU disponibles en la instancia, independientemente de la definición de cpu establecida en el nivel de contenedor.
  • Si usa tareas de Windows y la cpu a nivel de tarea no es compatible, los contenedores siempre se limitan a la definición de cpu en el nivel de contenedor.

La contención de la CPU ocurre cuando varios procesos solicitan tiempo de cpu. Cuando se produce una contención de CPU, los contenedores se reducen a la cantidad de recursos definidos en el parámetro cpu en la definición de nivel de contenedor.

Importante: asegúrese de verificar si la aplicación que está ejecutando en ECS admite contenedores. Algunas aplicaciones, como Java 10, admiten contenedores y usan solo los límites definidos en la definición del parámetro cpu a nivel de contenedor, independientemente de si hay contención de CPU.

Las definiciones del parámetro cpu a nivel de contenedor se asignan directamente a los parámetros CpuShares de la API Crear un docker remoto de contenedores.


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?