Почему не удается выполнить задачу ECS, если не удалось запустить один контейнер? - PullRequest
0 голосов
/ 20 сентября 2019

Я создаю задание для ECS (Fargate) с 3 контейнерами внутри и двумя из них.И я обнаружил, что если несущественный контейнер не запустится, вся задача будет провалена.Это ожидается?

В определении задачи https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html, говорится:

If the essential parameter of a container is marked as true, and that container fails or stops for any reason, all other containers that are part of the task are stopped. If the essential parameter of a container is marked as false, then its failure does not affect the rest of the containers in a task. If this parameter is omitted, a container is assumed to be essential.

Я установил essential в true в моем основном контейнере и других контейнерах как ложное.Интересно, почему этот флаг не работает в моей ECS.

Я знаю, что в большинстве случаев люди создают один контейнер для каждой задачи.В моем случае у меня есть несколько контейнеров в одной задаче.Я не рассматриваю возможность перемещать свои контейнеры для отдельных задач.Я спрашиваю, что мой essential в контейнере не работает должным образом.

Ниже приведен скриншот моего определения задачи, и вы можете видеть, что первый контейнер не является существенным, что означает, что его сбой не должен вызыватьСбой задачи.

enter image description here

1 Ответ

1 голос
/ 20 сентября 2019

Это ожидаемое поведение ECS в случае одного определения задачи, так как все задачи, совместно использующие одни и те же определения задач, либо масштабируются, либо уменьшаются на один контейнер, по какой-то причине все будут уменьшаться, если масштабироваться один, всеконтейнеры будут расширяться.

Обычно это был способ работы с устаревшими ссылками в ваших контейнерах, теперь вы обнаруживаете службы, поэтому лучше использовать службы обнаружения и помещать ваши контейнеры в отдельные определения задач.

Кроме того, это не рекомендуемая архитектура для контейнеров.

Весь ваш стек приложений не должен существовать в одном определении задачи, и в большинстве случаев он не должен существовать.Ваше приложение может охватывать несколько определений задач, объединяя связанные контейнеры в свои собственные определения задач, каждое из которых представляет отдельный компонент.Для получения дополнительной информации

task_definitions

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

Вы должныПоместите несколько контейнеров в одно и то же определение задачи, если:

  • Контейнеры имеют общий жизненный цикл (то есть они должны запускаться и завершаться вместе).

  • Контейнеры должны запускаться на одном и том же базовом хосте (то есть один контейнер ссылается на другой на порте localhost).

  • Вы хотите, чтобы ваши контейнеры совместно использовали ресурсы.

  • Ваши контейнеры совместно используют объемы данных.

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

application_architecture

...