O que preciso saber sobre a alocação de CPU no Amazon ECS?

5 minuto de leitura
0

Estou procurando informações relacionadas à alocação de CPU para tarefas no Amazon Elastic Container Service (Amazon ECS).

Descrição breve

Ao criar uma definição de tarefa, você pode definir limites para os recursos da CPU. Esses limites podem ser definidos no nível da tarefa e no nível do contêiner.

A performance geral do cluster do Amazon ECS é afetada com base nesses limites. Dependendo dos comportamentos do Amazon ECS e do seu caso de uso, você deve ajustar os valores de alocação da CPU nos níveis de tarefa e de contêiner. Use as informações a seguir para determinar a alocação de CPU que atenda aos requisitos da workload e da aplicação.

Resolução

O Amazon ECS usa uma unidade de medida padrão para recursos de CPU chamada unidades de CPU. 1024 unidades de CPU equivalem a 1 vCPU.

Por exemplo, 2048 unidades de CPU são iguais a 2 vCPUs.

Observação: ao criar definições de tarefas, você também pode usar 1 vCPU em vez de 1024. Quando a definição de tarefa é registrada, o ECS converte o valor em unidades.

Alocação de CPU no nível da tarefa

As tarefas do Amazon ECS podem ser executadas em instâncias do AWS Fargate ou do Amazon Elastic Compute Cloud (Amazon EC2).

Ao definir o parâmetro cpu no nível da tarefa, você também definirá a quantidade máxima de recursos de CPU permitida para seus contêineres em uma tarefa.

AWS Fargate

O AWS Fargate exige um parâmetro cpu no nível da tarefa para alocar os recursos solicitados para a tarefa. Você pode selecionar a memória e a CPU com base em tamanhos de tarefa predefinidos disponíveis para o AWS Fargate. Você pode saber mais sobre as diferentes combinações na seção CPU e memória de tarefas do Guia do desenvolvedor do AWS Fargate.

Amazon EC2

Ao executar tarefas no Amazon EC2, o parâmetro cpu é opcional.

Se você definir o parâmetro cpu, considere o seguinte:

  • Seus contêineres terão acesso limitado com base na quantidade de cpu definida.
  • O valor definido no parâmetro cpu torna-se a reserva de CPU para a tarefa a ser agendada em uma instância de contêiner.
    Observação: isso também é válido para a definição no nível do contêiner.

Por exemplo, um parâmetro cpu definido no Amazon EC2 com a seguinte configuração terá 1024 unidades de CPU restantes em seu grupo:

  • Uma instância do EC2 m5.large registrada em um cluster do ECS como uma instância de contêiner para um total de 2048 unidades de CPU.
  • Uma tarefa com cpu: 1024 definido no nível da tarefa está em execução na instância.
  • A CPUUtilization da instância atual do EC2 está em 68%.

A CPUUtilization atual não afeta quantas unidades de CPU estão disponíveis na instância de contêiner para agendamento de tarefas. Mesmo que a instância exceda 50% de utilização, você ainda terá metade das unidades em seu grupo disponíveis para iniciar novas tarefas. Isso ocorre porque o parâmetro atua apenas como reserva e limite de CPU e não se traduz diretamente no próprio uso da CPU.

Com este exemplo, existem vários resultados que podem acontecer quando apenas a CPU é levada em consideração:

  • Você pode agendar mais duas tarefas com cpu: 512 definido nas definições de nível de tarefa ou de contêiner.
  • Você pode agendar uma tarefa, com dois contêineres, com cpu: 1024 definido no nível da tarefa e cpu: 512 definido no nível do contêiner em cada contêiner.
  • Se o parâmetro cpu não estiver definido, você poderá agendar tantas tarefas quanto o ECS comportar para o modo de rede selecionado. As unidades de CPU disponíveis na instância de contêiner do ECS para programação não são afetadas.

Alocação de CPU no nível do contêiner

As definições de cpu no nível do contêiner são consideradas nos seguintes cenários:

No horário do agendamento:

  • Quando a definição de cpu no nível da tarefa não está estabelecida, a quantidade total de unidades de CPU definida nos contêineres torna-se a reserva de CPU.
  • O número total de unidades de CPU na definição de nível de contêiner da CPU não pode ser maior do que as unidades de CPU definidas na alocação no nível da tarefa.

Em tempo de execução, e não há contenção de CPU:

  • Se a definição de cpu no nível da tarefa estiver configurada, seus contêineres terão acesso somente aos recursos de cpu até o valor definido para cpu no nível da tarefa.
  • Se a definição de cpu no nível da tarefa não estiver configurada, os contêineres na tarefa terão acesso a todos os recursos de CPU disponíveis na instância, independentemente da definição de cpu configurada no nível do contêiner.
  • Se você estiver usando tarefas do Windows e não houver suporte a cpu no nível da tarefa, os contêineres serão sempre limitados à definição de cpu no nível do contêiner.

A contenção da CPU acontece quando vários processos estão solicitando tempo de cpu. Quando a contenção da CPU ocorre, os contêineres são limitados à quantidade de recursos configurada para cpu na definição no nível do contêiner.

Importante: verifique se a aplicação que você está executando no ECS reconhece contêineres. Algumas aplicações, como o Java 10, reconhecem contêineres e usam apenas os limites configurados na definição de cpu no nível do contêiner, independentemente de haver contenção de CPU.

As definições de cpu no nível do contêiner são mapeadas diretamente nos parâmetros CpuShares da API Criar um docker remoto de contêiner.


Informações relacionadas

Como posso alocar memória para as tarefas no Amazon ECS?

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos