Заставить ECS ждать завершения предыдущего контейнера перед развертыванием новой версии задания.

Вопрос или проблема

У меня есть несколько сервисов ECS, которые не могут ни при каких обстоятельствах запускать две инстанции контейнера (встроенный elasticsearch, mysql). Есть ли способ заставить ECS подождать, пока контейнер действительно остановится (а не просто перейдет в состояние DEPROVISIONING), прежде чем развернуть новую версию задачи?

Да, я тоже недавно сталкивался с этой проблемой. Установите deployment_maximum_percent=101 (вы не можете установить 100, потому что это не может совпадать с deployment_minimum_percent)

Установите максимальный процент на 100, а минимальный процент на 0. Это заставит ECS сделать именно то, что вы хотите.

Ответ или решение

Для решения проблемы, когда вам необходимо, чтобы Amazon ECS (Elastic Container Service) дожидался завершения работы предыдущей версии контейнера перед развертыванием новой версии задачи, можно использовать настройки параметров развертывания. Вот подробное руководство, как это сделать.

Понимание проблемы

При развертывании новых версий контейнеров в ECS по умолчанию может возникнуть ситуация, когда обе версии контейнера работают одновременно. Это нежелательно в вашем случае, поскольку у вас есть сервисы, такие как Elasticsearch или MySQL, которые не могут функционировать с несколькими экземплярами контейнера. Решение заключается в корректной настройке политики развертывания, чтобы ECS ждал завершения работы предыдущей задачи.

Настройка параметров развертывания

Для достижения необходимого поведения следует настроить следующие параметры при создании или обновлении службы ECS:

  1. maximumPercent: Этот параметр определяет максимальный процент задач, который может быть запущен в ходе обновления. Если вы установите этот параметр в 101, это позволит запустить новую задачу до завершения работы старой, но это не решает вашу проблему.

  2. minimumHealthyPercent: Этот параметр определяет, сколько процентов задач должно оставаться рабочими во время обновления. Установив его на 0, вы можете указать ECS позволить завершить все экземпляры старой версии, прежде чем начать развертывание новой.

Пошаговая конфигурация

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

  • Установите deploymentMaximumPercent=100.
  • Установите deploymentMinimumPercent=0.

Такое сочетание явно указывает ECS, что он не должен запускать новые задачи, пока старые не завершат свою работу.

Реализация в AWS Management Console или AWS CLI

AWS Management Console:

  1. Перейдите в консоль управления Amazon ECS.
  2. Выберите службу, которую вы хотите настроить.
  3. Перейдите на вкладку "Настройки развертывания".
  4. Установите Maximum percent в 100, а Minimum healthy percent в 0.
  5. Сохраните изменения.

AWS CLI:

Если вы предпочитаете использовать командную строку, выполните следующую команду:

aws ecs update-service --cluster ваш_клaстер --service ваш_сервис --deployment-configuration minimumHealthyPercent=0,maximumPercent=100

Подведение итогов

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

Надеюсь, данная информация окажется полезной для вашей работы с ECS. Если у вас есть дополнительные вопросы или вам потребуется помощь в внедрении, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...