- PVSM.RU - https://www.pvsm.ru -
Данная статья является продолжением серии, начатой в публикациях Контейнеры — это будущее облаков [1] и Контейнеризация на Linux в деталях — LXC и OpenVZ. Часть 1 [2].
Если публикацию про будущее можно пропустить, то статья «часть 1» будет обязательна к прочтению, чтобы понять, про что мы тут говорим :)
Для полноты описания мы обязательно должны затронуть аспект разграничения не только ресурсов системы и прав, но и аппаратных ресурсов.
Какие ресурсы нам нужно делить между пользователями:
Для всех подобных ограничений используется подсистема cgroups. Нагрузку на ввод/вывод можно фиксировать с помощью подсистемы cgroups blkio, причем, важно отметить, что есть как возможность задания жестких лимитов в байтах/секунду и операциях в секунду (IOPS), так и возможность задания весовых коэффициентов (то есть, например, 10% от всего сервера). Память лимитируется посредством memory cgroup, тут все довольно просто — указываем объем ОЗУ, если контейнер его превышает — процесс испытывает сообщение OOM. Для процессора допустима только возможность указания нагрузки в процентах, что объясняется особенностями реализации планировщика на Linux.
Итого, для реализации разграничения использования ресурсов мы воспользовались следующими cgroups:
Когда я описывал [1] все преимущества контейнеров я намеренно решил не затрагивать недостатки контейнеров, так как это очень объемная тема и требуется очень много пояснений.
Итак, поехали:
Мы уже обсудили, что OpenVZ и Linux upstream containers очень сходные технологии с похожей архитектурой и реализацией, но у них при этом очень много отличий. Часть отличий вызвана тем, что актуальная версия OpenVZ поддерживается для ядра 2.6.32 RHEL. Стоп! Вы видите тоже что и я? 2.6.32 ядро, really? Но прошу не пугаться, что это ядро старо — это не так, потому что Red Hat выполняет колоссальный объем работ по бэкпортированию кода из новых веток и это ядро функционально очень близко к 3.x и при этом крайне далеко от стандартного «ванильного» 2.6.32.
Таким образом если сравнивать мы будем ядра RHEL6 OpenVZ и текущую версию upstream ядра (3.12). Уровень изоляции процессорных и дисковых ресурсов у них на одном уровне, но есть ряд тонкостей, на которые стоит обратить внимание, о них ниже.
Что именно у нас есть в OpenVZ, чего нет в upstream Linux ядре:
Как можно заметить, почти все преимущества OpenVZ идут с упором на реальную эксплуатацию решения, а не на предоставление механизмов для реализации той или иной возможности, как поступают в Linux upstream containers.
К сожалению, нет унифицированного способа управления контейнерами. В OpenVZ для этого используется vzctl, который, к слову, также может управлять контейнерами даже на обычном, upstream ядре [5] начиная с версий 3.x, а еще он включен в поставку Fedora-20 и может быть установлен и использован без привлечения внешних зависимостей вообще. Также существуют LXC и docker (который в свою очередь тоже основан на LXC), но они также не покрывают полностью весь функционал, который может потребоваться пользователям контейнеров. Кроме этого, Linux Upstream Containers используются в весьма нестандартном месте — в системе инициализации systemd, используемой во многих дистрибутивах, функционале systemd-nspaw [6].
Поэтому вопрос в реализации удобного, грамотного, гибкого и отлично спроектированного фреймворка для управления контейнерами в Linux открыт и Вы можете изменить мир, написав его (smile) Также очень много полезного по вопросу утилит управления контейнерами Вы можете почерпнуть из презентации [7] Кирилла Колышкина с конференции Linux Plumbers 2013.
Как мы убедились, контейнеризация в Linux развивается очень активно, в ближайшие годы мы, безусловно, получим полноценную контейнеризацию готовую к промышленному использованию в upstream ядре. Но для промышленного использования (тут я подразумеваю использование для изоляции клиентов друг от другов, а не собственных сервисов) контейнеры готовы лишь при использовании OpenVZ. Но если же Вам требуется контейнеризация для собственных целей — то контейнеры Linux upstream — отличный выбор, только побеспокойтесь об актуальной версии ядра.
Также хотелось бы поблагодарить Andrey Wagin avagin [8] за помощь в редактуре особо сложных технических вопросов.
C уважением, Павел Одинцов
CTO FastVPS [9] LLC
Автор: pavelodintsov
Источник [10]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/53221
Ссылки в тексте:
[1] Контейнеры — это будущее облаков: http://habrahabr.ru/company/FastVPS/blog/208650/
[2] Контейнеризация на Linux в деталях — LXC и OpenVZ. Часть 1: http://habrahabr.ru/company/FastVPS/blog/209072/
[3] ядро от Oracle: https://blogs.oracle.com/linux/entry/announcing_the_unbreakable_enterprise_kernel
[4] образов ОС: http://download.openvz.org/template/precreated/
[5] upstream ядре: http://openvz.org/Vzctl_for_upstream_kernel
[6] systemd-nspaw: http://0pointer.de/public/systemd-man/systemd-nspawn.html
[7] презентации: http://www.youtube.com/watch?v=ern3qWNKbD4
[8] avagin: http://habrahabr.ru/users/avagin/
[9] FastVPS: http://fastvps.ru
[10] Источник: http://habrahabr.ru/post/209084/
Нажмите здесь для печати.