Промышленная виртуализация с Virtuozz0 7

Page 1

Администрирование

виртуализация

Визитка

ДЕНИС СИЛАКОВ, к.ф.-м.н., старший системный архитектор Odin (подразделение компании Parallels, объединяющее решения для оказания облачных и хостинговых сервисов), dsilakov@odin.com

Промышленная виртуализация

с помощью Virtuozzo 7

Наработки компании Parallels, уже давно доступные в рамках открытого проекта OpenVZ, наконец-то находят свой путь в основной код ядра Linux к общей выгоде сообщества и разработчиков

В последние годы контейнерная виртуализация в Linux переживает настоящий бум, открывая миру все новые технологии и продукты – LXC, Docker, Rocket и прочие. Создание всех этих продуктов стало возможным благодаря новой функциональности, появившейся в основной ветке ядра Linux. Многие из этих новшеств – это результат труда отечественных разработчиков, уже долгие годы предоставляющих средства виртуализации на основе Linux под брендами OpenVZ и Virtuozzo. В статье двухлетней давности [1] мы рассмотрели некоторые теоретические основы создания виртуальных окружений и принципиальные сложности, с которыми столкнулись разработчики средств виртуализации для платформ x86. Один из способов борьбы с этими сложностями – использование виртуализации на уровне ОС, когда одно и то же ядро используется несколькими виртуальными окружениями. Именно этим путем пошла в начале текущего века компания Odin (тогда еще под названием SWsoft и позже Parallels), предложившая миру Virtuozzo – средство виртуализации на основе ядра Linux, позволявшее запускать множество экземпляров этой ОС на одной физической машине и предоставившее набор инструментов для удобного управления такими виртуальными средами. За прошедшие полтора десятка лет как сама компания, так и ее продукты претерпели череду реорганизаций, переименований и прочих трансформаций, неизбежно сопутствующих многим активно развивающимся проектам. Портфолио продуктов и их возможности со временем только расширялись, и сегодня Virtuozzo – это уже не только легковесная виртуализация на уровне ОС, но и полноценные виртуальные машины, а также различные сопутствующие продукты и сервисы. Кроме того, наработки компании, уже давно доступные в рамках открытого проекта OpenVZ, наконец-то находят свой путь в основной код ядра Linux к общей выгоде сообщества и разработчиков. Очередная версия продукта, находящаяся сейчас в стадии разработки, – Virtuozzo 7 – во многом основывается на открытых технологиях, которые в сочетании с уникальными технологиями

4

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

Немного истории История нынешнего проекта Virtuozzo началась более 15 лет назад, когда компания занялась разработкой инструментария контейнерной виртуализации для Linux. В 2001 году был представлен промышленный продукт Virtuozzo, быстро завоевавший популярность у хостинг-провайдеров благодаря высокой плотности виртуальных окружений и низким накладным расходам, сочетавшимся с хорошей изоляцией окружений друг от друга. Virtuozzo изначально был проприетарным продуктом, однако с 2005 года многие наработки компании стали доступны всем желающим в рамках Open Source проекта OpenVZ. Проект предоставлял сборки Linux-ядра с наложенными патчами для контейнерной виртуализации и утилиту для управления контейнерами. На ранних этапах развития эти патчи в основную ветку Linux-ядра интегрировалиcь. Как следствие, размер патчей со временем только увеличивался, а затраты на портирование на новые версии ядер возрастали. Способ борьбы с этой проблемой был достаточно очевиден – необходимо переносить нужные патчи в основную ветку разработки ядра. Поэтому в 2007 году компания приняла стратегическое решение по интеграции наработок в «ванильное» ядро, и первые успехи не заставили себя ждать: совместно с разработчиками из IBM в основную ветку была добавлена реализация пространства имен PID, и в том же году разработчик OpenVZ добавил поддержку пространства имен для сети [2]. Интеграция крупных изменений в ядро Linux не всегда проходит гладко, ведь необходимо выработать решение, устраивающее всех участников разработки. А многие из этих участников не всегда соглашаются с востребованностью той или иной функциональности либо имеют свое видение, как решать определенную проблему. Поэтому этот

декабрь 2015 системный администратор


виртуализация процесс сопровождается длительными обсуждениями и переработкой патчей [3]. Но и реальные плоды этого взаимодействия сообщество пожинает уже несколько лет – во многом благодаря усилиям разработчиков OpenVZ стало возможным появление в ядре механизмов виртуализации, используемых ныне в LXC (Linux Containers) и других инструментах. При этом весомый вклад в развитие LXC внесли и другие разработчики и компании (в частности, Google), так что в итоге получилась взаимовыгодная кооперация. Между тем сообщество – сообществом, а бизнес – бизнесом. С течением времени проект OpenVZ несколько отдалился от коммерческого Virtuozzo (например, для одних и тех же действий в этих продуктах использовались команды с разными именами и опциями – мелочь, а неудобно). В 2007 году SWsoft сначала слилась со своей дочерней компанией Parallels, а затем взяла ее имя, и, наконец, спектр предлагаемых компанией продуктов сильно расширился. В частности, в сфере серверной виртуализации в 2013‑м был представлен продукт Paralles Cloud Server (PCS), объединивший в себе контейнерную и гипервизорную виртуализацию, который дополнялся распределенной системой хранения данных для облаков – Parallels Cloud Storage. Следующим шагом стало решение объединить в 2015 году кодовые базы открытого OpenVZ и коммерческого Parallels Cloud Server в рамках проекта с хорошо знакомым именем – Virtuozzo. Именно в рамках этого проекта и ведется сейчас разработка следующей версии продукта, в основе которой лежит ядро из Red Hat Enterprise Linux 7. Летом 2015-го был выпущен Technical Preview для Virtuozzo 7, выложенный в публичный доступ на сайте OpenVZ [4]. Именно обзору этого продукта мы посвятим оставшуюся часть этой статьи и, надеемся, еще ряд статей в будущем. Помните, что дистрибутив Virtuozzo 7 на данный момент находится в стадии разработки, и использовать его рекомендуется только для знакомства и экспериментов. Если вам необходим продукт для промышленного использования, стоит обратиться к предыдущей версии [5]. Разработчики придерживаются принципов обратной совместимости, и практически все описанные в данной статье команды будут работать как в новой, так и в старой версии Virtuozzo.

Администрирование Установка займет совсем немного времени, и по ее завершении можете перезагрузить машину и оказаться внутри дистрибутива, основанного на RHEL 7, но использующего специализированное ядро и сопутствующий инструментарий для управления контейнерами. Экспериментировать с контейнерами можно сразу после входа в систему, никаких дополнительных действий не требуется. Однако помните, что для работы с контейнерами необходимы права суперпользователя. Управление контейнерами осуществляется из командной строки с помощью утилиты prlctl. Для начала создадим контейнер CentOS 7, используя соответствующий шаблон: # prlctl create СentOS --vmtype ct --ostemplate ↵ centos-7-x86_64

Опция --vmtype указывает, какого типа виртуальное окружение следует создать. В этой статье мы ограничимся контейнерами (ct) – легковесными окружениями, использующими виртуализацию на уровне ОС. Контейнеры Virtuozzo могут использоваться только для запуска дистрибутивов Linux, поскольку в каждой гостевой системе используется то же ядро, что и в основной. Инструментарий позволяет создавать и полноценные виртуальные машины, в которых можно запускать произвольные ОС; для этого необходимо выставить опцию --vmtype в значение vm. Многое из того, что мы расскажем ниже об управлении контейнерами, справедливо и для виртуальных машин. Сразу отметим, что для prlctl хорошо настроено автодополнение оболочки bash, затрагивающее как сами команды и опции, так и их аргументы – имена шаблонов, контейнеров и прочих сущностей. Так что, если возникают сомнения в том, как называется та или иная опция, либо просто хочется побыстрее набрать команду, смело жмите клавишу <Tab>. Скачивание и развертывание шаблона – дело не быстрое, и для ускорения процесса нужные шаблоны можно предварительно закэшировать. Например, вот так можно скачать шаблон Ubuntu 14.04, закэшировать его и затем развернуть из него контейнер: Рисунок 1. Установщик Virtuozzo – адаптированная Anaconda от Red Hat

Первое знакомство с Virtuozzo 7 В данной статье мы ограничимся обзором контейнеров, реализация которых не опирается на возможности аппаратуры, поэтому для использования контейнеров Virtuozzo можно развернуть как на реальной, так и в виртуальной машине. Минимальная конфигурация, достаточная для знакомства с продуктом, – 1 ядро процессора, 1 Гб оперативной памяти и 10 Гб свободного места на диске. Для развертывания Virtuozzo 7 предоставляются ISO-образы с установщиком, основанным на программе установки Red Hat Enterprise Linux. Процесс установки не отличается от Red Hat за тем исключением, что единственным вариантом набора ПО (Software Selection) является Virtuozzo, а источником пакетов – локальный носитель. Во время установки пакетов необходимо задать пароль root и при необходимости создать локального пользователя.

системный администратор декабрь 2015

5


Администрирование # yum install -y ubuntu-14.04-x86_64-ez # vzpkg create cache ubuntu-14.04-x86_64 # prlctl create Ubuntu --vmtype ct --ostemplate ↵ ubuntu-14.04-x86_64

На данный момент в репозиториях Virtuozzo доступны шаблоны для 64-битных CentOS 6 и 7, Ubuntu 14.04, 14.10 и 15.04, Debian 8.0, Fedora 22, а также 32-битный CentOS 5. Загруженные шаблоны помещаются в директорию /vz/template/cache. После создания контейнер не активен; запустить его можно с помощью команды start: # prlctl start Ubuntu

Обращаться к контейнеру можно как по имени, так и по его уникальному идентификатору (UUID). Идентификатор не так удобен, но иногда без него не обойтись – например, служебные данные контейнера с идентификатором ID размещаются в директории /vz/private/ID, основные настройки – в файле /etc/vz/conf/ID.conf, а файловая система контейнера монтируется в директорию /vz/root/ID.

виртуализация >> mount/umount – смонтировать/отмонтировать файловую систему неактивного контейнера в соответствующую поддиректорию /vz/root; >> clone – создать клон контейнера, отличающийся от оригинала только MAC-адресом; эта же команда может быть использована для создания шаблона на основе существующего контейнера. Отдельного внимания заслуживает команда set, с помощью которой можно управлять всевозможными аспектами конфигурации ваших виртуальных окружений. Посредством этой команды задаются аппаратные параметры и ограничения (количество ядер процессора и оперативной памяти, лимиты на их использование и тому подобное), пароли пользователей внутри контейнера (в том числе root), сетевые настройки (IP-адрес, DNS, имя машины), параметры VNC для доступа к контейнеру и многое другое. Например, можно ограничить контейнер CentOS размером памяти в 1 Гб и одним ядром процессора: # prlctl set CentOS --memsize 1G --cpus 1

Сегодня Virtuozzo – это уже не только легковесная виртуализация на уровне ОС, но и полноценные виртуальные машины Контейнеры запускаются в неинтерактивном режиме, не предоставляя вам управляющий терминал. Запустить сеанс оболочки внутри контейнера с помощью команды:

А вот так – ограничить размер его жесткого диска: # prlctl set UbuntuVz7 --device-set hdd0 --size 100G

Полезна возможность добавлять контейнерам произвольные описания – ведь по короткому названию не всегда можно вспомнить, для чего контейнер предназначен. Описание задается с помощью все той же команды set: # prlctl set CentOS --description «My first CentOS container»

А получить описание можно с помощью команды list, явно затребовав нужное нам свойство:

# prlctl enter # prlctl list CentOS -o description

Другие базовые команды prlctl: >> list – получить перечень всех активных контейнеров и сведений об их состоянии (а с опцией «-a» будут показаны как активные, так и неактивные контейнеры); >> status – получить информацию о конкретном контейнере; >> stop – остановить контейнер; >> restart – перезапустить контейнер; если контейнер не был активен, то он будет запущен; >> delete – удалить контейнер (обратите внимание, что удалить можно только неактивный контейнер, то есть перед удалением его необходимо остановить); >> exec – выполнить произвольную команду внутри контейнера; вывод команды будет перенаправлен в ваш терминал; Рисунок 2. Вызов lsb_release внутри контейнера Ubuntu подтвердит, что мы находимся в Ubuntu 14.04

Приведенные примеры – это лишь небольшая часть возможностей инструментов управления контейнерами. Полный перечень доступных команд и их подробное описание доступны в man-страничке утилиты prlctl. За некоторыми из них скрываются возможности, заслуживающие отдельного внимания, однако мы надеемся, что и изложенного выше материала хватит, чтобы приступить к изучению одного из лидеров на рынке серверной виртуализации.  EOF  [1] Силаков Д. Виртуализация на платформе x86. // «Системный администратор», №10, 2013 г. – С. 80-84 (http://samag.ru/ archive/article/2547). [2] OpenVZ vs LXC – http://ru-openvz.livejournal.com/1970.html. [3] Штомпель И. Павел Емельянов: «Разработка ядра Linux – это общение в «клубе по интересам». // «Системный администратор», №7-8, 2013 г. – С. 62-66 (http://samag.ru/archive/article/2487). [4] Virtuozzo 7 Technical Preview – Containers – https://openvz.org/ Virtuozzo_7_Technical_Preview_-_Containers. [5] Официальный сайт Virtuozzo – http://www.odin.com/ru/products/ virtuozzo. Ключевые слова: виртуализация, OpenVZ, контейнеры, Virtuozzo.

6

декабрь 2015 системный администратор


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.