Serviços do Amazon ECS - Amazon Elastic Container Service

Serviços do Amazon ECS

É possível usar um serviço do Amazon ECS para executar e manter simultaneamente um número especificado de instâncias de uma definição de tarefa em um cluster do Amazon ECS. Se uma das suas tarefas falhar ou for interrompida, o programador de serviços do Amazon ECS executará outra instância da sua definição de tarefa para substituí-la. Isso ajuda a manter o número desejado de tarefas no serviço.

Você também pode executar o serviço atrás de um balanceador de carga. O load balancer distribui o tráfego entre as tarefas associadas ao serviço.

Recomendamos usar o programador de serviços para serviços e aplicações sem estado de longa execução. O programador de serviços garante que a estratégia de programação que você especifica seja seguida e reprograma as tarefas em caso de falha. Por exemplo, se a infraestrutura subjacente apresentar falha, o programador de serviços reprogramará uma tarefa. É possível usar estratégias e restrições de posicionamento de tarefas para personalizar como o programador posiciona e finaliza tarefas. Se uma tarefa em um serviço é interrompida, o programador inicia uma tarefa nova para substituí-la. Esse processo continua até que o serviço atinja o número desejado de tarefas com base na estratégia de programação usada pelo serviço. A estratégia de programação do serviço também é chamada de tipo de serviço.

O programador de serviços também substitui tarefas consideradas não íntegras após uma falha na verificação de integridade do contêiner ou na verificação de integridade do grupo-alvo do balanceador de carga. Essa substituição depende dos parâmetros de definição do serviço maximumPercent e desiredCount. Se uma tarefa for marcada como não íntegra, o programador de serviços iniciará primeiro uma tarefa de substituição. Então, acontece o seguinte.

  • Se o status de integridade da tarefa substituta for HEALTHY, o agendador do serviço interromperá a tarefa que não está íntegra

  • Se a tarefa de substituição tiver um status de integridade de UNHEALTHY, o programador interromperá a tarefa de substituição não íntegra ou a tarefa não íntegra existente para que a contagem total de tarefas seja igual a desiredCount.

Se o parâmetro maximumPercent limitar o programador a iniciar uma tarefa de substituição primeiro, o programador interromperá aleatoriamente uma tarefa não íntegra, uma de cada vez, para liberar capacidade e, em seguida, iniciará uma tarefa de substituição. O processo de iniciar e parar continua até que todas as tarefas não íntegras sejam substituídas por tarefas íntegras. Depois que todas as tarefas não íntegras forem substituídas e somente as tarefas íntegras estiverem em execução, se a contagem total de tarefas exceder a desiredCount, as tarefas íntegras serão interrompidas aleatoriamente até que a contagem total de tarefas seja igual a desiredCount. Para obter mais informações sobre maximumPercent e desiredCount, consulte Parâmetros de definição de serviço.

O programador de serviços inclui uma lógica que regula a frequência com que as tarefas são reiniciadas, caso elas falhem repetidamente ao tentar iniciar. Se uma tarefa for interrompida sem ter entrado em um estado RUNNING, o programador de serviços começará a retardar as tentativas de inicialização e enviará uma mensagem de evento de serviço. Esse comportamento impede que recursos desnecessários sejam usados para tarefas com falha antes que você possa resolver o problema. Depois que o serviço for atualizado, o programador de serviços continuará com seu comportamento de programação normal. Para ter mais informações, consulte Lógica de controle de utilização do serviço do Amazon ECS e Visualizar mensagens de eventos de serviço do Amazon ECS.

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 ter mais informações, consulte Estratégia de réplica.

  • 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 ter mais informações, consulte Estratégia 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 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.

Estratégia de réplica

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 ter 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.