Ir para o conteúdo

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

6 minuto de leitura
0

Quero alocar CPUs para tarefas no Amazon Elastic Container Service (Amazon ECS), mas não sei como começar.

Breve descrição

Quando você cria uma definição de tarefa, é uma prática recomendada definir cotas para recursos de CPU no nível da tarefa e do contêiner. Você pode ajustar os valores de alocação de CPU para gerenciar o desempenho geral do seu cluster do Amazon ECS.

Resolução

O Amazon ECS usa unidades de CPU como unidade de medida padrão para recursos de CPU. Uma vCPU para Linux equivale a 1.024 CPUs. Por exemplo, 2048 CPUs equivalem a 2 vCPUs. Você pode especificar CPUs ou vCPUs em sua definição de tarefa. O ECS converte automaticamente os valores de vCPU em CPUs durante o registro.

Observação: os contêineres do Windows ignoram os parâmetros de CPU e memória no nível da tarefa. Para contêineres do Windows, é uma prática recomendada especificar recursos em nível de contêiner. Para obter mais informações, consulte Tamanho da tarefa.

Alocação de CPU em nível de tarefa

Você pode executar tarefas do Amazon ECS nas instâncias do AWS Fargate ou do Amazon Elastic Compute Cloud (Amazon EC2). O comportamento de alocação de CPU no nível da tarefa difere para cada plataforma.

AWS Fargate

Para Linux e Windows, o AWS Fargate exige um parâmetro cpu no nível da tarefa para alocar os recursos necessários à tarefa. Selecione os valores memory e cpu a partir de tamanhos de tarefas predefinidos que estão disponíveis no AWS Fargate.

Instâncias do Amazon EC2

Observação: o parâmetro cpu é opcional para tarefas executadas em instâncias Linux.

Se você definir o parâmetro cpu no Linux, o parâmetro terá as seguintes cotas:

  • Seus contêineres têm acesso limitado com base na quantidade de cpu que você define em nível de tarefa.
  • Seu parâmetro task cpu define uma cota de CPU para todos os contêineres e uma reserva mínima de CPU quando o Amazon ECS programa a tarefa em uma instância de contêiner.
  • O Amazon ECS converte CPUs em compartilhamentos de CPU Linux dentro da tarefa. O Linux usa esses compartilhamentos como um mecanismo ponderado para determinar a prioridade de acesso à CPU.
  • O parâmetro cpu definido no nível da tarefa define o máximo de recursos de CPU permitidos para tarefas no contêiner. Os contêineres executados nessa configuração de tarefa podem usar somente a capacidade de CPU especificada no tamanho da tarefa.

O cenário a seguir é um exemplo de alocação e utilização de unidades de CPU em uma instância do EC2.

Você registra uma instância m5.large em um cluster que fornece 2.048 CPUs. Uma tarefa é executada na instância e usa 1.024 CPUs que você define no nível da tarefa. A instância mostra 68% de utilização da CPU do EC2. Essa configuração mantém 1.024 CPUs disponíveis no grupo da instância. A utilização atual da CPU não afeta quantas CPUs você pode programar para novas tarefas. Mesmo que a utilização da instância exceda 50%, você ainda poderá usar todas as CPUs disponíveis no grupo de instâncias para novas tarefas.

Com as 1.024 CPUs restantes, você pode programar mais duas tarefas, cada uma com 512 CPUs no nível da tarefa ou do contêiner. Além disso, é possível programar uma tarefa com dois contêineres que usam 1.024 CPUs no nível da tarefa e 512 CPUs para cada contêiner. Se você não especificar as CPUs, poderá programar quantas tarefas o ECS suportar para seu modo de rede. Essa ação não afeta as CPUs da sua instância de contêiner.

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

O Amazon ECS avalia as definições de CPU em nível de contêiner no momento da programação e no runtime, quando não existe nenhuma contenção de CPU. O comportamento da alocação varia de acordo com a configuração da tarefa e o tipo de plataforma.

Comportamento do tempo de programação

Os seguintes fatores afetam a forma como o Amazon ECS programa tarefas em suas instâncias de contêiner:

  • Se você não definir uma definição de cpu no nível de tarefa, o número total de CPUs que você define em seus contêineres se tornará a reserva de CPU.
  • O número total de CPUs em sua definição em nível de contêiner de cpu não pode exceder as CPUs que você define no nível da tarefa.

Comportamento de runtime

Os fatores a seguir afetam a alocação de CPU quando a tarefa está em execução, especificamente quando não há contenção de CPU:

  • Se você definir uma definição de cpu no nível da tarefa, seus contêineres poderão acessar somente os recursos da CPU até o valor de cpu definido no nível da tarefa.
  • Se você não definir uma definição de cpu no nível da tarefa, os contêineres em sua tarefa poderão acessar todos os recursos de CPU em sua instância. Isso se aplica independentemente da definição de cpu definida no nível do contêiner.
  • Se você usa instâncias do Windows que não suportam CPU no nível da tarefa, seus contêineres usam a definição de cpu no nível do contêiner. O Windows impõe a cota como absoluta. Para mais informações, consulte Ambiente.
  • Para instâncias de contêiner Linux, as definições de cpu no nível de contêiner são mapeadas diretamente para os parâmetros CpuShares. Para mais informações, consulte Create a container (Criar um contêiner) no site do Docker.

Contenção de CPU

A contenção de CPU acontece quando vários processos solicitam tempo de cpu. Durante a contenção de CPU, o Amazon ECS limita seus contêineres para que correspondam aos recursos que você define em sua definição de cpu no nível de contêiner.

Importante: verifique se a aplicação em execução no Amazon ECS pode detectar as configurações do contêiner. Algumas aplicações, como o Java 10, detectam configurações de contêiner e usam somente as cotas de CPU que você define no nível do contêiner. Essas aplicações usam a definição no nível de contêiner mesmo durante a contenção de CPU.

Informações relacionadas

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

AWS OFICIALAtualizada há um ano