Melhor maneira de lançar 100 máquinas Docker idênticas na AWS?

7

Eu preciso fazer alguns testes em larga escala em um sistema. O sistema consiste em 2 partes principais: Gerenciador e Nós. Haverá apenas um servidor gerenciador, mas 100 nós. O gerenciador e os nós são imagens do Docker.

Quero poder acelerar uma configuração na AWS, onde uma instância de um gerente e 100 instâncias (uma instância por servidor) do nó são iniciadas.

O que eu usaria para isso? O gerente e os nós devem poder se comunicar juntos, e os nós não devem ter balanceamento de carga de forma alguma. Portanto, eles precisam de um IP interno dedicado com o qual o gerente possa se comunicar.

Examinei o ECS e o CloudFormation + EC2 com uma AMI personalizada, mas não tenho certeza de qual é o caminho a seguir.

Idealmente, quero um script que de vez em quando possa executar para iniciar os servidores e fechá-los facilmente.

Alguma sugestão sobre o que posso fazer na AWS para iniciar essa configuração com facilidade?

Carrinho
fonte

Respostas:

4

Veja o AWS Fargate - ele permite que você execute seus contêineres do Docker sem precisar girar as instâncias do EC2 para um cluster do ECS. Você simplesmente agende as Tarefas (ou Serviços), cada uma recebe seu próprio endereço IP e pode conversar entre si.

Você também pode usar o AWS Service Discovery para facilitar o registro e a pesquisa dos endereços IP das tarefas.

BTW Observe que o limite de simultaneidade padrão do Fargate é 20 tarefas / serviços - se você precisar de 100 deles, precisará aumentar um tíquete de suporte para aumentar o limite de serviço.

Aumentamos para 200 tarefas simultâneas porque nosso processamento executa mais de 160 contêineres em paralelo, todos no Fargate sem um único EC2 para gerenciar.

Atualização - como girar 100 contêineres

Eu posso dizer-lhe como nós fazê-lo com Fargate - no nosso CI gasoduto / CD que construir a imagem de contentores e upload para ECR. Parte da origem também é um modelo CloudFormation (CFN) e, no estágio Deployment do pipeline, criamos / atualizamos a pilha CFN, que cria o ECS TaskDefinition com todos os parâmetros do contêiner.

Em seguida, temos um trabalho de agendador escrito em Python e acionado pelo CloudWatch Event (agendador semelhante ao cron) que consulta o ARN da TaskDefinition e executa mais de 160 tarefas a partir desse único TaskDef. Você pode atribuir a cada tarefa um parâmetro extra ou substituir algumas configurações, etc. Ou não, e apenas girá-lo.

Costumávamos usar o EC2 / ECS e tínhamos que fazer uma etapa extra primeiro - dimensionar o grupo ECS AutoScaling para dezenas de nós para suportar nossa carga de trabalho e, no final, redimensioná-lo para 0. Além disso, é o mesmo se você execute-o no Fargate ou no EC2 / ECS.

Espero que ajude :)

MLu
fonte
Também olhei para Fargate, mas os nós estão executando simulações; portanto, não tenho certeza se é "ruim" que não possa controlar o tamanho da instância deles. Mas a configuração inicial do ECS / EC2 vs. ECS / Fargate não é praticamente a mesma, exceto que você não precisa pensar nos EC2?
Trolley
A @Trolley atualizou a resposta com nosso método de girar os mais de 160 contêineres.
Mlu
@Trolley A Fargate reserva CPU e memória para seus contêineres - não observamos nenhuma degradação no desempenho no Fargate em comparação ao EC2.
Mlu
1

Por que você não usa o Terraform para esse fim? Ele pode iniciar quantas instâncias você desejar, criar uma rede para você, criar grupos de segurança, ECS, IAMs ou o que você quiser criar e terminar facilmente quando quiser. Isso é amplamente utilizado na indústria agora.

deosha
fonte