Віртуальні машини в Virtuozzo 7

  1. управління ВМ
  2. Налаштування мережі
  3. Використання сторонніх інструментів
  4. Клонування і створення шаблонів

Контейнерна віртуалізація характеризується високою ефективністю, але в деяких випадках вона непридатна, і необхідно використовувати повноцінні віртуальні машини.

У попередній статті про Virtuozzo 7 ми відзначали, що поряд з перевагами у вигляді низьких накладних витрат і високої продуктивності контейнерна віртуалізація за визначенням має обмеженнями в плані операційних систем, які можна використовувати всередині віртуальних оточень, - адже ці ОС повинні будуть працювати на тому ж ядрі, що і основна система. Крім того, реалізація контейнерної віртуалізації вимагає втручання в ядро ​​системи, що важко без доступу до її вихідного коду. Тому даний вид віртуалізації традиційно застосовується у відкритих системах, і в першу чергу в Linux.

Linux - популярна ОС на серверах і на ринку хостинг-провайдерів, однак непоодинокі випадки, коли контейнерна віртуалізація не працює і необхідні більш «великовагові» підходи. Чи розуміють це і розробники Virtuozzo, і контейнерної виртуализацией можливості їх продуктів не обмежуються.

Робота з віртуальними машинами стала ключовим нововведенням черговий попередньою версією Virtuozzo 7, що вийшла в грудні 2015 року. Як і попередня, ця версія має статус Technical Preview і призначена для ознайомлення, але не для промислового застосування.

Підтримка «повноцінних» віртуальних машин (надають більш високий ступінь ізоляції в порівнянні з контейнерами і дозволяють запускати будь-які гостьові ОС) була в продуктах Virtuozzo вже давно, проте до Virtuozzo 6 включно для управління такими машинами використовувався свій власний пропріетарний ги-первізор.

У новій же версії продукту тенденцію переходу на відкриті інструменти було вирішено продовжити і в сфері гіпервізора. У Virtuozzo 7 управління віртуальними машинами покладено на KVM, до теперішнього часу став досить зрілим для промислового використання. Причини такого переходу традиційні - створювати складний продукт спільно з іншими великими гравцями вигідно як з точки зору зниження власних витрат на розробку, так і в плані отримання продукту зі стандартною основою, знайомої багатьом потенційним користувачам.

У цій статті розглянемо процес управління віртуальними машинами в Virtuozzo 7 і спробуємо оцінити, що унікального пропонує Virtuozzo в порівнянні з іншими рішеннями, заснованими на KVM.

Щоб мати можливість працювати з ВМ, необхідно встановити останню доступну версію Virtuozzo 7 (https://download.openvz.org/virtuozzo/releases/7.0/x86_64/iso). Оскільки віртуальні машини засновані на KVM, то необхідний сервер з апаратною підтримкою віртуалізації.

Управління віртуальними машинами здійснюється за допомогою утиліти prlctl, яка використовується і для управління контейнерами. Головна відмінність - при створенні віртуальної машини необхідно опцію -vmtype виставити в значення vm:

# Prlctl create vml --vmtype vm --distribution = win-xp

Як і для контейнерів, при створенні ВМ можна використовувати заздалегідь підготовлені шаблони за допомогою опції -ostemplate. Розглянемо варіант, коли потрібно самостійно встановити операційну систему всередину ВМ (що цілком ймовірно, адже потрібного шаблону може і не виявитися). За відсутності шаблону можна вказати, ОС якого сімейства ви плануєте використовувати, за допомогою опції -distribution. Отримати перелік можливих значень для цієї опції можна за допомогою наступної команди:

# Prlctl create vm -d list

Радимо уважно підійти до вибору значення цієї опції при створенні ВМ, оскільки при розбіжності з реально встановлюється системою можуть виникнути неприємності - наприклад, в одному з наших експериментів спроба встановити Window XP в налаштована під CentOS машину успіхом не увінчалася, закінчившись «синім екрном смерті».

Самий прямолінійний спосіб встановити ОС в віртуальну машину Virtuozzo - це підключити до машини інсталяційний диск і завантажитися з нього, контролюючи хід установки по VNC. Для цього перед стартом машини необхідно підключити до неї ISO-образ інсталяційного диска (також підтримуються формати CUE, CCD і DMG, а крім того, можна підключити DVD-привід машини, на якому запускається ВМ):

# Prlctl set vml --device-add cdrom --image <імя_образа.iso>

а також дозволити доступ по VNC - для простоти дозволимо доступ без пароля:

# Prlctl set vml --vnc-mode auto --vnc-nopasswd

Тепер можна запустити ВМ точно так же, як ми це робили з контейнерами:

Після чого можна підключитися до сервера, на якому запущена ВМ, за допомогою будь-якого VNC-клієнта. Машина повинна завантажитися з підключеного образу, і ми побачимо програму установки (див. Рис. 1). При необхідності доступу до декількох ВМ на одному сервері можна рознести їх на різні порти за допомогою опції -vnc-port.

При необхідності доступу до декількох ВМ на одному сервері можна рознести їх на різні порти за допомогою опції -vnc-port

Якщо з якоїсь причини ВМ починає завантажуватися ні з того пристрою, можна змінити порядок завантаження за допомогою prlctl set. Наприклад, наступна команда змусить ВМ грузиться спочатку з пристрою cdroml, потім з hddO:

# Prlctl set vml --device-bootorder = "cdrom1 hdd0"

Які саме пристрої підключені до ВМ, показує розширена інформація:

управління ВМ

Як ви вже напевно помітили, управління віртуальними машинами в Virtuozzo мало чим відрізняється від управління контейнерами - всі операції можна проводити за допомогою однієї і тієї ж утиліти prlctl, а назви і опції багатьох операцій не залежать від типу віртуального оточення. Втім, деякі операції доступні тільки для контейнерів, а деякі - тільки для ВМ.

Наприклад, ряд команд (зокрема, create і clone, з якої ми познайомимося трохи пізніше) має опцію -changesid, змінює значення ідентифікатора безпеки Windows (SID - security idendifier); але оскільки Virtuozzo 7 дозволяє створювати тільки Linux-контейнери, то для контейнерів ця опція неактуальна.

Те ж саме можна сказати про можливості виставити режим SD-прискорення всередині ВМ в dx9 (що забезпечує підтримку DirectX 9), а більш помітний приклад - це можливість призупинити роботу ВМ командою prlctl pause (зупинка здійснюється миттєво, а продовжити роботу ВМ можна за допомогою prlctl start ).

Повний набір дій, які prlctl дозволяє здійснювати з ВМ, можна знайти в (https://docs.openvz.org/virtuozzo_7_users_guide.pdf)

Для виконання операцій, які потребують взаємодії з операційною системою всередині ВМ (наприклад, prlctl exec або prlctl enter), необхідно попередньо встановити всередині ВМ спеціальні доповнення - Virtuozzo Guest Tools. Ці доповнення в першу чергу містять драйвери для ядра гостьової ОС, які дозволять основній системі з нею спілкуватися; в разі контейнерів необхідності в окремій установці таких драйверів немає, так як в основний і гостьових ОС використовується один і той же ядро.

Для установки Guest Tools виконайте наступну команду, яка підключить ISO-образ з доповненнями, як диск CD-ROM в гостьовій системі:

# Prlctl installtools vml

В Linux-системах необхідно запустити скрипт install з цього диска, який встановить необхідні пакети. У Windows необхідно встановити драйвер VirtIO допомогою inf-файлу vioserial / <Win_version> / <architecture> / vioser.inf, а також запустити установники prl_nettool_ <Win_ arch> .msi і qemu-ga- <Win_arch> .msi.

Ознакою коректності установки доповнень як в ОС Windows, так і в Linux буде запущений сервіс qemu-ga (QEMU Guest Agent - як видно з назви, це стандартний агент QEMU, доопрацьований під потреби Virtuozzo).

Як і для будь-якого ПО, для гостьових доповнень час від часу виходять оновлення, автоматичну установку яких всередині ВМ можна налаштувати за допомогою наступної команди:

# Prlctl set vml -tools-autoupdate on

Налаштування мережі

Важливий аспект налаштування ВМ - це конфігурація мережевого взаємодії із зовнішнім світом і один з одним. За замовчуванням Virtuozzo створює на сервері дві мережі, до яких можна підключати ВМ і контейнери:

  • Bridged - пов'язану з одним з мережевих адаптерів сервера і має доступ назовні,
  • Host-only - прив'язану до спеціального віртуального адаптера і використовувану для віртуальних оточень, яким потрібен доступ тільки до сервера і іншим оточенням на цьому сервері.

Можна створювати кілька мереж одного виду, так що ВМ і контейнери будуть бачити тільки оточення тільки в тій мережі, до якої підключені самі. Управління мережами здійснюється за допомогою команди prlsrvctl. Наприклад, наступна команда створить мережу networkl типу bridged і прив'яже її до мережевого інтерфейсу enp0s6 на сервері.

# Prlsrvctl net add networkl -t bridged --ifname enp0s6

Опція -dhcp-server дозволяє вмикати / вимикати використання DHCP-сервера для ВМ, що підключаються до даної мережі, IP-адреса цього сервера вказується в -dhcp-ip. Діапазон адрес в мережі задається за допомогою -ip (приймаючої аргумент у вигляді «адреса / маска підмережі») або пари -ip-scope-start / -ip-scope-end.

Команда prlsrvctl net list покаже список наявних мереж, prlsrvctl net set може бути використана для зміни параметрів, а prlsrvctl net del - для їх видалення.

Що стосується підключення ВМ, то для кожної з них Virtuozzo дозволяє визначити до 16 мережевих адаптерів, кожен з яких можна з'єднати з окремою мережею. Додавання адаптерів здійснюється командою prlctl set -device-add:

# Prlctl set vml --device-add netl

А за допомогою опції -device-set можна задавати настройки. Зокрема, можна вручну прописати IP, DNS і шлюз:

# Prlctl set vml --device-set netl --ipadd 192.129.129.20 --gw 192.129.129.1 --nameserver 192.192.192.10

або налаштувати машину на використання DHCP:

# Prlctl set vm1 --device-set net1 --dhcp yes

Зверніть увагу, що для маніпуляцій з настройками мережевого адаптера за допомогою prlctl всередині ВМ повинні бути встановлені Virtuozzo Guest Tools.

За замовчуванням мережеві адаптери ВМ підключаються до однієї з мереж типу Bridged. Підключити адаптер до іншої мережі можна за допомогою все тієї ж опції -device-set:

# Prlctl set vm1 --device-set net1 --network network1

Використання сторонніх інструментів

Оскільки віртуальні машини в Virtuozzo 7 засновані на QEMU / KVM, то для управління ними можна використовувати і сторонні кошти - наприклад, virt-install, virsh або virt-manager, доступний в репозиторіях Virtuozzo (див. Рис. 2).

Сумісність має місце бути в двох напрямках -prlctl може застосовуватися для контролю машин, створених за допомогою сторонніх утиліт, а ці самі утиліти можуть використовуватися для взаємодії з ВМ, створеними за допомогою prlctl.

Врахуйте, що, хоча основна пакетна база Virtuozzo 7 заснована на RHEL 7.x, версії QEMU, virt-manager і ряду інших пакетів, що відносяться до віртуалізації, істотно новіше, ніж в RHEL, і містять унікальні для Virtuozzo модифікації. Тому сторонні інструменти, навіть взяті з RHEL, можуть не працювати належним чином або надавати неповний функціонал.

Всі інструменти для роботи з QEMU / KVM дозволять працювати з віртуальними машинами Virtuozzo, але не з контейнерами. Перевагою ж «рідних» коштів Virtuozzo (зокрема, prlctl) є уніфікація роботи з контейнерами і ВМ - при виконанні більшості команд вам не обов'язково знати, який тип віртуалізації використовується для того чи іншого оточення.

Клонування і створення шаблонів

Створення ВМ «з нуля» за допомогою установки і настройки ОС і необхідних додатків - заняття трудомістке і немасштабіруемое. Наявність заздалегідь підготовлених шаблонів з основними дистрибутивами Linux і стеками додатків частково рятує ситуацію. Знайти сторонні шаблони на всі випадки життя навряд чи вийде, проте можна підготувати їх самим. Для створення великої кількості віртуальних оточень з однаковими характеристиками стане в нагоді можливість клонування вже наявних ВМ і контейнерів. Virtuozzo поєднує ці два завдання (клонування і створення шаблонів) в операції prlctl clone, яка може бути використана як для ВМ, так і для контейнерів.

Основне використання цієї команди прямолінійно. Для прикладу склоніруем vm1 в vm2:

# Prlctl clone vm1 --name vm2

За замовчуванням створюється віртуальне оточення, повністю ідентичне вихідному, за винятком MAC-адреси. Для Windows-машин має сенс вказати вже згадувану опцію -changesid для генерації Security ID, відмінного від SID вихідної машини. Щоб ця опція відпрацювала успішно, у вихідній ВМ повинні бути встановлені Virtuozzo Guest Tools.

Створюваний клон повністю незалежний від батьківської машини - зокрема, для нього створюється свій власний віртуальний жорсткий диск, який є копією диска вихідної системи.

Вказавши опцію -linked, можна створювати пов'язані ВМ, засновані на знімку стану вихідного оточення. Для таких клонів зберігаються тільки зміни, зроблені після створення знімка, які на цей знімок накладаються.

Усі наступні зміни, вироблені з диском батьківської ВМ, не зачіпають пов'язаний клон, і навпаки. Такий підхід дозволяє заощадити дисковий простір на сервері, проте вимагає наявності батьківської ВМ на тій же машині, де розташовується клон, - тобто перенести тільки клоновану ВМ на інший сервер ви не зможете.

Для створення шаблону досить додати опцію -template:

Після цього зможете вказувати ім'я my_vm_template в опції -ostemplate при створенні нових ВМ.

Таким чином, Virtuozzo 7 дозволяє розгортати на одному фізичному сервері як легковагі контейнери, так і повноцінні ВМ на основі гипервизора KVM, роблячи можливим розгортання віртуальних середовищ на базі Windows і BSD (що актуально, наприклад, для провайде-рів, і дозволяє їм істотно розширити спектр своїх VPS-пропозицій). При цьому Virtuozzo надає уніфікований інтерфейс для управління всіма віртуальними оточеннями незалежно від їх типу.

Сподіваюся, що дана стаття в сукупності зі статтею дала вам досить відомостей, щоб спробувати Virtuozzo 7 в справі.

Джерело: журнал Системний адміністратор №158-159

Новости