2017-01-14 5 views
3

У меня есть служба, работающая на AWS EC2 Container Service (ECS). Моя установка является относительно простой. Он работает с одним определением задач и следующие детали:Обновление службы AWS ECS

  • Желаемая мощность установлена ​​на уровне 2
  • Минимальный здоровый набор на 50%
  • Максимальный набор на 200%
  • Задачи работать с 80% CPU и резервирование памяти

Первоначально я могу получить необходимые экземпляры EC2, зарегистрированные в кластере, который обслуживает службу без проблем. Затем связанная задача запускается в двух экземплярах. Как и ожидалось - с учетом резервирования CPU и памяти - задачи занимают почти все ресурсы экземпляров EC2.

Иногда я хочу, чтобы задача использовала новую версию приложения, в котором она запущена. Чтобы это произошло, я создаю ревизию задачи, отменю регистрацию предыдущей версии и затем обновляю службу. Обратите внимание, что я установил минимальный здоровый процент, чтобы требовать, чтобы выполнялся экземпляр , и максимальный здоровый процент, позволяющий выполнять до 2 * 2.00 = 4 экземпляров.

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

К сожалению, кластер ничего не делает. В журнале events он сообщает мне, что он не может размещать новые задачи, даже если описанный выше процесс позволил бы это сделать.

Как я могу заставить кластер выполнять поведение, которое я ожидаю? Я только смог это сделать, когда я вручную регистрирую другой экземпляр EC2 в кластере, а затем разорву его после завершения обновления (что нежелательно).

ответ

0

Я столкнулся с той же проблемой, когда задачи, используемые для застревания, не имели места для их размещения. Ниже фрагмента из документа AWS по телефону updating a service помогло мне принять следующее решение.

Если служба желаемого число четырех задач и максимальное значение 200% процентов, планировщик может запустить четыре новых задач перед остановкой четыре старых задач (при условии, что кластерные ресурсы, необходимые сделать это доступно). Значение по умолчанию для максимального процентов составляет 200%.

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

Эти вещи я сделать

  1. Перед выполнением обновления службы добавить как 20% мощности в кластере. Вы можете использовать командную строку ASG (Autoscaling group) и от желаемой емкости добавить 20% к вашему кластеру. Таким образом, во время развертывания у вас будет дополнительный экземпляр.

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

Но разве это означает, что у меня будут дополнительные экземпляры контейнера?

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

Создать будильник MemoryReservationLow (около 70% порога в вашем случае) в течение примерно 25 минут (более продолжительный срок, чтобы быть уверенным, что мы уже сданы в эксплуатацию). Поскольку резервирование будет низким, если у вас есть лишний сервер, который не используется, их можно удалить.

+0

Это более или менее то, что я делал, но тревога памяти - хорошая идея, о которой я даже не думал. Хороший ответ. – nmagerko

-2

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

Также это может быть связано с тем, что недостаточно памяти для удовлетворения ограниченного объема памяти (мягкого или жесткого), запрошенного контейнером внутри задачи.

+0

В вашем первом абзаце, почему вы так думаете? Что касается вашего второго абзаца, как я уже сказал, я уверен, что в экземпляре недостаточно памяти для одновременного редактирования нескольких ревизий задач. Я ищу (по крайней мере) один из экземпляров, которые автоматически будут убиты и заменены новой версией. – nmagerko

 Смежные вопросы

  • Нет связанных вопросов^_^