Назад | Перейти на главную страницу

HealthCheck для задачи ECS без ELB

У нас есть контейнер Docker (Spring Boot), который работает в кластере ECS. Мы запускаем его без эластичной балансировки нагрузки.

Мы хотим обновить службу без простоев, поэтому, когда новая задача работает и работает, старая задача останавливается. Мы пытались добавить проверку работоспособности в определение задачи, но она отказывается работать. Я пробовал эти основные команды проверки работоспособности.

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

Я ожидаю, что первое приведет к задаче со статусом ЗДОРОВЬЕ, а второе - к провалу проверок работоспособности. В обоих случаях новая задача запускается нормально, с НЕИЗВЕСТНЫМ статусом работоспособности.

Имеет ли это какое-то отношение к тому, что мы не используем ELB? Документация не очень хорошая, и мои поиски в Google не дали ничего полезного.

Данная команда неверна синтаксически.

так должно быть

[ "CMD-SHELL", "curl -f http://localhost/ || exit 1" ]
  • CMD или CMD-SHELL - запустить команду с оболочкой контейнера по умолчанию
  • curl -f http://localhost/ - фактическая команда, которую необходимо выполнить внутри контейнера для проверки работоспособности.
  • exit 1 - если команда curl не удалась, она выйдет из оболочки

поэтому вам следует изменить свою команду, как показано ниже.

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

echo hi - это команда проверки helath, в моем примере вы можете выполнить любую команду вместо "echo hi", которая должна возвращать статус выхода 0, если она успешно выполняется в вашем контейнере.

Если вы используете ecs-cli для развертывания своих служб Fargate, я обнаружил, что вы должны перейти на то, что поддерживает проверку работоспособности в определении задачи. Я также обнаружил, что использование CMD-SHELL не требуется - на самом деле, он ломается, когда вы его добавляете, оборачивая ваш CMD-SHELL другим CMD-SHELL в результирующем json сгенерированного определения задачи (как видно в консоли aws) .

Так что у меня сработало обновление с 1.4.0 до 1.7.0 ecs-cli, а затем добавление проверки работоспособности в файле ecs-params.yml в рамках службы:

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

Ответ раджи и редактор Эндрю немного не подходят для ECS / FARGATE. Это без скобок и без кавычек:

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

Это правильный формат при вводе информации о проверке работоспособности внутри определений задач ECS.

ДЕЙСТВУЮЩАЯ ДОКУМЕНТАЦИЯ https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#container_definition_healthcheck

НЕДЕЙСТВИТЕЛЬНАЯ ДОКУМЕНТАЦИЯ для ECS / FARGATE https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_HealthCheck.html