Как Marathon ограничивает ресурсы для напрямую вызываемых приложений?

Я экспериментирую с Mesos + Marathon и начинаю с простого, создавая небольшое «приложение», состоящее из сценария оболочки, бесконечно зацикливающего сообщение каждые 5 секунд. Когда я предоставляю это приложение, я могу выделять различные ресурсы памяти и ЦП, что приводит меня к моему вопросу:

Если Marathon напрямую порождает сценарий оболочки, то как он может ограничить использование ресурсов этого сценария? Этот скрипт мог делать и запускать что угодно, чтобы потреблять все доступные ресурсы.

Я понимаю, что Docker или какой-либо другой механизм изоляции будет ограничивать возможности процесса, но я не настроил это (явно). Создает ли он какой-то контейнер на лету, и мне не нужно его явно настраивать? Я тестирую на OS X.


person Friedrich 'Fred' Clausen    schedule 19.12.2014    source источник


Ответы (1)


Mesos поддерживает изоляцию «Posix» только на Mac, что на самом деле больше для мониторинга, чем для фактического ограничения ресурсов, поэтому тестирование Mesos на Mac не сможет продемонстрировать истинную изоляцию ресурсов.

Если вы тестируете Mesos на машине/ВМ с Linux, вы можете установить:

--isolation='cgroups/cpu,cgroups/mem'

при запуске каждого подчиненного устройства, чтобы включить изоляцию cgroups, которая создаст контейнер и запустит ваш скрипт/процесс внутри него. Изолятор cgroups будет ограничивать использование процессора, когда контейнер/процесс превысит свою долю процессора (не фиксированную долю процессора), и уничтожит процесс (уничтожит контейнер), если он превысит лимит памяти.

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

Если вы хотите включить контейнеризатор Docker (0.20+), просто установите:

--containerizers='docker,mesos'

при запуске слейвов, а потом можно запускать произвольные образы докеров и запускать внутри них команды. Docker по-прежнему использует cgroups внизу, поэтому изоляторы cgroups полностью совместимы с образами Docker, которые вы запускаете на Mesos.

Если вы используете пакеты Mesosphere, вы можете передать опцию подчиненному Mesos, создав файл конфигурации в /etc/mesos-slave, например:

echo 'docker,mesos' > /etc/mesos-slave/containerizers
person Adam    schedule 19.12.2014