Как ограничить ресурсы, которые можно использовать из контейнера LXD

В предыдущей статье мы показали Подробное введение в контейнер LXD и с чего начать , если вы не знакомы с платформой.

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

Как ограничить ресурсы, которые можно использовать из контейнера LXD - Linux

Когда полезны ограничения на контейнеры LXD

Предоставляйте услуги и дайте каждому клиенту экземпляр LXD. Например, это может быть большой сервер, и вы размещаете каждый клиентский веб-сайт в отдельном контейнере. Если на веб-сайт приходит много внезапных посещений, это может замедлить другие случаи. При необходимых лимитах (максимальных ресурсах) только один контейнер будет тормозить, остальные будут работать нормально.

По аналогичному сценарию вы легко можете продавать разные тарифные планы. Один покупатель может заплатить за объем ресурса X, а другой - за объем Y. Вы можете легко настроить это с помощью нескольких простых команд.

Вы можете защитить себя от более простых форм атак типа «отказ в обслуживании». Когда один контейнер подвергается бомбардировке, он достигает предела использования ресурсов. Другие контейнеры не пострадают.

У вас есть два контейнера, каждый из которых использует 100% доступного ЦП. Однако вам нужно, чтобы один из них закончил работу быстрее, чем другой. Например, можно показать видео о проекте, который вам нужен завтра. Вы можете установить 90% процессорного времени на первое и 10% на второе.

Конечно, у вас могут быть свои причины. И если вы используете только один контейнер во всей системе, это может вам не понадобиться. Но если вы используете несколько контейнеров, вам всегда нужно будет установить какой-либо тип ограничения. Потому что атака, ошибка или другая форма неправильного поведения в одном экземпляре LXD может повлиять на всю систему и замедлить ее. Чем больше у вас контейнеров, тем больше вероятность возникновения подобных сценариев.

Как установить ограничения ресурсов для контейнеров LXD

Для управления ресурсами, связанными с дисковыми операциями, необходимо установить ZFS. если Я следил за учебником здесь Он уже установлен. В противном случае установите утилиты ZFS, как показано в руководстве, а затем перезапустите команду ниже. Выберите ZFS, когда вас спросят, какое внутреннее хранилище использовать.

sudo lxd init

Уменьшить использование памяти

В приведенных ниже командах замените «имя_контейнераС фактическим названием вашего контейнера. Установка простого ограничения памяти, как в следующей записи:

lxc config set container_name limits.memory 100MB

записывать "GB" вместо того "MBЕсли вы хотите использовать гигабайты вместо мегабайт.

Ограничить использование ЦП

Если вы хотите ограничить количество ядер ЦП, которое может использовать контейнер, введите:

lxc config set container_name limits.cpu 2

Чтобы выбрать определенные ядра ЦП, используйте:

lxc config set container_name limits.cpu 0-0

Это заставит контейнер использовать только первый ЦП. Чтобы использовать второй, вы можете ввести 1-1. Чтобы использовать все ядра ЦП с 0-го по 3-е, вы можете написать XNUMX-XNUMX.

Другой тип ограничения - это количество процессорного времени, которое может использовать контейнер.

lxc config set container_name limits.cpu.allowance 10ms/100ms

Это позволит контейнеру использовать только десять миллисекунд процессорного времени из каждых 100 миллисекунд, что составляет около 10% от одного процессора.

Уменьшить использование диска

Чтобы ограничить ресурсы, связанные с диском, вы должны сначала добавить корневое дисковое устройство в свой контейнер. Он уже есть по умолчанию, извлеченный из профиля LXD по умолчанию. Но вы не можете изменить его настройки для каждого контейнера, пока не сделаете это.

lxc config device add container_name root disk pool=default path=/

Если вы назовете бассейн иначе замените слово «по умолчанию» на имя вашего пула хранения. Если вы забыли его имя, вы можете просмотреть его с помощью:

lxc storage list

Чтобы ограничить дисковое пространство, экземпляр LXD может использовать:

lxc config device set container_name root size 7GB

К сожалению, ограничения ввода-вывода (скорости чтения / записи и IOPS) не работают. в настоящий момент.

Ограничьте использование сети

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

lxc network list

заменять "lxdbr0При необходимости (если в вашем случае мост имеет другое название). Если вы не выбрали тип сети в качестве моста (ответ по умолчанию), на этапах настройки «lxd init» вам, возможно, придется адаптировать приведенную ниже команду, чтобы отразить ваш выбор. Например, вам, возможно, придется заменить слово «nictype» на то, что вы также использовали для своей сети LXD.

lxc config device add container_name eth0 nic name=eth0 nictype=bridged parent=lxdbr0

Наконец, установите ограничения на вход в сеть (загрузка) и / или выход (загрузка).

lxc config device set container_name eth0 limits.ingress 1Mbit

1 мегабайт - это один мегабит (нет мегабайт). Один байт имеет 8 бит, что означает, что это ограничит загрузку примерно до 1/8 = 0.125 Мбит / с, что составляет примерно 120 КБ. Итак, если вы хотите загружать его со скоростью 1 МБ / с (мегабайт), умножьте его на 8 и установите максимальное значение 8 Мбит.

Для оформления заказа используйте:

lxc config device set container_name eth0 limits.egress 1Mbit

Заключение

Это касается наиболее часто используемых функций, связанных с ограничением использования ресурсов. Но есть много переменных, которые вы можете установить с помощью группы устройств lxc config и группы конфигурации lxc. Вы можете узнать больше о настраиваемых свойствах контейнера на странице GitHub от LXD.

Перейти к верхней кнопке