Проблемы с ограничением памяти и ЦП в кластере AWS ECS, работающем на зарезервированном экземпляре EC2 - PullRequest
0 голосов
/ 21 апреля 2020

Я использую кластер ECS, в котором в настоящее время работают 3 службы на экземпляре среды T3. Каждая из этих служб выполняет только одну задачу с ограничением мягкого объема памяти в 1 ГБ, жесткое ограничение для каждого разное (но это не должно быть проблемой). У меня всегда будет достаточно памяти для запуска одной, новой развернутой задачи (новая также будет занимать 1 ГБ, а среда T3 сможет справиться с ней, так как у нее всего 4 ГБ). После того, как новая задача будет запущена и запущена, старая будет остановлена, и у меня снова будет 1 ГБ свободного места для нового развертывания. Я сделал аналогично ЦП (2048 ЦП, каждая задача имеет 512 и 512 бесплатно для новых развертываний).

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

Есть ли способ раскрутить другой экземпляр EC2 для того же кластера ECS для обработки пакетов в моих задачах? Также развертывания, это не идеальный сценарий, чтобы иметь возможность развернуть только одну задачу, а затем ждать, пока старая будет убита, чтобы развернуть следующую, без простоев. И самое большое беспокойство: что, если мне понадобится новый сервис и задача, мне снова нужно настроить все остальные, чтобы запустить новый и развернуть другие, что не очень легко обслуживается, и что, если я не смогу уменьшить ЦП и память больше, потому что я уже достиг самая низкая точка для беспрепятственного выполнения задачи.

Я думал о том, чтобы иметь еще один экземпляр EC2 для того же кластера, который будет обрабатывать пакеты, развертывания и новые службы / задачи. Но не уверен, если это возможно, и если это лучший способ сделать это. Я тоже думал о Фаргейте, но это намного дороже, и я не могу себе этого позволить. Что вы думаете? Любые идеи, предложения и советы будут полезны, так как я отчаянно пытаюсь найти лучший способ избежать проблем, упомянутых выше.

Заранее спасибо!

1 Ответ

1 голос
/ 24 апреля 2020

Так что, к сожалению, не существует готового решения для обеспечения того, чтобы все ваши задачи выполнялись на минимально возможном (т. Е. Одном) экземпляре. Вы можете использовать нашу новую функцию под названием Capacity Providers (CP), которая позволит вам обеспечить минимальное количество экземпляров ec2, необходимое для выполнения всех ваших задач. Основное различие между CP и ASG состоит в том, что CP придает больший вес размещению задач (где ASG будет увеличивать / уменьшать масштаб в зависимости от использования ресурсов, что не идеально в вашем случае).

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

Но теперь у вас есть «дополнительный» экземпляр EC2, потому что нет способа заменить запущенную задачу. Единственный способ, о котором я могу думать, - это использовать лямбда-функцию , которая истощает новый экземпляр, который переместит все сервисные задачи в другой экземпляр. Через 15 минут CP прекратит работу этого экземпляра, так как на нем не выполняется никаких задач.

Несколько предостережений:

  • CP являются новыми, немного шероховатыми по краям, и вы не можете удалить / изменить их. Вы можете только создавать или деактивировать их.
  • Для CP требуется базовая ASG, и они должны иметь отношение 1-1
  • Убедитесь, что при создании CP
  • Не забудьте добавить стратегию емкости по умолчанию для кластера
...