Controladores e estratégias de implantação de serviços do Amazon ECS - Amazon Elastic Container Service

Controladores e estratégias de implantação de serviços do Amazon ECS

Antes de implantar seu serviço, determine as opções para implantá-lo e os recursos que o serviço utiliza.

Estratégia de programação

Há duas estratégias de programador de serviços disponíveis:

  • REPLICA: a estratégia de programação de réplica coloca e mantém o número desejado de tarefas no seu cluster. Por padrão, o programador de serviço distribui tarefas por zonas de disponibilidade. É possível usar estratégias e limitações de posicionamento de tarefas para personalizar decisões de posicionamento de tarefa. Para obter mais informações, consulte Estratégia de agendamento de réplicas.

  • DAEMON: a estratégia de programação do daemon implanta exatamente uma tarefa em cada instância de contêiner ativa que atenda a todas as restrições de posicionamento de tarefas que você especifica no seu cluster. Ao usar essa estratégia, não há necessidade de especificar um número desejado de tarefas, uma estratégia de posicionamento de tarefas ou usar políticas de Auto Scaling do serviço. Para obter mais informações, consulte Estratégia de agendamento de daemon.

    nota

    As tarefas do Fargate não são compatíveis com a estratégia de programação do DAEMON.

Estratégia de agendamento de réplicas

A estratégia de programação de réplica posiciona e mantém o número desejado de tarefas no seu cluster.

Para um serviço que execute tarefas no Fargate, quando o programador de serviços iniciar novas tarefas ou interromper tarefas em execução, o programador de serviços tentará manter o equilíbrio entre as zonas de disponibilidade da melhor forma. Não há necessidade de especificar estratégias ou restrições de posicionamento de tarefas.

Ao criar um serviço que executa tarefas em instâncias do EC2, você pode opcionalmente especificar estratégias e restrições de posicionamento de tarefas para personalizar decisões de posicionamento de tarefas. Se nenhuma estratégia ou restrições de posicionamento de tarefas for especificada, por padrão, o programador do serviço distribuirá as tarefas entre zonas de disponibilidade. O programador de serviço usa a seguinte lógica:

  • Determina quais instâncias de contêiner no cluster podem oferecer suporte à definição de tarefa de serviço (por exemplo, atributos necessários de CPU, memória, portas e de instância de contêiner).

  • Determina quais instâncias de contêiner atendem a qualquer restrição de posicionamento definida para o serviço.

  • Quando você tiver um serviço de réplica que dependa de um serviço de daemon (por exemplo, uma tarefa de roteador de log de daemon que precise ser executada antes que as tarefas possam usar o registro em log), crie uma restrição de posicionamento de tarefas que garanta que as tarefas do serviço de daemon sejam colocadas na instância do EC2 antes das tarefas do serviço de réplica. Para obter mais informações, consulte Exemplo de restrições de posicionamento de tarefas do Amazon ECS.

  • Quando houver uma estratégia de posicionamento definida, use essa estratégia para selecionar uma instância entre os candidatos restantes.

  • Quando não houver uma estratégia de posicionamento definida, use a lógica a seguir para equilibrar as tarefas entre as zonas de disponibilidade no cluster:

    • Ordena as instâncias de contêiner válidas. Dá prioridade a instâncias que têm o menor número de tarefas em execução nesse serviço na respectiva zona de disponibilidade. Por exemplo, se a zona A tiver uma tarefa de serviço em execução e as zonas B e C tiverem nenhuma, as instâncias de contêiner válidas nas zonas B ou C serão consideradas ideais para a colocação.

    • Coloca a nova tarefa de serviço em uma instância de contêiner válida de uma zona de disponibilidade ideal de acordo com as etapas anteriores. Favorece instâncias de contêiner com o menor número de tarefas em execução para esse serviço.

Recomendamos usar o recurso de rebalanceamento de serviços ao usar a estratégia REPLICA, pois isso ajuda a garantir a alta disponibilidade do seu serviço.

Estratégia de agendamento de daemon

A estratégia de agendamento do daemon implanta exatamente uma tarefa em cada instância de contêiner ativa que atende a todas as restrições de posicionamento de tarefas especificado no seu cluster. O agendador de serviço avalia as restrições de atribuição das tarefas em execução e interrompe as que não atendem às restrições. Ao usar essa estratégia, não há necessidade de especificar um número desejado de tarefas e uma estratégia de atribuição de tarefas, nem de usar políticas do Service Auto Scaling.

O Amazon ECS reserva recursos de computação de instância de contêiner, incluindo CPU, memória e interfaces de rede para as tarefas do daemon. Quando você inicia um serviço do daemon em um cluster com outros serviços de réplica, o Amazon ECS prioriza a tarefa do daemon. Isso significa que a tarefa do daemon é a primeira a ser iniciada nas instâncias e a última a ser interrompida após a interrupção de todas as tarefas de réplica. Essa estratégia garante que os recursos não sejam usados por tarefas de réplica pendentes e estejam disponíveis para as tarefas do daemon.

O programador de serviço do daemon não posiciona quaisquer tarefas em instâncias que possuem status DRAINING. Se uma instância de contêiner fizer a transição para o status DRAINING, as tarefas de daemon nela contidas serão interrompidas. O programador de serviço também monitora quando novas instâncias de contêiner são adicionadas ao seu cluster e adiciona as tarefas de daemon a elas.

Ao especificar uma configuração de implantação, o valor do parâmetro maximumPercent deverá ser 100 (especificado como uma porcentagem), que é o valor padrão usado se nenhum valor for definido. O valor padrão do parâmetro minimumHealthyPercent é 0 (especificado como porcentagem).

Você precisará reiniciar o serviço quando alterar as restrições de posicionamento do serviço do daemon. O Amazon ECS atualiza dinamicamente os recursos reservados em instâncias qualificadas para a tarefa do daemon. Para instâncias existentes, o programador tenta posicionar a tarefa na instância.

Uma nova implantação será iniciada quando houver uma alteração no tamanho da tarefa ou na reserva de recursos do contêiner na definição de tarefa. Uma nova implantação também começa ao atualizar um serviço ou definir uma revisão diferente da definição da tarefa. O Amazon ECS pega as reservas de CPU e memória atualizadas para o daemon e, em seguida, bloqueia esta capacidade para a tarefa do daemon.

Se não houver recursos suficientes para qualquer um dos casos acima, ocorrerá o seguinte:

  • O posicionamento da tarefa apresentará falha.

  • Será gerado um evento do CloudWatch.

  • O Amazon ECS continuará tentando programar a tarefa na instância, aguardando a disponibilização dos recursos.

  • O Amazon ECS liberará todas as instâncias reservadas que não atendam mais aos critérios de restrição de posicionamento e interromperá as tarefas correspondentes do daemon.

A estratégia de programação do daemon pode ser usada nos seguintes casos:

  • Execução de containers de aplicações

  • Execução de contêineres de suporte para tarefas de registro, monitoramento e rastreamento

As tarefas que usam o tipo de execução do Fargate ou os tipos de controlador de implantação CODE_DEPLOY ou EXTERNAL não são compatíveis com a estratégia de programação do daemon.

Quando o programador de serviços parar de executar tarefas, ele tentará manter o equilíbrio entre as zonas de disponibilidade do cluster. O programador usa a seguinte lógica:

  • Se houver uma estratégia de posicionamento definida, use essa estratégia para selecionar quais tarefas devem ser encerradas. Por exemplo, se um serviço tiver uma estratégia de distribuição de zona de disponibilidade definida, será selecionada uma tarefa que deixa as tarefas restantes com a melhor distribuição.

  • Se não houver nenhuma estratégia de posicionamento definida, uso a lógica a seguir para manter o equilíbrio em seu cluster entre as zonas de disponibilidade:

    • Ordene as instâncias de contêiner válidas. Dê prioridade a instâncias que têm o maior número de tarefas em execução nesse serviço na respectiva zona de disponibilidade. Por exemplo, se a zona A tiver uma tarefa de serviço em execução e as zonas B e C tiverem duas, as instâncias de contêiner nas zonas B ou C serão consideradas ideais para encerramento.

    • Interrompa a tarefa em uma instância de contêiner de uma zona de disponibilidade ideal de acordo com as etapas anteriores. Favoreça instâncias de contêiner com o maior número de tarefas em execução para esse serviço.

Controladores de implantação

O controlador de implantação é o mecanismo que determina como as tarefas são implantadas para o seu serviço. As opções válidas são:

  • ECS

    Ao criar um serviço que usa o controlador de implantação do ECS, você pode escolher entre as seguintes estratégias de implantação:

    • ROLLING: quando você cria um serviço que usa a estratégia de implantação com atualização contínua (ROLLING), o agendador de serviços do Amazon ECS substitui as tarefas em execução no momento por novas tarefas. O número de tarefas que o Amazon ECS adiciona ou remove do serviço durante uma atualização contínua é controlado pela configuração de implantação do serviço.

      Implantações de atualizações contínuas são mais adequadas para os seguintes cenários:

      • Atualizações graduais do serviço: você precisa atualizar seu serviço de forma incremental sem colocar todo o serviço offline de uma só vez.

      • Requisitos de recursos limitados: você deseja evitar os custos adicionais de recursos da execução simultânea de dois ambientes completos (conforme exigido pelas implantações azul/verde).

      • Tempo de implantação aceitável: sua aplicação pode tolerar um processo de implantação mais longo, pois as atualizações contínuas substituem as tarefas uma a uma.

      • Não há necessidade de reversão instantânea: seu serviço pode tolerar um processo de reversão que leva minutos em vez de segundos.

      • Processo de implantação simples: você prefere uma abordagem de implantação direta sem a complexidade de gerenciar vários ambientes, grupos de destino e receptores.

      • Sem necessidade de balanceador de carga: seu serviço não usa nem exige um balanceador de carga, o Application Load Balancer, o Network Load Balancer ou o Service Connect (que são necessários para implantações azul/verde).

      • Aplicações com estado: sua aplicação mantém um estado que dificulta a execução de dois ambientes paralelos.

      • Sensibilidade ao custo: você deseja minimizar os custos de implantação ao não executar ambientes duplicados durante a implantação.

      As atualizações contínuas são a estratégia de implantação padrão para serviços e fornecem um equilíbrio entre a segurança de implantação e a eficiência de recursos para muitos cenários comuns de aplicações.

    • BLUE_GREEN: uma estratégia de implantação azul/verde (BLUE_GREEN) é uma metodologia de lançamento que reduz o tempo de inatividade e o risco ao executar dois ambientes de produção idênticos chamados azul e verde. Com as implantações azul/verde do Amazon ECS, você pode validar novas revisões de serviços antes de direcionar o tráfego de produção para elas. Essa abordagem fornece uma maneira mais segura de implantar alterações com a capacidade de revertê-las rapidamente, se necessário.

      As implantações azul/verde do Amazon ECS são mais adequadas para os seguintes cenários:

      • Validação de serviço: quando você precisa validar novas revisões de serviço antes de direcionar o tráfego de produção para elas

      • Tempo de inatividade zero: quando seu serviço exige implantações com tempo de inatividade zero

      • Reversão instantânea: quando você precisa da capacidade de reverter rapidamente se forem detectados problemas

      • Requisito de balanceador de carga: quando seu serviço usa o Application Load Balancer, o Network Load Balancer ou o Service Connect

  • Externo

    Use um controlador de implantação de terceiros.

  • Implantação azul/verde (fornecido pelo AWS CodeDeploy)

    O CodeDeploy instala uma versão atualizada da aplicação como um novo conjunto de tarefas de substituição e redireciona o tráfego de produção do conjunto de tarefas original para o conjunto de tarefas de substituição. O conjunto de tarefas original é encerrado após uma implantação bem-sucedida. Use este controlador de implantação para verificar uma nova implantação de um serviço antes de enviar tráfego de produção para ele.