¿Qué debo saber sobre la asignación de CPU en Amazon ECS?
Quiero asignar CPU a las tareas de Amazon Elastic Container Service (Amazon ECS), pero no sé por dónde empezar.
Breve descripción
Al crear una definición de tarea en Amazon ECS, puede definir los límites de los recursos de la CPU en el nivel de tarea y de contenedor. Estos límites pueden afectar al rendimiento general de su clúster de Amazon ECS. Ajuste los valores de asignación de CPU en el nivel de tarea y de contenedor en función de los comportamientos de Amazon ECS y de su caso de uso. Utilice la siguiente información para determinar una asignación de CPU que cumpla sus requisitos de carga de trabajo y aplicaciones.
Solución
Amazon ECS usa una unidad de medida estándar para los recursos de CPU: las unidades de CPU. Por ejemplo, 1024 unidades de CPU equivalen a 1 vCPU en Linux y 2048 unidades de CPU equivalen a 2 vCPU. Al definir las definiciones de tareas, puede usar 1 vCPU en lugar de 1024. Cuando se registra la definición de la tarea, ECS convierte el valor a unidades.
Nota: Los parámetros de CPU y memoria en el nivel de tarea se ignoran para los contenedores de Windows. En el caso de los contenedores de Windows, se recomienda especificar los recursos en el nivel de contenedor. Para obtener más información, consulte Tamaño de tarea.
Asignación de CPU en el nivel de tarea
Puede ejecutar tareas de Amazon ECS en instancias de AWS Fargate o Amazon Elastic Compute Cloud (Amazon EC2).
En el caso de las instancias de Linux, el parámetro cpu definido en el nivel de tarea establece también los recursos de CPU que se permiten como máximo para las tareas en ese contenedor. Los contenedores que se ejecutan en esta configuración de tareas solo pueden usar la capacidad de la CPU definida por el tamaño de la tarea.
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. Puede seleccionar memory y cpu entre los tamaños de tarea predefinidos disponibles para AWS Fargate.
Amazon EC2
Nota: En el caso de las tareas que se ejecutan en Amazon EC2 Linux, el parámetro cpu es opcional.
Si define el parámetro cpu en Linux, tendrá los siguientes límites:
- Sus contenedores tendrán acceso limitado en función de la cantidad de cpu definida en el nivel de tarea.
- El valor que defina en el parámetro Task cpu pasará a ser la reserva de CPU para la tarea programada en una instancia de contenedor.
- Las unidades cpu asignadas a contenedores comparten CPU en Linux para implementar los recursos compartidos dentro de la tarea. La CPU de Linux es un mecanismo ponderado para determinar la prioridad de acceso a la CPU.
En el siguiente ejemplo, un parámetro cpu tiene la siguiente definición en Amazon EC2:
- Instancia m5.large de EC2 registrada en un clúster de ECS como instancia de contenedor para un total de 2048 unidades de CPU.
- Una tarea con cpu: 1024 definido en las definiciones de nivel de tarea se está ejecutando en la instancia.
- CPUUtilization es del 68 % para la instancia actual de EC2.
En el ejemplo anterior, quedan 1024 CPU unidades en el grupo para la configuración.
El valor actual de CPUUtilization no afecta a la cantidad de unidades de CPU disponibles en la instancia de contenedor para programar tareas. Si la instancia supera el 50 % de su utilización, la mitad de las unidades del grupo de instancias estarán disponibles para iniciar nuevas tareas. El parámetro actúa como reserva y límite de CPU, y no se convierte directamente en uso de la CPU.
Con los parámetros del ejemplo anterior, puede realizar varias configuraciones si solo tiene en cuenta la CPU:
- Puede programar dos tareas más con cpu: 512 en definiciones en el nivel de tarea o de contenedor.
- Puede programar una tarea con dos contenedores con cpu: 1024 definido en el nivel de tarea y cpu: 512 definido en el nivel de contenedor. Puede establecer estos niveles en cada uno de los dos contenedores.
- Si no se ha definido cpu, puede programar tantas tareas como ECS admita para el modo de red que seleccionó. Las unidades de CPU disponibles en su instancia de contenedor de ECS para la programación no se ven afectadas.
Asignación de CPU en el nivel de contenedor
Las definiciones de cpu en el nivel de contenedor se tienen en cuenta en el momento de la programación y en la versión ejecutable si no existe ninguna contención de CPU.
En el momento de la programación
En el momento de la programación se tienen en cuenta las siguientes definiciones de CPU en el nivel de contenedor:
- Si no se ha definido cpu en el nivel de tarea, el número total de unidades de CPU definidas en los contenedores pasará a ser la reserva de CPU.
- El número total de unidades de CPU en la definición de cpu en el nivel de contenedor no puede superar las unidades de CPU definidas en la asignación en el nivel de tarea.
En la versión ejecutable, sin contención de CPU
Las siguientes definiciones de cpu en el nivel de contenedor se tienen en cuenta en la versión ejecutable si no existe ninguna contención de CPU:
- Si se ha definido cpu en el nivel de tarea, los contenedores solo podrán acceder a recursos de cpu hasta el valor de cpu definido en el nivel de tarea.
- Si no se ha definido cpu en el nivel de tarea, los contenedores en la tarea tendrán acceso a todos los recursos de CPU disponibles en su instancia. Los contenedores pueden acceder a los recursos, con independencia de la definición de cpu en el nivel de contenedor.
- Si usa Windows y el valor de cpu en el nivel de tarea no es compatible, los contenedores quedarán limitados por la definición de cpu en el nivel de contenedor.
Nota: En las instancias de contenedor de Windows, la cuota de CPU se aplica como una cuota absoluta. Para obtener más información, consulte 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, consulte Create a container API en el sitio web de Docker.
Contención de CPU
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 limitan a la cantidad de recursos establecida en la definición de cpu en el nivel de contenedor.
Importante: Compruebe si la aplicación que está ejecutando en ECS puede detectar el contenedor. Algunas aplicaciones, como Java 10, detectan el contenedor y solo utilizan los límites establecidos en la definición de cpu en el nivel de contenedor. Estas aplicaciones utilizan la definición en el nivel de contenedor aunque haya una contención de CPU.
Información relacionada
- Temas
- Contenedores
- Etiquetas
- Amazon Elastic Container Service
- Idioma
- Español
Vídeos relacionados


Contenido relevante
- preguntada hace 5 meses
- preguntada hace 7 meses
- preguntada hace 2 meses
- preguntada hace 20 días
- preguntada hace 5 meses
- OFICIAL DE AWSActualizada hace un mes
- OFICIAL DE AWSActualizada hace un mes