Рейтинг:0

Можно ли размещать контейнеры на хосте EC2 в перегруженном виде в AWS ECS

флаг ua

У меня есть экземпляр с несколькими приложениями tomcat и автономными банками. Если машина имеет 2vcpu и 8 ГБ ОЗУ, отдельные приложения могут использовать ресурсы по запросу (на основе значений Xms и Xmx, установленных для tomcat и для отдельных jar-файлов). ECS на данный момент не рассматривается.

Теперь я буду перемещать приложение в контейнеры на инстансах EC2 (не в Fargate). Возможно ли иметь определения задач, в которых я указываю процессор и память, которые в сумме превышают фактический процессор или оперативную память хоста EC2?

Потому что я не ожидаю, что все приложения будут использовать 100% выделенной им памяти во время создания определения задачи. Будет ли работать хост ECS с 4vcpus и я размещу на нем 10 задач с 4vcpus, указанными в определении задачи? Я знаю, что задачи не будут использовать 4vcpu, но я хочу, чтобы, если какую-либо задачу необходимо использовать, они не должны ограничиваться использованием полной мощности хоста.

Я знаю, что у ECS есть возможности масштабирования, которые я планирую использовать.Но я стремлюсь убедиться, что я не выделяю слишком много хостов EC2, которые я использую для ECS.

Рейтинг:0
флаг nl

Короткий ответ: вы можете достичь этого, но с нюансом. Если вы настроите размер определения задачи, вы не сможете перераспределить ресурсы ЦП/памяти. Однако при развертывании в EC2 можно не указывать размер задачи в определении задачи, и предполагается, что все задачи смогут получить доступ ко всей емкости хоста. Затем вы можете точно настроить ресурсы процессора/памяти (гарантия/потолок и т. д.) на уровне отдельных контейнеров. Это позволит вам переусердствовать.

Более длинный ответ здесь.

Kohini avatar
флаг ua
Должен ли я установить значения Xms и Xmx в образе tomcat? Я предполагаю, что если я не установлю в образе, тогда, даже если ресурсы хоста ec2 доступны для контейнера, параметры java по умолчанию вступят в игру, чтобы определить, сколько памяти может использовать приложение, развернутое в tomcat. Спасибо!
mreferre avatar
флаг nl
Это зависит от конкретной используемой версии Java. Более ранняя версия Java не заботилась о контейнерах/cgroups, и они просто предполагали, что им доступны ВСЕ ресурсы хоста, которые они видят (потому что они всегда могут видеть ВСЕ ресурсы). Более поздние версии Java достаточно умны, чтобы понять, что они живут в виртуальных границах cgroups и осведомлены о конструкции контейнеров (поэтому они знают, сколько им было дано). ИМО, установка этих параметров внутри приложения никогда не бывает плохой идеей. PS об этом есть заметка в блоге.
Kohini avatar
флаг ua
В блоге есть строка «если вы установите только жесткое ограничение, которое представляет собой как резервирование, так и потолок», что кажется бессмысленным. Если я устанавливаю только жесткое ограничение в 2 ГБ (но не мягкое ограничение), почему оно также должно быть зарезервированным значением для контейнера? Я бы предположил, что в отсутствие мягкого ограничения нет зарезервированной памяти, просто память, которая нужна контейнеру, берется с хоста, а ограничение в 2 ГБ является жестким ограничением.
mreferre avatar
флаг nl
Вот как это реализовано. Я думаю, это связано с тем, что когда вы не устанавливаете размер задачи, системе необходимо знать объем зарезервированной памяти, и, если он не установлен, лимит принимается за резервирование. Если вы хотите, чтобы лимит отличался от резервирования, вам необходимо явно установить оба.

Ответить или комментировать

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