O que preciso saber sobre a alocação de CPU no Amazon ECS?
Quero alocar CPU para tarefas no Amazon Elastic Container Service (Amazon ECS), mas não sei como começar.
Breve descrição
Ao criar uma definição de tarefa no Amazon ECS, você pode definir limites para recursos de CPU em nível de tarefa e em nível de contêiner. Esses limites podem afetar o desempenho geral do seu cluster do Amazon ECS. Dependendo dos comportamentos do Amazon ECS e do seu caso de uso, ajuste os valores de alocação de CPU em nível de tarefa e em nível de contêiner. Use as informações a seguir para determinar a alocação de CPU que atenda aos seus requisitos de workload e aplicativos.
Resolução
O Amazon ECS usa uma unidade de medida padrão para recursos de CPU chamada unidades de CPU. Por exemplo, 1024 unidades de CPU equivalem a 1 vCPU para Linux e 2048 unidades de CPU equivalem a 2 vCPUs. Ao definir definições de tarefas, você pode usar 1 vCPU em vez de 1024. Quando a definição da tarefa é registrada, o ECS traduz o valor em unidades.
Observação: os parâmetros de CPU e memória em nível de tarefa são ignorados nos contêineres do Windows. 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).
Para instâncias Linux, o parâmetro cpu definido em nível de tarefa também define os recursos máximos de CPU permitidos para tarefas nesse contêiner. Os contêineres executados nessa configuração de tarefa podem usar somente a capacidade da CPU definida pelo tamanho da tarefa.
AWS Fargate
Para Linux e Windows, o AWS Fargate exige um parâmetro cpu em nível de tarefa para alocar os recursos solicitados para a tarefa. Você pode selecionar memory e cpu a partir de tamanhos de tarefas predefinidos disponíveis para o AWS Fargate.
Amazon EC2
Observação: para tarefas executadas no Amazon EC2 Linux, o parâmetro cpu é opcional.
Se você definir o parâmetro cpu no Linux, o parâmetro terá os seguintes limites:
- Seus contêineres têm acesso limitado com base na quantidade de cpu que você define em nível de tarefa.
- O valor que você define no parâmetro Task cpu se torna a reserva de CPU para a tarefa agendada em uma instância de contêiner.
- Unidades de cpu atribuídas a contêineres usam compartilhamentos de CPU Linux para implementar os compartilhamentos dentro da tarefa. CPU Linux é um mecanismo ponderado para determinar a prioridade de acesso à CPU.
No exemplo a seguir, um parâmetro cpu tem a seguinte definição no Amazon EC2:
- Uma instância EC2 m5.large registrada em um cluster ECS como uma instância de contêiner para um total de 2048 unidades de CPU.
- Uma tarefa com cpu: 1024 definido nas definições em nível de tarefa está em execução na instância.
- O CPUUtilization do EC2 da instância atual está em 68%.
No exemplo anterior, a configuração tem 1024 unidades de CPU em seu pool.
O CPUUtilization atual não afeta a quantidade de unidades de CPU disponíveis na instância do contêiner para agendar tarefas. Se a instância exceder 50% de sua utilização, metade das unidades no pool de instâncias estará disponível para o início de novas tarefas. O parâmetro atua como reserva e limite da CPU, e não se traduz diretamente no uso da CPU.
Com os parâmetros do exemplo anterior, você tem várias configurações que podem ser feitas se considerar apenas a CPU:
- Você pode agendar mais duas tarefas com cpu: 512 definido em definições em nível de tarefa ou de contêiner.
- Você pode agendar uma tarefa com dois contêineres com cpu: 1024 definido em nível de tarefa e cpu: 512 definido em nível de contêiner. Você pode definir esses níveis em cada um dos dois contêineres.
- Se cpu não estiver definido, você poderá agendar tantas tarefas quantas o ECS aceita para o modo de rede selecionado. As unidades de CPU disponíveis em sua instância de contêiner do ECS para agendamento não são afetadas.
Alocação de CPU em nível de contêiner
As definições de cpu em nível de contêiner são consideradas no momento do agendamento e no tempo de execução, quando não há contenção de CPU.
No momento do agendamento
As seguintes definições de cpu em nível de contêiner são consideradas no momento do agendamento:
- Quando a definição de cpu em nível de tarefa não está feita, o número total de unidades de CPU definidas em seus contêineres se torna a reserva de CPU.
- O número total de unidades de CPU em sua definição em nível de contêiner de cpu não pode ser maior do que as unidades de CPU definidas em sua alocação em nível de tarefa.
Em runtime, quando não há contenção de CPU
As seguintes definições de cpu em nível de contêiner são consideradas em runtime quando não há contenção de CPU:
- Se a definição de cpu em nível de tarefa tiver sido feita, seus contêineres terão acesso somente aos recursos de cpu até o valor definido de cpu em nível de tarefa.
- Se a definição de cpu em nível de tarefa não estiver definida, os contêineres em sua tarefa terão acesso a todos os recursos de CPU disponíveis em sua instância. Os contêineres podem acessar os recursos independentemente da definição de cpu definida em nível de contêiner.
- Se você usa o Windows e o cpu em nível de tarefa não é aceita, os contêineres são limitados na definição de cpu em nível de contêiner.
Observação: nas instâncias de contêiner do Windows, a cota de CPU é aplicada como uma cota absoluta. Para obter mais informações, consulte Ambiente.
Para instâncias de contêiner Linux, as definições de cpu em nível de contêiner são mapeadas diretamente para os parâmetros CpuShares. Para obter mais informações, consulte Create a container API no site do Docker.
Contenção de CPU
A contenção de CPU acontece quando vários processos solicitam tempo de cpu. Quando a contenção de CPU ocorre, seus contêineres são limitados à quantidade de recursos que você define em seu cpu na definição em nível de contêiner.
Importante: verifique se o aplicativo que você executa no ECS reconhece contêineres. Alguns aplicativos, como o Java 10, reconhecem contêineres e usam somente os limites definidos na definição de cpu em nível de contêiner. Esses aplicativos usam a definição em nível de contêiner, mesmo que haja contenção de CPU.
Informações relacionadas
Vídeos relacionados


Conteúdo relevante
- Resposta aceitafeita há 2 meseslg...
- feita há 4 meseslg...
- feita há 11 diaslg...
- Resposta aceitafeita há 4 meseslg...
- AWS OFICIALAtualizada há 4 meses
- AWS OFICIALAtualizada há 3 meses
- AWS OFICIALAtualizada há 4 anos
- AWS OFICIALAtualizada há 3 anos