Основы виртуализации и введение в KVM. Русскоязычная документация по Ubuntu

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

Сменить тип виртуализации после запуска невозможно, поскольку серверы находятся на разных аппаратных платформах. Вам придётся заказать новый сервер, перенести проект и отказаться от старого сервера.

Сравнение типов виртуализаций

OpenVZ KVM
ОС из ряда предложенных: Debian, CentOS, Ubuntu Linux, Windows, FreeBSD, установка собственного дистрибутива
Изменение ресурсов без перезагрузки (жёсткий диск, память, процессор) Память и процессор изменятся после перезагрузки, жёсткий диск - только после обращения в поддержку (на готовых тарифах память изменить нельзя)
Смена тарифного плана без перезагрузки

Смена тарифного плана . Сервер будет недоступен 1-2 часа.

Мягкие лимиты: максимальная производительность сервера может отклоняться в большую или меньшую сторону Жёсткие лимиты: каждый сервер получает заявленные ресурсы
Ограничение на запуск высоконагруженных проектов. Запрещено запускать Java-приложения, массовые рассылки и проксировать трафик. TUN/TAP выключен. Возможность запуска любых проектов (кроме систем распределённых вычислений)

Виртуализация OpenVZ

OpenVZ - виртуализация уровня операционной системы. Технология базируется на ядре ОС Linux и позволяет на одном физическом сервере создавать и запускать изолированные друг от друга копии выбранной операционной системы (Debian, CentOS, Ubuntu). Установка другой ОС невозможна, так как виртуальные серверы используют общее ядро Linux.

Технология отличается легкостью управления сервером: пользователь может в личном кабинете самостоятельно добавить количество ресурсов (память, процессор, жесткий диск) или перейти на другой тариф с той же виртуализацией. Изменения ресурсов применяются автоматически, без перезагрузки сервера.

На серверах с виртуализацией OpenVZ запрещается запускать:

  • сервисы для организации проксирования любого вида трафика
  • сервисы потокового вещания
  • игровые серверы
  • системы или элементы систем распределённых вычислений (например, bitcoin mining)
  • сервисы массовой рассылки почтовых сообщений, даже если они используются в легальных целях
  • Java-приложения
  • иные ресурсоёмкие приложения

Такие проекты создают неравномерную нагрузку на родительском сервере и могут мешать соседним виртуальным машинам.

Виртуализация KVM

KVM (Kernel-based Virtual Machine) - технология аппаратной виртуализации, позволяющая создать на хост-машине полный виртуальный аналог физического сервера . KVM позволяет создать полностью изолированный от «соседей» виртуальный сервер с собственным ядром ОС, который пользователь может настраивать и модифицировать под собственные нужды без ограничений. Каждому такому серверу выделяется своя область в оперативной памяти и пространство на жестком диске, что повышает общую надежность работы такого сервера.

Возможна установка любой операционной системы на выбор (Debian, CentOS, Ubuntu, FreeBSD, Windows Server), либо установка собственного дистрибутива (в панели VMmanager в разделе ISO-образы нажмите кнопку Создать и добавьте свой ISO-образ системы).

Смена тарифного плана возможна только в большую сторону и только в рамках базовой линейки тарифов (Старт, Разгон, Отрыв, Улёт). Если ваш проект «вырастет» из тарифа, напишите запрос в поддержку из Личного кабинета - администраторы сменят тариф на требуемый бесплатно. Изменить тариф в меньшую сторону можно только переносом на новый сервер. Закажите новый сервер и перенесите данные самостоятельно, либо специалисты технической поддержки помогут с переносом за 1 обращение по пакету администрирования или 250 руб.

Помните, что на тарифах VDS-Форсаж и VDS-Атлант , вы можете изменять ресурсы вместо смены тарифа : количество доступных ядер процессора и оперативной памяти самостоятельно в панели управления, а размер жёсткого диска - после обращения в поддержку (в рамках администрирования или за 250 руб.).

Учитывая особенности и преимущества, которые дает виртуализация KVM, ее тарифы стоят дороже аналогичных тарифов с виртуализацией OpenVZ.

На серверах с виртуализацией KVM Абоненту запрещается размещать системы или элементы систем распределённых вычислений (например, bitcoin mining ).

Смена виртуализации на сервере

В рамках одного сервера сменить виртуализацию с OpenVZ на KVM и обратно невозможно.

1. Закажите второй сервер с нужной виртуализацией в панели BILLmanager, раздел Виртуальные серверы → Заказать

2. Перенесите на него данные.

3. После переноса и проверки старый сервер можно удалить (Виртуальные серверы → Удалить).


Мне лично проще всего думать о KVM (Kernel-based Virtual Machine), как о таком уровне абстракции над технологиями хардверной виртуализации Intel VT-x и AMD-V. Берем машину с процессором, поддерживающим одну из этих технологий, ставим на эту машину Linux, в Linux’е устанавливаем KVM, в результате получаем возможность создавать виртуалки. Так примерно и работают облачные хостинги, например, Amazon Web Services . Наряду с KVM иногда также используется и Xen, но обсуждение этой технологии уже выходит за рамки данного поста. В отличие от технологий контейнерной виртуализации, например, того же Docker , KVM позволяет запускать в качестве гостевой системы любую ОС, но при этом имеет и бо льшие накладные расходы на виртуализацию.

Примечание: Описанные ниже действия были проверены мной на Ubuntu Linux 14.04, но по идее будут во многом справедливы как для других версий Ubuntu, так и других дистрибутивов Linux. Все должно работать как на десктопе, так и на сервере, доступ к которому осуществляется по SSH.

Установка KVM

Проверяем, поддерживается ли Intel VT-x или AMD-V нашим процессором:

grep -E "(vmx|svm)" / proc/ cpuinfo

Если что-то нагреполось, значит поддерживается, и можно действовать дальше.

Устанавливаем KVM:

sudo apt-get update
sudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils

Что где принято хранить:

  • /var/lib/libvirt/boot/ — ISO-образы для установки гостевых систем;
  • /var/lib/libvirt/images/ — образы жестких дисков гостевых систем;
  • /var/log/libvirt/ — тут следует искать все логи;
  • /etc/libvirt/ — каталог с файлами конфигурации;

Теперь, когда KVM установлен, создадим нашу первую виртуалку.

Создание первой виртуалки

В качестве гостевой системы я выбрал FreeBSD. Качаем ISO-образ системы:

cd / var/ lib/ libvirt/ boot/
sudo wget http:// ftp.freebsd.org/ path/ to/ some-freebsd-disk.iso

Управление виртуальными машинами в большинстве случаев производится при помощи утилиты virsh:

sudo virsh --help

Перед запуском виртуалки нам понадобится собрать кое-какие дополнительные сведения.

Смотрим список доступных сетей:

sudo virsh net-list

Просмотр информации о конкретной сети (с именем default):

sudo virsh net-info default

Смотрим список доступных оптимизаций для гостевых ОС:

sudo virt-install --os-variant list

Итак, теперь создаем виртуальную машину с 1 CPU, 1 Гб RAM и 32 Гб места на диске, подключенную к сети default:

sudo virt-install \
--virt-type =kvm \
--name freebsd10 \
--ram 1024 \
--vcpus =1 \
--os-variant =freebsd8 \
--hvm \
--cdrom =/ var/ lib/ libvirt/ boot/ FreeBSD-10.2 -RELEASE-amd64-disc1.iso \
--network network =default,model =virtio \
--graphics vnc \
--disk path =/ var/ lib/ libvirt/ images/ freebsd10.img,size =32 ,bus =virtio

Вы можете увидеть:

WARNING Unable to connect to graphical console: virt-viewer not
installed. Please install the "virt-viewer" package.

Domain installation still in progress. You can reconnect to the console
to complete the installation process.

Это нормально, так и должно быть.

Затем смотрим свойства виртуалки в формате XML:

sudo virsh dumpxml freebsd10

Тут приводится наиболее полная информация. В том числе есть, к примеру, и MAC-адрес, который понадобятся нам далее. Пока что находим информацию о VNC. В моем случае:

С помощью любимого клиента (я лично пользуюсь Rammina) заходим по VNC , при необходимости используя SSH port forwarding. Попадаем прямо в инстялятор FreeBSD. Дальше все как обычно — Next, Next, Next, получаем установленную систему.

Основные команды

Давайте теперь рассмотрим основные команды для работы с KVM.

Получение списка всех виртуалок:

sudo virsh list --all

Получение информации о конкретной виртуалке:

sudo virsh dominfo freebsd10

Запустить виртуалку:

sudo virsh start freebsd10

Остановить виртуалку:

sudo virsh shutdown freebsd10

Жестко прибить виртуалку (несмотря на название, это не удаление):

sudo virsh destroy freebsd10

Ребутнуть виртуалку:

sudo virsh reboot freebsd10

Склонировать виртуалку:

sudo virt-clone -o freebsd10 -n freebsd10-clone \
--file / var/ lib/ libvirt/ images/ freebsd10-clone.img

Включить/выключить автозапуск:

sudo virsh autostart freebsd10
sudo virsh autostart --disable freebsd10

Запуск virsh в диалоговом режиме (все команды в диалоговом режиме — как описано выше):

sudo virsh

Редактирование свойств виртуалки в XML, в том числе здесь можно изменить ограничение на количество памяти и тд:

sudo virsh edit freebsd10

Важно! Комментарии из отредактированного XML, к сожалению, удаляются.

Когда виртуалка остановлена, диск тоже можно ресайзить:

sudo qemu-img resize / var/ lib/ libvirt/ images/ freebsd10.img -2G
sudo qemu-img info / var/ lib/ libvirt/ images/ freebsd10.img

Важно! Вашей гостевой ОС, скорее всего, не понравится, что диск внезапно стал больше или меньше. В лучшем случае, она загрузится в аварийном режиме с предложением переразбить диск. Скорее всего, вы не должны хотеть так делать. Куда проще может оказаться завести новую виртуалку и смигрировать на нее все данные.

Резервное копирование и восстановление производятся довольно просто. Достаточно сохранить куда-то вывод dumpxml, а также образ диска, а потом восстановить их. На YouTube удалось найти видео с демонстрацией этого процесса, все и вправду несложно.

Настройки сети

Интересный вопрос — как определить, какой IP-адрес получила виртуалка после загрузки? В KVM это делается хитро. Я в итоге написал такой скрипт на Python :

#!/usr/bin/env python3

# virt-ip.py script
# (c) 2016 Aleksander Alekseev
# http://сайт/

import sys
import re
import os
import subprocess
from xml .etree import ElementTree

def eprint(str ) :
print (str , file = sys .stderr )

if len (sys .argv ) < 2 :
eprint("USAGE: " + sys .argv [ 0 ] + " " )
eprint("Example: " + sys .argv [ 0 ] + " freebsd10" )
sys .exit (1 )

if os .geteuid () != 0 :
eprint("ERROR: you shold be root" )
eprint("Hint: run `sudo " + sys .argv [ 0 ] + " ...`" ) ;
sys .exit (1 )

if subprocess .call ("which arping 2>&1 >/dev/null" , shell = True ) != 0 :
eprint("ERROR: arping not found" )
eprint("Hint: run `sudo apt-get install arping`" )
sys .exit (1 )

Domain = sys .argv [ 1 ]

if not re .match ("^*$" , domain) :
eprint("ERROR: invalid characters in domain name" )
sys .exit (1 )

Domout = subprocess .check_output ("virsh dumpxml " +domain+" || true" ,
shell = True )
domout = domout.decode ("utf-8" ) .strip ()

if domout == "" :
# error message already printed by dumpxml
sys .exit (1 )

Doc = ElementTree.fromstring (domout)

# 1. list all network interfaces
# 2. run `arping` on every interface in parallel
# 3. grep replies
cmd = "(ifconfig | cut -d " " -f 1 | grep -E "." | " + \
"xargs -P0 -I IFACE arping -i IFACE -c 1 {} 2>&1 | " + \
"grep "bytes from") || true"

for child in doc.iter () :
if child.tag == "mac" :
macaddr = child.attrib [ "address" ]
macout = subprocess .check_output (cmd .format (macaddr) ,
shell = True )
print (macout.decode ("utf-8" ) )

Скрипт работает как с default сетью, так и с bridged сетью, настройку которой мы рассмотрим далее. Однако на практике куда удобнее настроить KVM так, чтобы он всегда назначал гостевым системам одни и те же IP-адреса. Для этого правим настройки сети:

sudo virsh net-edit default

… примерно таким образом:

>



>

После внесения этих правок


>

… и заменяем на что-то вроде:




>

Перезагружаем гостевую систему и проверяем, что она получила IP по DHCP от роутера. Если же вы хотите, чтобы гостевая система имела статический IP-адрес, это настраивается как обычно внутри самой гостевой системы.

Программа virt-manager

Вас также может заинтересовать программа virt-manager:

sudo apt-get install virt-manager
sudo usermod -a -G libvirtd USERNAME

Так выглядит ее главное окно:

Как видите, virt-manager представляет собой не только GUI для виртуалок, запущенных локально. С его помощью можно управлять виртуальными машинами, работающими и на других хостах, а также смотреть на красивые графички в реальном времени. Я лично нахожу особенно удобным в virt-manager то, что не нужно искать по конфигам, на каком порту крутится VNC конкретной гостевой системы. Просто находишь виртуалку в списке, делаешь двойной клик, и получаешь доступ к монитору.

Еще при помощи virt-manager очень удобно делать вещи, которые иначе потребовали бы трудоемкого редактирования XML-файлов и в некоторых случаях выполнения дополнительных команд. Например, переименование виртуальных машин, настройку CPU affinity и подобные вещи. Кстати, использование CPU affinity существенно снижает эффект шумных соседей и влияние виртуальных машин на хост-систему. По возможности используйте его всегда.

Если вы решите использовать KVM в качестве замены VirtualBox, примите во внимание, что хардверную виртуализацию они между собой поделить не смогут. Чтобы KVM заработал у вас на десктопе, вам не только придется остановить все виртуалки в VirtualBox и Vagrant , но и перезагрузить систему. Я лично нахожу KVM намного удобнее VirtualBox, как минимум, потому что он не требует выполнять команду sudo / sbin/ rcvboxdrv setup после каждого обновления ядра, адекватно работает c Unity , и вообще позволяет спрятать все окошки.

В Ubuntu рекомендуется использовать гипервизор (менеджер виртуальных машин) KVM и библиотеку libvirt в качестве инструментария управления им. Libvirt включает в себя набор программного API и пользовательских приложений управления виртуальными машинами (ВМ) virt-manager (графический интерфейс, GUI) или virsh (командная строка, CLI). В качестве альтернативных менеджеров можно использовать convirt (GUI) или convirt2 (WEB интерфейс).

В настоящее время в Ubuntu офицально поддерживается только гипервизор KVM. Этот гипервизор является частью кода ядра операционной системы Linux. В отличие от Xen, KVM не поддерживает паравиртуализацию, то есть, для того, чтобы его использовать, ваш CPU должен подерживать технологии VT. Вы можете проверить, поддерживает ли ваш процессор эту технологию, выполнив команду в терминале:

Если в результате получили сообщение:

INFO: /dev/kvm exists KVM acceleration can be used

значит KVM будет работать без проблем.

Если же на выходе получили сообщение:

Your CPU does not support KVM extensions KVM acceleration can NOT be used

то вы всё равно сможете использовать виртуальную машину, но работать она будет намного медленнее.

    Устанавливать в качестве гостевых 64-битные системы

    Выделять гостевым системам более 2 Гбайт ОЗУ

Установка

Sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils

Это установка на сервер без X-ов, т. е. не включает в себя графический интерфейс. Установить его можно командой

Sudo apt-get install virt-manager

После этого в меню появится пункт «Менеджер виртуальных машин» и, с большой долей вероятности, всё заработает. Если какие-то проблемы всё же возникнут, то нужно будет почитать инструкцию в англоязычной вики.

Создание гостевой системы

Процедура создания гостевой системы с помощью графического интерфейса достаточно проста.

А вот текстовый режим можно и описать.

qcow2

При создании системы с помощью графического интерфейса в качестве жёсткого диска предлагается либо выбрать уже существующий файл-образ или блочное устройсво, либо создать новый файл с сырыми (RAW) данными. Однако, это далеко не единственный доступный формат файлов. Из всех перечисленных в man qemu-img типов дисков наиболее гибким и современным является qcow2 . Он поддерживает снапшоты, шифрование и сжатие. Его необходимо создавать до того, как создать новую гостевую систему.

Qemu-img create -o preallocation=metadata -f qcow2 qcow2.img 20G

Согласно тому же man qemu-img , предварительное размещение метаданных (-o preallocation=metadata) делает диск изначально немного больше, но обеспечивает лучшую производительность в те моменты, когда образу нужно расти. На самом деле, в данном случае эта опция позволяет избежать неприятного бага. Создаваемый образ изначально занимает меньше мегабайта места и по мере необходимости растёт до указанного размера. Гостевая система сразу должна видеть этот окончательный указанный размер, тем не менее, на этапе установки она может увидеть реальный размер файла. Естественно, устанавливаться на жёсткий диск размером 200 кбайт она откажется. Баг не специфичен для Ubuntu, проявляется ещё в RHEL, как минимум.

Кроме типа образа впоследствии можно будет выбрать способ его подключения - IDE, SCSI или Virtio Disk. От этого выбора будет зависеть производительность дисковой подсистемы. Однозначно правильного ответа нет, выбирать нужно исходя из задачи, которая будет возложена на гостевую систему. Если гостевая система создаётся «на посмотреть», то сойдёт любой способ. Вообще, обычно именно I/O является узким местом виртуальной машины, поэтому при создании высоконагруженной системы к этому вопросу нужно отнестись максимально ответственно.

А вы задавались вопросом как устроено облако? Самый быстрорастущий ИТ-тренд, в развитие которого инвестируются миллиарды долларов ежегодно, перед тем как стать готовым продуктом или сервисом, который можно использовать, проходит свой технологический процесс производства. Детализировать этот процесс можно до бесконечности, поэтому мы рассмотрим только завершающий этап – виртуализацию, а именно программные продукты, или аппаратные составляющие, с помощью которых и выполняется виртуализация.

Первый материал, из серии «технологии VPS/VDS», посвящен программному продукту KVM (Kernel-based Virtual Machine). Начинаем с него, так как именно этот гипервизор мы используем в облаке Tucha и, конечно же, наше отношение к нему особенное.

Гипервизор KVM: особенности и принцип работы

Технологии виртуализации все чаще стали применяться в современных системах. Виртуальные машины – самый простой способ иметь несколько разных операционных систем с сопутствующей программной средой для выполнения различных задач – тестирования или разработки ПО, организации хостинга с использованием VPS, распространения цифровой продукции, обучения и т.д. Для упрощения управления виртуальными машинами используются гипервизоры - программные решения, которые позволяют быстро запускать, останавливать, развертывать новые виртуальные машины в пределах одного хоста. Одним из наиболее популярных гипервизоров для UNIX-подобных систем является KVM.

Гипервизор KVM: архитектура

KVM (аббревиатура от Kernel-based Virtual Machine) – это программное обеспечение, которое дает возможность реализовать виртуализацию на базе компьютеров под управлением ОС Linux и подобных. С некоторых пор KVM является частью Linux-ядра, потому развивается вместе с ним. Работает только в системах с аппаратной поддержкой виртуализации – на процессорах Intel и AMD.

Для организации работы KVM использует прямой доступ к ядру с помощью процессор-специфичного модуля (kvm-intel или kvm-amd). Кроме того, в состав комплекса входит главное ядро – kvm.ko и элементы UI, в том числе и популярный QEMU. Гипервизор позволяет работать напрямую с файлами виртуальных машин и образами дисков из других программ. Для каждой машины создается изолированное пространство со своей памятью, диском, сетевым доступом, видеокартой и другими устройствами.

Преимущества и недостатки KVM

Как и любое программное решение, KVM имеет как плюсы, так и минусы, исходя из которых, хостеры и конечные потребители принимают решение об использовании этого ПО.

Основные преимущества гипервизора таковы:

  • независимо распределяемые ресурсы . Каждая работающая под управлением KVM виртуальная машина получает свой объем оперативной и постоянной памяти и не может «залезть» в другие области, что повышает стабильность работы;
  • широкая поддержка гостевых ОС . Кроме полной поддержки UNIX-дистрибутивов, в том числе *BSD, Solaris, Linux, есть возможность устанавливать Windows и даже MacOS;
  • взаимодействие с ядром позволяет напрямую обращаться к оборудованию рабочей станции, что делает работу более быстрой ;
  • поддержка грандов софтверного рынка (RedHat Linux, HP, Intel, IBM) позволяет проекту быстро развиваться, охватывая все большее количество оборудования и OS, в том числе новейших;
  • простое администрирование – возможность удаленного управления через VNC и большое количество стороннего ПО и надстроек.

Без недостатков также не обошлось:

  • относительная молодость гипервизора (например, по сравнению с Xen) и соответственно взрывной рост приводят к различным проблемам, особенно при добавлении поддержки нового оборудования и программного окружения;
  • сложность настроек, особенно для неискушенного пользователя. Правда, большинство опций можно не менять – они настроены оптимально «из коробки».

Функциональные возможности и свойства гипервизора

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

Безопасность

В KVM каждая машина представляет собой Linux-процесс, потому на нее автоматически распространяются стандартные политики безопасности, а также изоляция от других процессов. Специальные надстройки (такие как SELinux) добавляют и другие элементы безопасности – контроль доступа, шифрование и т.д.

Поскольку KVM является частью ядра Linux, гипервизор наследует мощные инструменты управления памятью. Страницы памяти каждого процесса, т.е. виртуальных машин, могут быстро копироваться и меняться без ущерба скорости работы. С поддержкой многопроцессорных систем KVM получила возможность управлять большими объемами памяти. Поддерживается также обобщение памяти – объединение одинаковых страниц и выдача копии машине по запросу, а также другие методы оптимизации.

Хранение данных

Для хранения образов машин и их данных KVM может использовать любые носители, которые поддерживаются родительной операционной системой – жесткие диски, NAS, съемные накопители, в том числе с многопоточным вводом-выводом для ускорения работы. Кроме того, гипервизор может работать с распределёнными файловыми системами – например, GFS2. Диски для KVM имеют собственный уникальный формат, который поддерживает динамическое создание снимков разного уровня, шифрование и сжатие.

Важная особенность KVM – поддержка динамической миграции: перемещение виртуальных машин между различными хостами без их остановки. Для пользователей такая миграция совершенно незаметна – машина остается рабочей, производительность не страдает, сетевые соединения активны. Конечно, возможна и миграция через сохранение текущего состояния виртуалки в снимок и развертывание на другом хосте.

Производительность и масштабируемость

Масштабируемость и производительности комплекса благодаря плотной интеграции с Linux, полностью унаследованы от этой ОС. Таким образом, гипервизор поддерживает до 16 процессоров (виртуальных или физических) и до 256 ГБ ОЗУ в каждой виртуальной машине. Это позволяет использовать гипервизор даже в наиболее высоконагруженных системах.

Стабильность

Программный комплекс постоянно совершенствуется - если изначально он поддерживал только платформу Linux x86, то сегодня количество различных платформ исчисляется десятками, включая все популярные серверные ОС. Кроме того, вы без труда сможете развернуть виртуальную машину с модифицированной сборкой операционной системы, если она совместима с родительской платформой. А благодаря сотрудничеству с ведущими производителями ПО гипервизор KVM можно назвать самым стабильным и надежным на рынке.

Оригинал: Welcome to KVM virtualization - Thorough introduction
Автор: Igor Ljubuncic
Дата публикации: 4 мая 2011 года
Перевод: А. Кривошей
Дата перевода: июль 2011 г.

Если вы читали мои статьи о виртуализации, то знаете, что раньше я пользовался в основном VMware и VirtualBox, но теперь настало время попробовать что-нибудь новенькое. Сегодня я хотел бы представить новый цикл заметок о KVM. Дальше, возможно, я переключюсь на Xen или какую-то другую систему, но сейчас герой нашего топика - KVM .
В данном руководстве мы поговорим о технологии KVM (Kernel-based Virtual Machine), которую создала RedHat, и которая имеет открытый исходный код, являяясь бесплатной альтернативой своих коммерческих аналогов. Мы узнаем, как скачать, установить и настроить KVM, какие инструменты она имеет для управления виртуальными машинами, как работать с KVM в командной строке, писать скрипты и многое другое. Кроме того, мы коснемся создания продвинутых (в том числе сетевых) конфигураций, а также других интересных вещей. Теперь начнем.

Глоссарий KVM

Сначала немного поговорим о том, как работает KVM. Ничего заумного, просто небольшое введение, чтобы вы знали базовую терминологию.
KVM использует технологию аппаратной виртуализации, поддерживаемую современными процессорами от Intel и AMD и известную под названиями Intel-VT и AMD-V. Используя загруженный в память модуль ядра, KVM, с помощью драйвера пользовательского режима (который представляет собой модифицированный драйвер от QEMU), эмулирует слой аппаратного обеспечения, поверх которого могут создаваться и запускаться виртуальные машины. KVM может функционировать и без аппаратной виртуализации (если она не поддерживается процессором), но в этом случае она работает в режиме чистой эмуляции с использованием QUEMU и производительность виртуальных машин очень сильно снижается.
Для управления KVM можно использовать графическую утилиту, похожую на продукты от VMware и VirtualBox, а также командную строку.
Самым популярным графическим интерфейсом является Virtual Machine Manager (VMM), созданный в RedHat. Он также известен по имени своего пакета как virt-manager и содержит несколько утилит, включая virt-install, virt-clone, virt-image и virt-viewer, служащие для создания, клонирования, установки и просмотра виртуалльных машин. VMM поддерживает также виртуальные машины Xen.
Базовый интерфейс командной строки KVM обеспечивается утилитой virsh . В определенных случаях вы можете использовать утилиты поддержки, такие как virt-install, для создания своих виртуальных машин. В Ubuntu имеется специальная утилита ubuntu-vm-builder , разработанная в Canonical, с помощью которой можно создавать билды Ubuntu.
Если вы хотите узнать больше о KVM, дополнительная информацию можно найти по следующим адресам:

Преимущества и недостатки KVM

Нужен ли вам KVM? Это зависит от того, для чего он вам нужен.
Если вы еще не пользовались виртуальными машинами или запускали их несколько раз просто для интереса, то освоение KVM может оказаться трудным. Эта программа управляется преимущественно из командной строки и не так дружелюбна к пользователю, как VMware или VirtualBox. Можно сказать, что в плане графического интерфейса KVM отстает от своих конкурентов на несколько лет, хотя на самом деле по своим возможностям им по крайней мере не уступает. Возможности KVM наиболее востребованы при ее применении в коммерческих целях в бизнес-окружении.
Далее, если ваш процессор не поддерживает аппаратную виртуализацию, то KVM будет работать в очень медленном и неэффективном режиме программной эмуляции. Кроме того, известно, что KVM конфликтует с VirtualBox, однако этому случаю будет посвящена отдельная заметка.
На основании вышесказанного можно сделать вывод, что KVM больше подходит людям, которые занимаются виртуализацией в профессиональных целях. Вряд ли она станет вашей любимой домашней игрушкой, однако если вы решите затратить определенные усилия для ее изучения, то полученные при этом знания позволят быть с технологиями виртуализации на "ты". В отличие от VMware и VirtualBox, изначально предполагающих, что пользователь будет работать с программой, используя графический интерфейс, KVM ориентирована на использование командной строки и написание скриптов.
Подводя итого, можно сказать, что преимущества KVM заключаются в использовании новейших технологий виртуализации, отсутствии каких-либо лицерзионных ограничений в использовании, мощном интерфейсе командной строки. Если ваш процессор не поддерживает аппаратной виртуализации, вы не хотите писать скрипты и предпочитаете более простые в администрировании системы, такие как VMware Server, ESXi или VirtualBox, то KVM не для вас.

Тестовая платформа

KVM можно использовать на любом дистрибутиве Linux. Однако основным разработчиком и спонсором KVM является RedHat. Например, RHEL поставляется сразу с KVM, поэтому вы можете найти ее в любом дистрибутиве на базе RedHat, например CentOS, Scientific Linux, или Fedora.
Так как дома я пользуюсь преимущественно Ubuntu, то и тестировать KVM буду на этой системе, установленный на мой сравнительно новый ноутбук HP, оснащенный процессором i5 с поддержкой аппаратной виртуализации.
В данной статье я расскажу, как установить KVM на 64-битную Ubuntu Lucid (LTS).

Подготовка к установке

Сначала необходимо проверить, поддерживает ли ваш процессор аппаратную виртуализацию. Это делается с помощью следующей команды:

$ egrep -c "(vmx|svm)" /proc/cpuinfo

Если вывод представляет собой ненулевое число, все в порядке. Кроме того, необходимо проверить, что технология виртуализации активирована в BIOS.
Естественно, после ее активирования необходимо перезагрузить машину, чтобы изменения вступили в силу. Для проверки выполните команду kvm-ok:

Скачивание и установка KVM

Для работы KVM необходимо установить следующие пакеты (для дистрибутивов с apt):

$ apt-get install qemu-kvm libvirt-bin

$ apt-get install bridge-utils virt-manager python-virtinst

P.S. В различных дистрибутивах пакеты могут называться по разному. Например, virt-install может называться python-virt-install или python-virtinst. Зависимости для virt-clone, virt-image и virt-viewer должны установиться автоматически. В отличие от того, что пишется в большинстве руководств, утилиты bridge устанавливать необязательно. Они нужны только в том случае, если вы собираетесь создавать сетевой мост между виртуальными и физическими сетевыми картами. В большинстве руководств также указывается, что большинство беспроводных сетевых интерфейсов не работают с мостами. Может быть это верно для какого-либо частного случая, однако у меня мост прекрасно работает с беспроводными адаптерами, поэтому будем надеяться, что и вас все заработает.
Я настоятельно рекомендую VMM (virt-manager). Более того, лучше установить и все утилиты поддержки, включая virt-viewer, virt-install, virt-image и virt-clone.
И последнее. Вы можете предпочесть ubuntu-vm-builder:

$ apt-get install ubuntu-vm-builder

Кроме этого, скорее всего будет установлено большое количество зависимостей, поэтому загрузка может занять значительное время.
P.S. На RedHat используйте yum install, на SUSE - zypper install.

Конфликт с VirtualBox

Я снова выскажу мнение, отличное от изложенного в большинстве рукводств: KVM и VirtualBox можно устанавливать вместе на одну систему. Но запустить их одновременно не получится. Другими словами, модуль ядра одной из виртуальных машин должен быть выгружен из оперативной памяти. Но это не причина отказываться от установки. Просто попробуйте, будут ли они работать у вас. Если нет, эту неполадку можно будет исправить. Позже я выложу отдельное руководство, посвященное устранению этой проблемы. У меня сейчас установлены и работают обе виртуальные машины.

Использование KVM

Ну а теперь самое интересное. Мы начнем знакомство с KVM с ее графического интерфейса, который мало отличается от аналогов. таких как консоль VMware и особенно VirtualBox.

Virtual Machine Manager (VMM)

При первом запуске программы вы увидите две категории, обе не подключенные. Это ссылки на стандартные модули KVM, пока не работающие. Для их использования щелкните правой кнопкой мыши и выберите "connect".

Для их использования щелкните правой кнопкой мыши и выберите "connect". Чтобы добавить новое соединение, выберите в меню File > Add Connection. При этом откроется окно, в котором можно будет задать тип гипервизора и тип соединения. VMM может использовать как локальные, так и удаленные соединения, включая QUEMU/KVM и Xen. Кроме того, поддерживаются все методы аутентификации.

Можно также поставить галочку autoconnect. При следующем запуске программы эти соединения будут готовы к использованию. Это похоже на стартовый интерфейс VMware Server. Просто для примера:

Kernel vs Usermode

Вы можете спросить, в чем различие между режимами normal/default и Usermode? При использовании Usermode виртуальную машину можно запускать без административных привилегий, но ее сетевая функциональность при этом будет ограничена.

Продолжаем изучение VMM

Кратко рассмотрим остальные функции программы.
Сетевую функциональность можно просмотреть или изменить, открыв пункт Host Details. Подробно этот вопрос я планирую рассмотреть в отдельном руководстве. Там же мы установим утилиты для работы сетевого моста.

Аналогично можно изменить параметры дисковой подсистемы:

Изменение предварительных установок

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

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

Иконка в системном трее выглядит так:

Теперь мы готовы создать новую виртуальную машину.

Создание виртуальной машины

Создать виртуальную машину можно и из командной строки, но для начала воспользуемся VMM. Первый шаг должен быть интуитивно понятен. Введите название и задайте расположение инсталляционного диска. Это может быть как локальное устройство в виде диска CD/DVD или образа ISO, так и HTTP или FTP сервер, NFS или PXE.

Мы используем локальный носитель. Теперь необходимо задать, будет ли это физическое устройство или образ. В нашем случае используется ISO. Далее нужно выбрать тип и версию ISO. Здесь не требуется такая уж высокая точность, но правильный выбор позволит повысить производительность виртуальной машины.

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

Далее мы еще уделим внимание дисковой подсистеме. Однако обратите внимание, что при работе в режиме Usermode у вас не будет прав записи в /var, где по умолчанию хранятся образы виртуальных дисков. Поэтому необходимо будет задать другое расположение для образов. Более подробно этот вопрос будет освещен в отдельной статье.
Этап 5 - это вывод сводных данных с возможностью настройки некоторых продвинутых опций. Здесь вы можете изменить тип сети, задать фиксированные MAC-адреса, выбрать тип виртуализации и целевую архитектуру. Если вы работаете в режиме Usermode, возможности настройки сети будут ограничены, например невозможно будет создать мосты между сетевыми интерфейсами. И последнее: если ваш процессор не поддерживает аппаратной виртуализации, поле Virt Type будет иметь значение QUEMU и сменить его на KVM будет невозможно. Ниже мы рассмотрим недостатки работы в режиме эмуляции. А теперь можете посмотреть, как выглядят типовые настройки для виртуальной машины Ubuntu:

Наша машина готова к использованию.

Настройка виртуальной машины

Консоль VM также имеет несколько интересных опций. Вы можете посылать сигналы гостевой системе, переключаться между виртуальными консолями, перезагружать или выключать гостевую систему, клонировать, перемещать, сохранять состояние виртуальной машины, делать скриншоты и так далее. Снова все, как у конкурентов.

Ниже представлена пара скриншотов, показывающая опции клонирования и перемещения виртуальной машины. В дальнейшем мы подробно рассмотрим данный вопрос.

Запуск виртуальной машины

А теперь самое интересное. Ниже несколько красивых скриншотов...
Начинаем с загрузочного меню 32-битной версии Ubuntu 10.10 Maverick:

Рабочий стол Puppy Linux как всегда великолепен:

Теперь Ubuntu, запущенная под NAT. Обратите внимание на низкую загрузку процессора. Позже мы поговорим об этом, когда будем обсуждать режим эмуляции.

Размер окна консоли можно подгонять под разрешение рабочего стола гостевой системы. На следущем скриншоте Puppy и Ubuntu бок о бок:

Обратите внимание на небольшую загрузку системы. С этим режимом эмуляции можно запускать одновременно несколько виртуальных машин.

При необходимости можно удалить виртуальную машину вместе со всеми ее файлами:

Командная строка

Ну а теперь познакомимся поближе с нелюбимой командной строкой. Например, выведем список всех доступных виртуальных машин с помощью virsh.

$ virsh "list --all"

Ниже приведена последовательность команд для создания и запуска виртуальной машины с помощью virt-install.

Полностью команда выглядит так:

$ virt-install --connect qemu://system -n puppy -r 512 -f puppy.img -c lupu-520.iso --vnc --noautoconsole --os-type linux --accelerate --network=network:default

--connect qemu:///system задает тип гипервизора. Опция system используется при запуске машины на голом ядре от имени суперпользователя. При запуске от имени обычного пользователя используется опция session.
-n puppy - это уникальное имя виртуальной машины. Его можно изменить с помощью virsh.
-r 512 задает размер RAM.
-f задает файл образа диска. В моем случае это puppy.img, который я создал с помощью команды dd.
-c задает the CD-ROM, который может быть как физическим устройством, так и ISO-образом.
--vnc создает гостевую консоль и экспортирует ее как сервер VNC. Опция --noautoconnect запрещает автоматическое открытие консоли при запуске виртуальной машины.
--os-type задает тип гостевой операционной системы.
--accelerate разрешает KVM использовать функции оптимизации, повышающие производительность гостевой системы.
--network определяет тип сети. В нашем случае используется соединение, заданное по умолчанию.

Имеется множество других функций, задающих такие параметры, как количество ядер процессора, фиксированные MAC-адреса и т.д. Все они подробно описаны в man-странице. Несмотря на кажущуюся сложность, управление с помощью командной строки осваивается достаточно быстро.

Режим чистой эмуляции

Я уже говорил, что он ужасно неэффективен. Теперь подтвердим это на практике. Например, на представленном ниже скриншоте можно видеть, что система при работе потребляет все доступные ей ресурсы процессора, которые в данном случае при наличии одного ядра составляют 25% ресурсов физического процессора. Это значит, что четыре виртуальные машины будут полностью загружать четырехъядерный хост.

Кроме того, производительность гостевой системы ниже всякой критики. Если при включенной аппаратной виртуализации загрузка гостевой Ubuntu занимала у меня около 1 минуты, то после ее отключения она составила 20 минут. Необходимо отметить, что без использования аппаратной виртуализации производительность QUEMU/KVM намного ниже, чем у конкурентов.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: