Tarefa HealthCheck na ECS sem ELB

Tarefa HealthCheck na ECS sem ELB

Temos um contêiner Docker (Spring Boot) que roda em um cluster ECS. Executamos sem o Elastic Load Balancing.

Queremos atualizar o serviço sem tempo de inatividade, para que, quando a nova tarefa estiver ativa e íntegra, a tarefa antiga seja interrompida. Temos tentado adicionar uma verificação de integridade à definição da tarefa, mas ela se recusa a funcionar. Eu tentei esses comandos básicos de verificação de integridade.

[ "CMD-SHELL","exit 0" ]
[ "CMD-SHELL","exit 1" ]

Eu esperaria que o primeiro resultasse em uma tarefa com status de saúde SAUDÁVEL e que o último falhasse nas verificações de integridade. Em ambos os casos, a nova tarefa começa bem, com status de saúde DESCONHECIDO.

Isso tem algo a ver com o fato de não usarmos um ELB? A documentação não é muito boa e minhas pesquisas no Google não retornaram nada de útil.

Responder1

A resposta de Raja e a edição de Andrew estão ligeiramente erradas para ECS/FARGATE. É sem colchetes e sem aspas:

CMD-SHELL, curl -f http://localhost/ || exit 1

Esse é o formato correto ao inserir informações de verificação de integridade nas definições de tarefa do ECS.

DOCUMENTAÇÃO VÁLIDAhttps://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#container_definition_healthcheck

DOCUMENTAÇÃO NÃO VÁLIDA para ECS/FARGATE https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_HealthCheck.html

Responder2

O comando fornecido é sintaticamente inválido.

deveria ser

[ "CMD-SHELL", "curl -f http://localhost/ || exit 1" ]
  • CMDou CMD-SHELL- para executar o comando com o shell padrão do contêiner
  • curl -f http://localhost/ - comando real que precisa ser executado dentro do contêiner para validar a verificação de integridade.
  • exit 1 - se o comando curl falhar, ele sairá do shell

então você deve alterar seu comando como abaixo.

[ "CMD-SHELL", "echo hi || exit 1" ]

echo hi é o comando helath check no meu exemplo, você pode executar qualquer comando em vez de "echo hi", que deve retornar o status de saída 0 se for executado com sucesso em seu contêiner.

Responder3

Se você usar ecs-cli para implantar seus serviços fargate, descobri que você deve atualizar para algo que suporte a verificação de integridade na definição da tarefa. Também descobri que o uso do CMD-SHELL não é necessário - na verdade, ele quebra quando você o adiciona, envolvendo seu CMD-SHELL com outro CMD-SHELL no json resultante da definição de tarefa gerada (como visto no console do aws) .

Então, o que funcionou para mim foi atualizar de 1.4.0 para 1.7.0 do ecs-cli e adicionar healthcheck no arquivo ecs-params.yml no serviço:

task_definition:
  ecs_network_mode: awsvpc
  task_role_arn: arn:aws:iam::........
  task_execution_role: arn:aws:iam::........
  task_size:
    cpu_limit: 2048
    mem_limit: 4GB
  services:
    foo:
      healthcheck:
        command: ps cax | grep "[p]ython"
        interval: 30s
        timeout: 10s
        retries: 2
      essential: true

Responder4

Por exemplo, se os seus “mapeamentos de portas” forem 8000:8000para “ECS EC2” ou 8000 tcppara “ECS Fargate”, o “Comando” de “HEALTHCHECK” será:

CMD-SHELL, curl -f http://localhost:8000/ || exit 1

Não se esqueça 8000depois http://localhost:neste caso.

informação relacionada