У нас есть контейнер 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