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" ]
CMD
ouCMD-SHELL
- para executar o comando com o shell padrão do contêinercurl -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:8000
para “ECS EC2” ou 8000 tcp
para “ECS Fargate”, o “Comando” de “HEALTHCHECK” será:
CMD-SHELL, curl -f http://localhost:8000/ || exit 1
Não se esqueça 8000
depois http://localhost:
neste caso.