Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Aumentando o número de tasks ECS por host

By Paul O'BrienAug 29, 20243 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

Está com dificuldade para rodar mais do que algumas tasks por host ECS? Então continue lendo e descubra uma solução simples que vai aumentar drasticamente o número de tasks ECS que você consegue executar.

Contexto

Por padrão, o ECS no EC2 limita o número de tasks que podem rodar em cada nó. O limite exato depende do tipo de instância utilizada. Essa limitação existe porque cada task precisa ter uma Elastic Network Interface (ENI) atribuída, o que restringe o número máximo de tasks por instância.

O ENI trunking entra em cena!

O ENI trunking (com a configuração de conta awsvpcTrunking) permite que um host execute muito mais tasks. Isso é feito usando a ENI primária para a comunicação do host, enquanto ENIs adicionais são atribuídas para o trunking. Essas ENIs extras são adicionadas como branch interfaces, até o limite máximo daquele tipo de instância.

Vamos pegar um tipo de nó bem comum: o r5.xlarge. Por padrão, ele suporta três tasks, mas com o ENI trunking habilitado esse número sobe para 20. (Tabela de referência com o número máximo de tasks por tipo de instância.)

Habilitando o trunking em um cluster existente

Habilitar o trunking na criação de um cluster ECS funciona bem, mas e se você já tem um cluster e agora quer ativar o trunking?

Primeiro, verifique se o trunking está habilitado com o comando abaixo. Você pode executá-lo no CloudShell ou em uma CLI configurada adequadamente:

aws ecs list-attributes --target-type container-instance --attribute-name ecs.awsvpc-trunk-id --cluster <Cluster Name> --region <Region>

Se o retorno for uma lista de atributos vazia, o cluster informado não tem o trunking habilitado.

Pontos de atenção sobre o trunking

Antes de habilitar o trunking, vale conferir a documentação da AWS, que descreve suas limitações.

Os pontos de atenção mais comuns sobre o ENI trunking são:

  1. Apenas o modo de rede awsvpc é suportado.
  2. O launch type precisa ser EC2 (o Fargate não precisa desse recurso, pois já fornece uma ENI dedicada para cada task por padrão).
  3. Redes compartilhadas não são suportadas.
  4. Containers Windows não são suportados.
  5. A service linked role precisa existir (é criada por padrão quando o cluster ECS é criado).
  6. Requisições de DNS IPV4 baseadas em recursos (registro A) não devem estar habilitadas (padrão na criação de instâncias EC2).

Vamos habilitar o trunking

Se você usar o Console Web da AWS para habilitar o trunking em um cluster existente, a interface vai mostrar que ele está ativado, mas é bem provável que o comando aws ecs list-attributes retorne um array de atributos vazio, indicando que, na prática, ele não está habilitado.

Console da AWS mostrando, possivelmente de forma incorreta, que o trunking está habilitado

Se for esse o caso, você pode habilitar o trunking para todos os clusters da conta executando o seguinte comando:

aws ecs put-account-setting-default --name awsvpcTrunking --value enabled --region <Region>

Com esse método, basta definir o padrão uma vez por região para cada conta, já que o comando ajusta a propriedade default account setting para o trunking.

As novas instâncias ECS vão assumir essa mudança de configuração, ou você pode reiniciar as instâncias já implantadas. Se estiver usando um autoscaling group, aumente o número de instâncias e recicle os nós para aplicar a mudança sem interrupções.

Para confirmar se o trunking está funcionando, basta checar a contagem de tasks por host ou rodar novamente o comando aws ecs list-attributes. Agora ele deve retornar uma lista de interfaces habilitadas para trunking, em vez de um array de atributos vazio.

Se você ainda não conhece a DoiT, vale muito a pena dar uma olhada. Nosso time está pronto para conhecer melhor você e as suas necessidades de engenharia em nuvem. Formados exclusivamente por talentos sêniores de engenharia, somos especializados em consultoria avançada em nuvem, design arquitetural e apoio em debugging. Entre em contato e vamos conversar!