У нас есть контейнер Docker (Spring Boot), который работает в кластере ECS. Мы запускаем его без Elastic Load Balancing.
Мы хотим обновить службу без простоя, поэтому, когда новая задача запущена и работоспособна, старая задача останавливается. Мы пытались добавить проверку работоспособности в определение задачи, однако она отказывается работать. Я пробовал эти основные команды проверки работоспособности.
[ "CMD-SHELL","exit 0" ]
[ "CMD-SHELL","exit 1" ]
Я ожидаю, что в первом случае задача будет иметь ЗДОРОВЫЙ статус работоспособности, а во втором — провалит проверки работоспособности. В обоих случаях новая задача запускается нормально, с НЕИЗВЕСТНЫМ статусом работоспособности.
Это как-то связано с тем, что мы не используем ELB? Документация не очень хорошая, и мои поиски в Google не дали ничего полезного.
решение1
Ответ raja и edite от Andrew немного не соответствуют 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
решение2
Данная команда синтаксически неверна.
должен быть
[ "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 — это команда проверки работоспособности в моем примере. Вместо «echo hi» вы можете выполнить любую команду, которая должна вернуть код завершения 0, если она успешно выполнена в вашем контейнере.
решение3
Если вы используете ecs-cli для развертывания своих служб fargate, я обнаружил, что вам необходимо обновиться до чего-то, что поддерживает healthcheck в определении задачи. Я также обнаружил, что использование CMD-SHELL не обязательно — на самом деле, оно ломается, когда вы его добавляете, оборачивая ваш CMD-SHELL другим CMD-SHELL в результирующий json сгенерированного определения задачи (как видно в консоли aws).
Поэтому мне помогло обновление ecs-cli с версии 1.4.0 до 1.7.0, а затем добавление healthcheck в файл 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
решение4
Например, если «Сопоставление портов» предназначено 8000:8000
для «ECS EC2» или 8000 tcp
«ECS Fargate», «Команда» «HEALTHCHECK» будет следующей:
CMD-SHELL, curl -f http://localhost:8000/ || exit 1
В этом случае не забудьте 8000
after .http://localhost: