HealthCheck na tarefa do ECS sem um ELB

2

Temos um contêiner do Docker (Spring Boot) que é executado em um cluster do ECS. Nós o rodamos sem Elastic Load Balancing.

Queremos atualizar o serviço sem tempo de inatividade, portanto, quando a nova tarefa estiver ativa e íntegra, a tarefa antiga será interrompida. Estamos tentando adicionar uma verificação de integridade na definição da tarefa, mas ela se recusa a funcionar. Eu tentei estes comandos básicos do healthcheck.

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

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

Isso tem algo a ver conosco, não usando um ELB? A documentação não é muito boa e minhas pesquisas no Google não retornaram nada útil.

    
por chris_fitz 12.03.2018 / 19:17

3 respostas

3

O comando Dado é sintaticamente inválido.

deve ser

[ "CMD-SHELL", "curl -f http://localhost/ || exit 1" ]
  • CMD ou 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 mudar 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 ele for executado com sucesso no seu contêiner.

    
por 11.04.2018 / 12:13
1

A resposta de raja e edite de Andrew é ligeiramente negativa para ECS / FARGATE. Está sem os parênteses e sem as aspas:

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

Esse é o formato correto se você inserir informações de verificação de integridade dentro das Definições de Tarefas do ECS.

DOCUMENTAÇÃO VÁLIDA link

NÃO É DOCUMENTAÇÃO VÁLIDA para ECS / FARGATE link

    
por 24.06.2018 / 01:14
1

Se você usa o 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. Eu também descobri que usar o 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, em seguida, adicionar o 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
    
por 01.08.2018 / 17:34

Tags