Это страшное слово – «виртуализация». Мое решение на базе KVM. Что такое виртуализация KVM

Сегодня сложно представить мир без компьютеризированных устройств. Лет этак 20 назад почти все бытовые приборы были электро-механические, об использовании компьютерных схем повсеместно не было даже и речи. Самые первые компьютеры занимали значительные объемы пространства, и могли относительно не много. Компьютерно-вычислительные комплексы за последнее время прошли достаточно большой путь развития. Хотя, принципиально компьютеры ничем не изменились, но вычислительные мощности стремительно возросли. Наличие компьютера в простой семье теперь не является чем-то особенным.

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

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

Собственно видов виртуализации существует несколько:

  • Программная виртуализация;
  • Аппаратная виртуализация;
  • Виртуализация уровня операционной системы.

Виртуализация в свою очередь бывает полной и частичной .

Программная виртуализация – вид виртуализации, который задействует различные библиотеки ОС, транслируя вызовы виртуальной машины в вызовы ОС. (DOSBox, Virtualbox, VirtualPC)

Аппаратная виртуализация – такой вид, который предусматривает специализированную инструкцию аппаратной части, а конкретно инструкций процессора. Позволяет исполнять запросы в обход гостевой ОС, и исполнять прямо на аппаратном обеспечении. (виртуализация KVM,виртуализация XEN, Parallels, VMware, Virtualbox)

Виртуализация уровня операционной системы – виртуализация только части платформы, без полной виртуализации аппаратной части. Подразумевает работы нескольких экземпляров среды ОС. (Docker, LXC)

Данная статья будет рассматривать Аппаратную виртуализацию, а конкретно виртуализацию KVM.

Схема 1. – Взаимодействие компонентов виртуальной машины с аппаратной частью

Особенности виртуализации для ядра Linux

Для исполнения прямых аппаратных запросов в ОС должна иметься библиотека, которая направляла бы эти запросы аппаратной части напрямую. На платформах базы Linux долгое время никакой встроенной системы виртуализации (встроенного гипервизора), просто не существовало. Каждый производитель ПО для виртуализации, который поддерживало технологию аппаратной виртуализации, вынуждены были создавать собственные модули для ядра Linux (vboxdrv в Virtualbox, vmware-service в VMWare и пр.) Естественно, это не могло продолжаться вечно, и компания Qumranet, Inc, выкупленая затем Radhat создала ассоциацию Open Virtualization Alliance, которая была признана решить проблему отсутствия базового гипервизора для ядра Linux. Так и был создан гипервизор KVM или Kernel-based Virtual Machine.

Реализация

Гипервизор KVM представляет из себя загружаемый модуль ядра Linux, который предназначен для обеспечения виртуализации на платформе Linux x86. Сам модуль содержит компонент собственно виртуализации(kvm.ko), и процессорно-специфический загружаемый модуль kvm-amd.ko либо kvm-intel.ko.

Необходимым условием для использования KVM является поддержка инструкций виртуализации - Intel VT либо AMD , и ядро Linux версии 2.6.20 и выше. Существует также порт KVM под Free-BSD. Для вызова KVM традиционно используется QEMU, но также ведутся попытки добавить поддержку KVM в Virtualbox.

Сам по себе KVM не выполняет эмуляции. Вместо этого программа, работающая в пространстве пользователя, использует интерфейс /dev/kvm для настройки адресного пространства гостя виртуальной машины, через него же эмулирует устройства ввода-вывода и видеоадаптер.

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

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

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

Для наглядности рассматривается виртуализация KVM на базе библиотеку virt-manager.

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

Схема 2. – Взаимодействие компонентов libvirt

QEMU позволяет создать фрейм для вызова гипервизора на клиентской системе. Данная программа настраивается аргументами вызова командной строки, является достаточно легкой и простой.

Существуют кроме того несколько графических оболочек, таких как Gnome-Boxes .

Вывод

Виртуализация – неотъемлемая часть современных корпоративных систем, она позволяет сэкономить колоссальные денежные и энергетические ресурсы. Развитие технологий виртуализации является приоритетным направлением многих организаций. Развиваются такие технологии как как VGAPassthrough (технология "проброса" видеокарты хост-устройства в виртуальную машину) и PCIPassthrough ("проброс" PCI устройства).

Оригинал: 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 намного ниже, чем у конкурентов.

В 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 является узким местом виртуальной машины, поэтому при создании высоконагруженной системы к этому вопросу нужно отнестись максимально ответственно.

Заметка пригодится всем, кому интересно использовать виртуализацию в своей работе. Мое решение вполне может претендовать на промышленное применение и пригодится тем, кто захочет сократить расходы на аппаратную часть при необходимости иметь в наличии разветвленную сетевую инфраструктуру. На подобном варианте базируется некоторые решения от IBM, к примеру. Но эти решения далеко не бюджетные и востребованы лишь в исключительных случаях.
Итак, однажды мне понадобилось в домашних условиях воспроизвести разветвленную сетевую инфраструктуру, состоящую из различных программных платформ. Путь начинался от VMWare Workstation и завершился KVM… Почему именно KVM и как все было, читайте ниже.

1. Немного истории или с чего все началось.
Работая в банке, я вживую столкнулся с виртуализацией. Это была операционная система AIX от IBM, работающая на майнфреймах. С самого начала меня поразила мощь и гибкость подобного подхода. И когда мне понадобилось воспроизвести в тестовых целях дома разветвленную программную инфраструктуру, то сразу базировал все это на принципах виртуализации. Это позволило избежать как значительных затрат на аппаратную часть, так и уместить все весьма компактно в плане пространства.
Для читателя следует учесть, что на самом деле инструментов виртуализации великое множество. Каждый из них имеет свои тонкости и нюансы. Я же ставлю цель рассказать об одном варианте, с которыми работаю лично, описывая по возможности недостатки и особенности остальных.
2. Мой выбор называется KVM (или Kernel-based Virtual Machine).
Подробнее об этом варианте можно почитать .
Но лучше все по порядку излагать. Начну с условий отбора и какие из известных мне вариантов этим условиям неудовлетворяют:
— основная система должна быть бюджетной и мощной.

В аппаратном плане я выбрал вариант AMD Phenom X4 9550 / Asus M3A78 / 2x2Gb DDR-II / 1x160Gb IDE + 2x1Tb SATA-II. Видео здесь совершенно не приципиально, кроме того, что в случае встроенной придется учитывать, что она под себя забирает часть оперативной памяти, соответственно для виртуальных машин ее останется меньше. Скажу сразу — выбор материнки с встроенным RAID-контроллером был не совсем корректным. Как выяснилось, RAID этот работает только в программном режиме, т.е. нужны драйвера для Windows систем, ну а в Linux такого же эффекта можно было достичь гораздо проще, используя стандартные средства.
Использование программной платформы для основной системы было однозначно в пользу GNU/Linux, т.к. позволяло получить среду виртуализации без лишних затрат на лицензирование, а также более облегченную в плане нагрузки (вот никогда я не пойму, почему в Windows Server без графики ничего нельзя поставить и сделать…. бессмысленная нагрузка, ИМХО). Изначально планировалось использовать вариант Ubuntu Server Hardy LTS, но почти сразу была произведена миграция на Debian Lenny (он к тому времени как раз вышел).Ни в коем случае не принижаю достоинства Ubuntu, но субьективно Debian стабильнее и быстрее работает.

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

От выбора разбегаются глаза, но после изучения отзывов в интернете и попыток использования сложилось субьективное мнение.
Продукты VMWare не подходят. Workstation платная, ESXi не удалось поставить на мою систему из-за неподдерживаемого чипсета (он у меня оказался более современным). Неплохим выбором был бы VMWare Server, но судя по отзывав она тяжеловата и периодически падает, сам я не стал пробовать после неудачи с ESXi. Не подошли они еще по одной причине — компания все таки продает свои продукты и только часть из них доступна в свободном доступе.
VirtualBox оказался весьма удачным вариантом. Существует в двух вариантах — OSE и Freeware. В открытом доступе исходников Freeware-версии нет, зато компенсируется это функциональностью. Из известных мне различий — это отсутствие в OSE версии поддержки USB, ограничения при работе с сетью, неподдерживается графическая акселерация (кстати, дающая весьма приличный прирост скорости работы виртуальной машины). VirtualBox идеально подходит для простейшей реализации, т.к. позволяет быстро получить работоспособную виртуальную машину без лишних телодвижений и внимательного изучения руководства. Приятной особенностью оказалась поддержка работы из консоли, что позволяет не использовать графических надстроек и соответственно снимается дополнительная нагрузка на хост-машину. Для начинающих «домашних виртуализаторов» я бы посоветовал именно такой вариант. Лично я до сих пор его использую на личном ноутбуке для быстрого поднимания тестовой среды, а также для работы в Windows (там уже давно и стабильно обосновалась Ubuntu в качестве основной системы). По субьективным ощущениям работает VirtualBox гораздо шустрее VMWare Workstation, занимает меньше места как на диске, так и в памяти. Для каждой машины выделяется отдельное окно, а также при установленных драйвера в гостевой системе (есть «из коробки») есть возможность интегрировать в рабочий стол хоста, что очень удобно и позволяет разнести задачи на разные виртуальные столы.
QEMU — очень мощная штука. Но когда вспомнил про нее, уже обратил внимание на виртуализацию на базе ядра и информацию про Xen и KVM, потому близко знакомится с чистым QEMU не стал.
Xen — идеальная система для виртуализации. Но имеет весьма существенный недостаток — гостевая система должна быть заранее подготовленна.
KVM, базируется на QEMU, по скорости почти не уступает Xen, зато обладает более гибкой функциональностью, всей мощью настроек QEMU (хотя основная часть необходимых мне была и в VirtualBOX). Оба варианта, Xen и KVM реализованы во всех современных дистрибутивах и для использования не надо прилагать серьезных усилий. Но есть между ними принципиальное отличие, о котором пойдет речь дальше.

— необходимо иметь возможность воспроизвести на виртуальных машинах различные программные платформы.

Несмотря на доступность в этом плане продуктов VMWare и VirtualBOX, от их использования я отказался еще ранее, так что рассматривать не буду… А вот применительно к Xen и KVM опишу чуток подробнее, т.к. сам искал информацию весьма долго.
Xen не позволяет запускать системы отличные от хостовой!!!, а точнее не подготовленные заранее для работы в виртуальной среде. И к сожалению (а может к счастью), подобной обработке не поддаются дистрибутивы Windows. Что меня не устраивало, потому в итоге выбор пал на варианте использования KVM, для которого заранее подготавливать гостевую систему не надо.

Итак причины выбора KVM кратко:

1. Реализация доступна из коробки в любом большом дистрибутиве;
2. Реализовано на базе ядра Linux, соответственно обладает большой скоростью;
3. Используется такими гигантами, как RedHat и Ubuntu, что говорит о высокой стабильности и гибкости;
4. Не требуется дополнительных махинаций с гостевой системой для установки в виртуальную машину.

3. Как я сделал это на Debian.
Дальше пойдет больше техническое описание, описывающее по шагам, как я сделал свой сервер, свободно тянущий с десяток виртуальных серверов.
Несмотря на то, что мой любимый дистрибутив Ubuntu, в итоге под базовую системы был выбран Debian. В рамках статьи объяснять тонкостей не буду, что да как, но на десктопе я все также предпочитаю использовать Ubuntu. Большинство инструкций для Ubuntu и Debian актуальны для обоих вариантов, потому при настройке я использовал и это и то и другое .
Итак, начнем ставить сервер.
Берем дистрибутив Debian. Чтобы не качать лишнего потом и сразу получить свежую систему, я брал вариант netinstall, при помощи которого устанавливал только вариант «Стандартная система», большего нам и не надо. Кстати, я использую 64-битный выпуск, чтобы получить поддержку большего количества оперативной памяти (>3Гб) без обходных путей и выкрутасов (к примеру, 32-битное серверное ядро дистрибутива Ubuntu поддерживает больше, чем 3Гб, но только при наличии такой возможности в чипсете).
Я использую под системные разделы («/», «/home», swap) жесткий диск IDE, дабы не иметь проблем при работе системы при установке на RAID-массив (а они есть). При установке сразу создаю RAID-1 на основе двух жестких дисков SATA для достижения большей сохранности данных (основная информация будет храниться на нем). В дальнейшем для работы с софтовым RAID-массивом следует использовать утилиту mdadm .
Свежеустановленную систему я немного ретуширую. Для начала устанавливаю ssh, чтобы можно было сразу засунуть системник подальше и отключить от него уже ненужный монитор: sudo apt-get install ssh Многие советуют переключить порт с стандартного 22 на другой. Но это следует делать только в том случае, если вы уверены в своих действиях и ваш сервер подключен напрямую к интернету. Кстати, следует упомянуть, что если будет использоватся нестандартный порт, то потом возникнут сложности с удаленным управлением KVM-виртуализацией. Поэтому я оставил стандартный порт, но через аппаратный маршрутизатор сделал переброску на нестандартный, доступный снаружи.

Затем включаем синхронизацию времени через интернет (настоятельно советую, пригодится).
sudo apt-get install ntp ntpdate
Для контроля температуры чипсетов, процессора и жестких дисков:
sudo apt-get install lm-sensors hddtemp
Утилита hddtemp работает сразу, для настройки lm-sensors запускаем после установки: sudo sensors-detect отвечаем на все вопросы утвердительно.
Использовать очень просто:
— узнать температуру процессора, чипсета и других характеристик sudo sensors получаем что-то вроде:

it8712-isa-0290
Adapter: ISA adapter
VCore 1: +1.33 V (min = +3.54 V, max = +3.30 V) ALARM
VCore 2: +3.76 V (min = +1.39 V, max = +1.01 V) ALARM
+3.3V: +3.28 V (min = +4.00 V, max = +0.91 V) ALARM
+5V: +6.69 V (min = +3.04 V, max = +6.10 V) ALARM
+12V: +12.67 V (min = +15.23 V, max = +5.57 V) ALARM
-12V: -15.33 V (min = -0.85 V, max = -12.39 V) ALARM
-5V: +2.85 V (min = +3.06 V, max = +3.47 V) ALARM
Stdby: +5.99 V (min = +0.11 V, max = +6.37 V)
VBat: +3.31 V
fan1: 2922 RPM (min = 3260 RPM, div = 2)
fan2: 0 RPM (min = 5400 RPM, div = 2) ALARM
fan3: 0 RPM (min = 2732 RPM, div = 2) ALARM
M/B Temp: +44.0°C (low = -73.0°C, high = -49.0°C) sensor = transistor
CPU Temp: +32.0°C (low = -65.0°C, high = -9.0°C) sensor = transistor
Temp3: +128.0°C (low = +23.0°C, high = -66.0°C) sensor = disabled
cpu0_vid: +0.000 V

— узнать температуру 1 жесткого диска SATA — sudo hddtemp /dev/sda получаем что-то вроде:

/dev/sda: WDC WD1001FALS-00J7B0: 33°C

Для дальнейшей работы рекомендую обзавестись сторонним DHCP-сервером и на нашем сервере виртуализации настроить bridge-интерфейс.
Установим нужные утилиты: sudo apt-get install bridge-utils
Я использую в качестве DHCP-сервера свой роутер, а bridge-интерфейс создавал по инструкции . По той же инструкции рассказано, как сделать, чтобы виртуальная машина в KVM создавалась по умолчанию с использованием этого способа подключения. Для ускорения перезагрузки (совершенно не критичная ситуация, если сервер будет включен круглосуточно) советую заранее указать статический адрес на интерфейс даже при условии доступности DHCP.

И самое вкусное, устанавливаем KVM модули и полезные утилиты. Сразу добавим текущего пользователя в соответствующую группу для доступности использования KVM. Описание использования утилит можно найти по уже указанным руководствам. sudo aptitude install kvm libvirt-bin virtinst virt-top python-virtinst
sudo adduser softovick libvirt Фактически сразу можно использовать. Описывать все команды смысла не вижу, для этого есть man. Но покажу, как я создаю виртуальную машину:
для Linux virt-install -n linux -r 512 -f linux.img -s 15 -c образ.iso --accelerate --vnc --vncport=5900 --noautoconsole --os-type=linux --os-variant=generic26
для Windows virt-install -n windows -r 512 -f windows.img -s 15 -c образ.iso --accelerate --vnc --vncport=5901 --noautoconsole --os-type=windows --os-variant=win2k3 --noacpi После этого дальнейший ход установки и экран гостевой машины можно контролировать, подключившись при помощи VNC-клиента к серверу по порту 5900 и 5901(рекомендую для каждой машины заранее определять порт VNC, чтобы было удобно подключаться). Есть еще несколько полезных опций, я их не использую лишь потому, что не столкнулся с их необходимостью.

И еще один штрих, но не последний. Как подключить к гостевой системе возможность что-то писать напрямую на физический раздел или папку на рейде, я пока не понял, хотя и старался. Поэтому в случае Linux я подключаюсь к данным на сервере при помощи nfs, а в случае Windows — при помощи Samba. Настройка Samba достаточно тривиальна, устанавливаем sudo aptitude install samba и правим конфигурационный файл /etc/samba/smb.conf под свои задачи. А вот установка и настройка nfs не совсем тривиальна. Я использую такой вариант установки, позволяющий подключаться к нужным папкам с любого ip-адреса локальной сети (вида 192.168.10.*): sudo aptitude install nfs-kernel-server portmap
perl -pi -e "s/^OPTIONS/#OPTIONS/" /etc/default/portmap
echo "portmap: 192.168.10." >> /etc/hosts.allow
/etc/init.d/portmap restart
echo "/media/raid 192.168.10.0/255.255.255.0(rw,no_root_squash,subtree_check)" >> /etc/exports
/etc/init.d/nfs-kernel-server reload
После приведенных действий достаточно на гостевой системе сделать так:
sudo mount сервер:/media/raid локальная_папка
При необходимости можно включить автоматическое монтирование при загрузке, поправив конфигурационный файл /etc/fstab, добавив туда строку типа:
virtual:/media/raid /media/raid nfs defaults 0 2
Ну вот, в целом настройка нашего сервера виртуализации завершена. Управлять им можно как в консоли, так и при помощи графических инструментов virsh или virtual manager .

P.S.:
Некоторые полезные советы:
1. Если вы указали конкретный порт VNC для гостевой машины, то через Virtual Manager вы не сможете автоматически запустить графическую консоль.
2. Virtual Manager не сможет подключиться, если у вас переопределен порт ssh. Точнее для этого придется долго и нудно разбираться.
3. Обязательно используйте для гостевой Windows Server режим —noacpi, чтобы она нормально установилась.
4. Аккуратно настраивайте режим сбережения энергии на гостевых системах, ни в коем случае не отключайте экран, иначе не сможете потом подключится по VNC.
5. Если вы хотите удаленно выключать и перезагружать машины через Virtual Manager, то отключайте хранитель экрана, т.к. он блокирует управление питанием.

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то