Контейнерная виртуализация характеризуется высокой эффективностью, но в некоторых случаях она неприменима, и необходимо использовать полноценные виртуальные машины.n
Создание и запуск ВМ Virtuozzo 7
Чтобы иметь возможность работать с ВМ, необходимо установить последнюю доступную версию Virtuozzo 7 (https://download.openvz.org/virtuozzo/releases/7.0/x86_64/iso). Поскольку виртуальные машины основаны на KVM, то необходим сервер с аппаратной поддержкой виртуализации.nnУправление виртуальными машинами осуществляется с помощью утилиты prlctl, которая используется и для управления контейнерами. Главное отличие — при создании виртуальной машины необходимо опцию —vmtype выставить в значение vm:n
# prlctl create vml --vmtype vm --distribution=win-xp
Как и для контейнеров, при создании ВМ можно использовать заранее подготовленные шаблоны с помощью опции —ostemplate. Рассмотрим вариант, когда нужно самостоятельно установить операционную систему внутрь ВМ (что вполне вероятно, ведь нужного шаблона может и не оказаться). В отсутствие шаблона можно указать, ОС какого семейства вы планируете использовать, с помощью опции —distribution. Получить перечень возможных значений для этой опции можно с помощью следующей команды:n
# prlctl create vm -d list
Советуем внимательно подойти к выбору значения этой опции при создании ВМ, поскольку при расхождении с реально устанавливаемой системой могут возникнуть неприятности — например, в одном из наших экспериментов попытка установить Window XP в сконфигурированную под CentOS машину успехом не увенчалась, закончившись «синим экрном смерти».nnСамый прямолинейный способ установить ОС в виртуальную машину Virtuozzo — это подключить к машине установочный диск и загрузиться с него, контролируя ход установки по VNC. Для этого перед стартом машины необходимо подключить к ней ISO-образ установочного диска (также поддерживаются форматы CUE, CCD и DMG, а кроме того, можно подключить DVD-привод машины, на котором запускается ВМ):n
# prlctl set vml --device-add cdrom --image <имя_образа.iso>
а также разрешить доступ по VNC — для простоты разрешим доступ без пароля:n
# prlctl set vml --vnc-mode auto --vnc-nopasswd
Теперь можно запустить ВМ точно так же, как мы это делали с контейнерами:n
# prlctl start vml
После чего можно подключиться к серверу, на котором запущена ВМ, с помощью любого VNC-клиента. Машина должна загрузиться с подключенного образа, и мы увидим программу установки (см. рис. 1). При необходимости доступа к нескольким ВМ на одном сервере можно разнести их на разные порты с помощью опции —vnc-port.nnnnЕсли по какой-то причине ВМ начинает загружаться не с того устройства, можно изменить порядок загрузки с помощью prlctl set. Например, следующая команда заставит ВМ грузиться сначала с устройства cdroml, затем с hddO:n
# prlctl set vml --device-bootorder="cdrom1 hdd0"
Какие именно устройства подключены к ВМ, показывает расширенная информация:n
# prlctl list -i vml
Управление ВМ
Как вы уже наверняка заметили, управление виртуальными машинами в Virtuozzo мало чем отличается от управления контейнерами — все операции можно производить с помощью одной и той же утилиты prlctl, а названия и опции многих операций не зависят от типа виртуального окружения. Впрочем, некоторые операции доступны только для контейнеров, а некоторые — только для ВМ.nnНапример, ряд команд (в частности, create и clone, с которой мы познакомимся чуть позже) имеет опцию —changesid, изменяющую значение идентификатора безопасности Windows (SID — security idendifier); но поскольку Virtuozzo 7 позволяет создавать только Linux-контейнеры, то для контейнеров эта опция неактуальна.nnТо же самое можно сказать о возможности выставить режим SD-ускорения внутри ВМ в dx9 (обеспечивающий поддержку DirectX 9), а более заметный пример — это возможность приостановить работу ВМ командой prlctl pause (остановка осуществляется мгновенно, а продолжить работу ВМ можно с помощью prlctl start).nnПолный набор действий, которые prlctl позволяет осуществлять с ВМ, можно найти в (https://docs.openvz.org/virtuozzo_7_users_guide.pdf)nnДля выполнения операций, требующих взаимодействия с операционной системой внутри ВМ (например, prlctl exec или prlctl enter), необходимо предварительно установить внутри ВМ специальные дополнения — Virtuozzo Guest Tools. Эти дополнения в первую очередь содержат драйверы для ядра гостевой ОС, которые позволят основной системе с ней общаться; в случае контейнеров необходимости в отдельной установке таких драйверов нет, так как в основной и гостевых ОС используется одно и то же ядро.nnДля установки Guest Tools выполните следующую команду, которая подключит ISO-образ с дополнениями, как диск CD-ROM в гостевой системе:n
# prlctl installtools vml
В Linux-системах необходимо запустить скрипт install с этого диска, который установит необходимые пакеты. В Windows необходимо установить драйвер VirtIO посредством inf-файла vioserial/<Win_version>/<architecture>/ vioser.inf, а также запустить установщики prl_nettool_<Win_ arch>.msi и qemu-ga-<Win_arch>.msi.nnПризнаком корректности установки дополнений как в ОС Windows, так и в Linux будет запущенный сервис qemu-ga (QEMU Guest Agent — как видно из названия, это стандартный агент QEMU, доработанный под нужды Virtuozzo).nnКак и для любого ПО, для гостевых дополнений время от времени выходят обновления, автоматическую установку которых внутри ВМ можно настроить с помощью следующей команды:n
# prlctl set vml -tools-autoupdate on
Настройка сети
Важный аспект настройки ВМ — это конфигурация сетевого взаимодействия с внешним миром и друг с другом. По умолчанию Virtuozzo создает на сервере две сети, к которым можно подключать ВМ и контейнеры:n
- Bridged — связанную с одним из сетевых адаптеров сервера и имеющую доступ наружу,
- Host-only — привязанную к специальному виртуальному адаптеру и используемую для виртуальных окружений, которым нужен доступ только к серверу и другим окружениям на этом сервере.
Можно создавать несколько сетей одного вида, так что ВМ и контейнеры будут видеть только окружения только в той сети, к которой подключены сами. Управление сетями осуществляется с помощью команды prlsrvctl. Например, следующая команда создаст сеть networkl типа bridged и привяжет ее к сетевому интерфейсу enp0s6 на сервере.n
# prlsrvctl net add networkl -t bridged --ifname enp0s6
Опция —dhcp-server позволяет включать/отключать использование DHCP-сервера для ВМ, подключаемых к данной сети, IP-адрес этого сервера указывается в —dhcp-ip. Диапазон адресов в сети задается посредством —ip (принимающей аргумент в виде «адрес/маска подсети») либо пары —ip-scope-start/—ip-scope-end.nnКоманда prlsrvctl net list покажет список имеющихся сетей, prlsrvctl net set может быть использована для изменения параметров, а prlsrvctl net del — для их удаления.nnЧто касается подключения ВМ, то для каждой из них Virtuozzo позволяет определить до 16 сетевых адаптеров, каждый из которых можно соединить с отдельной сетью. Добавление адаптеров осуществляется командой prlctl set —device-add:n
# prlctl set vml --device-add netl
А посредством опции —device-set можно задавать настройки. В частности, можно вручную прописать IP, DNS и шлюз:n
# prlctl set vml --device-set netl --ipadd 192.129.129.20 --gw 192.129.129.1 --nameserver 192.192.192.10
либо настроить машину на использование DHCP:n
# prlctl set vm1 --device-set net1 --dhcp yes
Обратите внимание, что для манипуляций с настройками сетевого адаптера с помощью prlctl внутри ВМ должны быть установлены Virtuozzo Guest Tools.nnПо умолчанию сетевые адаптеры ВМ подключаются к одной из сетей типа Bridged. Подключить адаптер к другой сети можно с помощью все той же опции —device-set:n
# prlctl set vm1 --device-set net1 --network network1
Использование сторонних инструментов
Поскольку виртуальные машины в Virtuozzo 7 основаны на QEMU/KVM, то для управления ими можно использовать и сторонние средства — например, virt-install, virsh или virt-manager, доступный в репозиториях Virtuozzo (см. рис. 2).nnnnСовместимость имеет место быть в двух направлениях -prlctl может применяться для контроля машин, созданных с помощью сторонних утилит, а эти самые утилиты могут использоваться для взаимодействия с ВМ, созданными с помощью prlctl.nnУчтите, что, хотя основная пакетная база Virtuozzo 7 основана на RHEL 7.x, версии QEMU, virt-manager и ряда других пакетов, относящихся к виртуализации, существенно новее, чем в RHEL, и содержат уникальные для Virtuozzo модификации. Поэтому сторонние инструменты, даже взятые из RHEL, могут работать некорректно либо предоставлять неполный функционал.nnВсе инструменты для работы с QEMU/KVM позволят работать с виртуальными машинами Virtuozzo, но не с контейнерами. Достоинством же «родных» средств Virtuozzo (в частности, prlctl) является унификация работы с контейнерами и ВМ — при выполнении большинства команд вам не обязательно знать, какой тип виртуализации используется для того или иного окружения.n
Клонирование и создание шаблонов
Создание ВМ «с нуля» посредством установки и настройки ОС и необходимых приложений — занятие трудоемкое и немасштабируемое. Наличие заранее подготовленных шаблонов с основными дистрибутивами Linux и стеками приложений частично спасает ситуацию. Найти сторонние шаблоны на все случаи жизни вряд ли получится, однако можно подготовить их самим. Для создания большого количества виртуальных окружений с одинаковыми характеристиками пригодится возможность клонирования уже имеющихся ВМ и контейнеров. Virtuozzo совмещает эти две задачи (клонирование и создание шаблонов) в операции prlctl clone, которая может быть использована как для ВМ, так и для контейнеров.nnОсновное использование этой команды прямолинейно. Для примера склонируем vm1 в vm2:n
# prlctl clone vm1 --name vm2
По умолчанию создается виртуальное окружение, полностью идентичное исходному, за исключением MAC-адреса. Для Windows-машин имеет смысл указать уже упоминавшуюся опцию —changesid для генерации Security ID, отличного от SID исходной машины. Чтобы эта опция отработала успешно, в исходной ВМ должны быть установлены Virtuozzo Guest Tools.nn
nСоздаваемый клон полностью независим от родительской машины — в частности, для него создается свой собственный виртуальный жесткий диск, являющийся копией диска исходной системы.nnУказав опцию —linked, можно создавать связанные ВМ, основанные на снимке состояния исходного окружения. Для таких клонов хранятся только изменения, сделанные после создания снимка, которые на этот снимок накладываются.nnВсе последующие изменения, производимые с диском родительской ВМ, не затрагивают связанный клон, и наоборот. Такой подход позволяет сэкономить дисковое пространство на сервере, однако требует наличия родительской ВМ на той же машине, где располагается клон, — то есть перенести только клонированную ВМ на другой сервер вы не сможете.nnДля создания шаблона достаточно добавить опцию —template:n
# prlctl clone vml --name my_vm_template -template
После этого сможете указывать имя my_vm_template в опции —ostemplate при создании новых ВМ.nnТаким образом, Virtuozzo 7 позволяет разворачивать на одном физическом сервере как легковесные контейнеры, так и полноценные ВМ на основе гипервизора KVM, делая возможным развертывание виртуальных сред на базе Windows и BSD (что актуально, например, для провайде-ров, и позволяет им существенно расширить спектр своих VPS-предложений). При этом Virtuozzo предоставляет унифицированный интерфейс для управления всеми виртуальными окружениями независимо от их типа.nnНадеюсь, что данная статья в совокупности со статьей дала вам достаточно сведений, чтобы попробовать Virtuozzo 7 в деле.nnИсточник: журнал Системный администратор №158-159n
Предоставляем услуги разработки, установки и поддержки ИТ инфраструктуры с использованием виртуализации.