ECS 'Определения контейнеров позволяют вам указать memoryReservation
для каждого контейнера:
Мягкий предел (в МиБ) памяти, который нужно зарезервировать для контейнера. Когда системная память находится в состоянии конфликта, Docker пытается сохранить память контейнера до этого мягкого предела ; однако ваш контейнер может потреблять больше памяти при необходимости, вплоть до жесткого предела, заданного параметром памяти (если применимо), или всей доступной памяти в экземпляре контейнера, в зависимости от того, что наступит раньше. Этот параметр сопоставляется с MemoryReservation в разделе «Создание контейнера» в Docker Remote API и параметром --memory -servation для запуска docker ... Если вы укажете memoryReservation, то это значение будет вычтено из доступных ресурсов памяти для экземпляр контейнера, на котором расположен контейнер ; в противном случае используется значение памяти. Например, если ваш контейнер обычно использует 128 мегабайт памяти, но время от времени переходит в 256 мегабайт памяти в течение коротких периодов времени, вы можете установить memoryReservation 128 мегабайт и жесткий предел памяти в 300 мегабайт. Эта конфигурация позволила бы контейнеру резервировать только 128 МБ памяти из оставшихся ресурсов на экземпляре контейнера, но также позволяла бы контейнеру потреблять больше ресурсов памяти при необходимости.
Я полагаю, что это реализовано с помощью "мягких пределов cgroups ."
Таким образом, это означает, что в ECS + EC2 цель этого параметра состоит в том, чтобы позволить вам запланировать группу задач для экземпляра, которая, если бы они все одновременно использовали свою максимальную память, превысила бы общую доступную память на экземпляр, но вы предсказываете, что они не будут этого делать.
А как насчет ECS + Fargate? У Fargate размер задачи и объединенные жесткие ограничения (опция "memory
") контейнеров задачи не могут превышать объем памяти задачи . [Эта последняя часть была неправильной; см. мой уточняющий ответ.] Вы оплачиваете в зависимости от размера задачи независимо от установленных вами ограничений памяти. Так какую выгоду вы могли бы получить, установив memoryReservation
ниже вашего жесткого лимита?
Единственные возможности, о которых я могу думать:
memoryReservation
поручает AWS упаковать ваши контейнеры на меньшее количество базовых виртуальных машин, рискуя проблемами с производительностью без какой-либо выгоды для вас (так как цена такая же).
- AWS просто игнорирует
memoryReservation
для Фаргейта.
Я что-то упустил? Если нет, Амазонка говорит, какой из двух это?