Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Виртуализация с KVM на Fedora 17 Server

Оригинал: Virtualization With KVM On A Fedora 17 Server
Автор: Falko Timme
Дата публикации: 5 октября 2012 года
Перевод: А. Кривошей
Дата публикации перевода: 29 декабря 2012 г.

В этом руководстве описывается, как установить и настроить KVM для создания и запуска виртуальных машин на Fedora 17 server. Я покажу, как создать виртуальные машины, использующие как образ, так и логический том (LVM). KVM использует аппаратную виртуализацию, поэтому необходимо, чтобы ваш процессор поддерживал Intel VT или AMD-V.

Я не даю никакой гарантии, что у вас все будет работать так, как это описано у меня!

1. Подготовка

Я использую Fedora 17 server с именем хоста server1.example.com и IP-адресом 192.168.0.100. SELinux у меня отключен. Все должно работать и с ним, но если будут проблемы, лучше его отключить:

$ vi /etc/selinux/config

Отредактировать: SELINUX=disabled...

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

... и перезагрузка:

$ reboot

Также необходим десктоп, на котором мы установим virt-manager, чтобы можно было подключаться к графической консоли виртуальной машины. Я использую для этого Fedora 17 desktop.

2. Установка KVM

Хост Fedora 17 KVM:

Для начала проверьте, поддерживает ли ваш процессор аппаратную виртуализацию - в данном случае с помощью команды:

$ egrep '(vmx|svm)' --color=always /proc/cpuinfo

Вывод должен содержать что-то вроде этого:

[root@server1 ~]# egrep '(vmx|svm)' --color=always /proc/cpuinfo
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall
 nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy misalignsse
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall
 nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy misalignsse
[root@server1 ~]#

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

Теперь импортируем GPG-ключи для программных пакетов:

$ rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

Для установки KVM и virtinst (утилиты для создания виртуальных машин), вводим:

$ yum install kvm libvirt python-virtinst qemu-kvm

Создаем ссылки для демона libvirt и запускаем его:

$ systemctl enable libvirtd.service
$ systemctl start libvirtd.service

Для того, чтобы проверить успешность установки KVM, введите команду:

$ virsh -c qemu:///system list

Вывод должен быть примерно таким:

[root@server1 ~]# virsh -c qemu:///system list
 Id Name                 State
----------------------------------

[root@server1 ~]#

Если вместо этого выводится сообщение об ошибке, что-то пошло не так.

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

$ yum install bridge-utils

... и настраиваем мост.

Я отключил NetworkManager и активировал "обычную" сеть. NetworkManager хорош для десктопа, где сетевые соединения часто изменяются (например, LAN vs. WLAN), но на сервере обычно мы не меняем сетевые соединения:

$ systemctl disable NetworkManager.service
$ systemctl enable network.service
$ systemctl restart network.service
$ systemctl stop NetworkManager.service

Проверьте свой /etc/resolv.conf на предмет того, содержит ли он все серверы, которые вы до этого настраивали:

$ cat /etc/resolv.conf

Если нет, запустите

$ system-config-network

и добавьте отсутствующие серверы заново.

Далее, найдем основной сетевой интерфейс:

$ ifconfig

В моем случае он называется em1 - это важно, чтобы отредактировать правильный файл конфигурации сети - в моем случае /etc/sysconfig/network-scripts/ifcfg-em1.
Чтобы настроить мост, создайте файл /etc/sysconfig/network-scripts/ifcfg-br0 (пожалуйста, используйте DNS1 (плюс любые другие значения DNS), а значения GATEWAY, IPADDR, NETMASK и SEARCH возьмите из файла /etc/sysconfig/network-scripts/ifcfg-em1):

$ vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
DNS1=8.8.8.8
GATEWAY=192.168.0.1
IPADDR=192.168.0.100
NETMASK=255.255.255.0
ONBOOT=yes
DNS2=8.8.4.4
SEARCH="example.com"

Редактируем файл /etc/sysconfig/network-scripts/ifcfg-em1 как показано ниже (закомментируем параметры BOOTPROTO, DNS1 (и все другие серверы DNS, если они имеются), GATEWAY, IPADDR, NETMASK и SEARCH, измените значение NM_CONTROLLED на no и добавьте строку BRIDGE=br0):

$ vi /etc/sysconfig/network-scripts/ifcfg-em1
UUID="e8a818cc-0e23-47b8-88f3-013567828572"
NM_CONTROLLED=no
#BOOTPROTO=none
HWADDR=00:1e:90:f3:f0:02
ONBOOT=yes
#IPADDR=192.168.0.100
#NETMASK=255.255.255.0
#DNS2=8.8.4.4
TYPE=Ethernet
#GATEWAY=192.168.0.1
#DNS1=8.8.8.8
IPV6INIT=no
USERCTL=no
PREFIX=24
BRIDGE=br0

Теперь перезагружаем систему:

$ reboot

После перезагрузки запускаем:

$ ifconfig

Теперь она должна показать сетевой мост (br0):

3. Установка virt-viewer или virt-manager на Fedora 17 Desktop

Нам нужна возможность подключения к графической консоли наших гостевых систем - для этого можно использовать virt-manager. Далее предполагается, что мы работаем в системе Fedora 17 desktop.
Авторизуйтесь как root и введите следующую команду...

$ yum install virt-manager libvirt qemu-system-x86 openssh-askpass

... для установки virt-manager.

Если вы используете Ubuntu 12.04, можете установить virt-manager с помощью следующей команды:

$ sudo apt-get install virt-manager

4. Создание гостевой системы Debian Squeeze (на базе образа) в командной строке

Хост Fedora 17 KVM:

Теперь возвращаемся к нашему хосту Fedora 17 KVM.

Просмотрите

$ man virt-install

чтобы получше узнать, как работает virt-install.

Мы будем создавать наши виртуальные машины на базе образов в директории /var/lib/libvirt/images/, которая была автоматически создана при инсталляции KVM.
Чтобы создать гостевую систему Debian Squeeze (в режиме моста) с именем vm10, 512 Мб оперативной памяти, двумя виртуальными процессорами и образом диска /var/lib/libvirt/images/vm10.img (размером 12 Гб), вставьте в привод Debian Squeeze Netinstall CD и выполните следующую команду:

Конечно, вы также можете создать ISO-образ Debian Squeeze Netinstall CD (пожалуйста, в таком случае поместите его в директорию /var/lib/libvirt/images/, так как позже, когда я покажу вам, как создавать виртуальные машины с вашего Fedora desktop с помощью virt-manager, он будет искать ISO-образы именно в этой директории)...

$ man virt-install

... и использовать ISO-образ в команде virt-install:

Вывод должен быть таким:

5. Подключение к гостевой системе

Fedora 17 Desktop:

Гостевую систему KVM теперь можно загрузить с Debian Squeeze Netinstall CD и запустить инсталлятор Debian - для этого необходимо подключиться к графической консоли гостевой машины. Вы можете сделать это с помощью virt-manager на Fedora 17 desktop.
Перейдите в Applications > System Tools > Virtual Machine Manager, чтобы запустить virt-manager:

Virtual Machine Manager

Введите свой пароль:

ввод пароля

При первом запуске virt-manager вы скорее всего увидите сообщение о невозможности открыть соединение с libvirt management daemon. Вы можете проигнорировать его, так как мы собираемся подключаться не к локальному демону libvirt, а расположенному на нашем хосте Fedora 17. Кликните Close и перейдите в File > Add Connection... для подключения к хосту:

подключение к хосту

Выберите гипервизор QEMU/KVM, затем установите галочку напротив "Connect to remote host", выберите SSH в выпадающем меню "Method", введите root в поле "Username", имя хоста (server1.example.com) или IP-адрес (192.168.0.100) хоста в поле "Hostname", затем кликните Connect:

настройка соединения

Если вы подключаетесь к удаленному серверу KVM в первый раз, необходимо ввести "yes" и кликнуть OK:

подключение

Далее, введите пароль root для хоста Fedora 17 KVM:

ввод пароля root

Вы должны увидеть работающую vm10. Кликните кнопку Open, чтобы открыть графическую консоль гостевой системы:

виртуальная машина

Снова введите пароль root для хоста KVM:

ввод пароля root

Теперь вы должны подключиться к графической консоли гостевой машины и увидеть инсталлятор Debian:

инсталлятор Debian

Установите Debian, как вы обычно делаете это на физической машине. Не забудьте, что после окончания установки систему необходимо перезагрузить. После этого гостевая система остановится, поэтому необходимо будет запустить ее вновь либо с помощью virt-manager, либо из командной строки хоста:

Хост Fedora 17 KVM:

$ virsh --connect qemu:///system
$ start vm10

Вы можете снова подключиться к гостевой системе с помощью virt-manager и настроить ее. Если вы установили OpenSSH (пакет openssh-server) в гостевой системе, вы можете подключаться к ней с помощью клиента SSH (например PuTTY).

6. Создание гостевой системы Debian Squeeze (на базе образа) удаленно, с помощью virt-manager

Вместо того, чтобы создавать виртуальную машину в командной строке (как было показано в разделе 4), вы можете создать ее с десктопа Fedora, используя virt-manager (конечно, виртуальная машина будет создана на хосте Fedora 17 KVM - virt-manager способен создавать виртуальные машины на удаленных системах).

Чтобы сделать это, кликните следующую кнопку:

иконка кнопки

Откроется диалог New VM. Введите имя виртуальной машины (например vm11), выберите Local install media (ISO image or CDROM) и кликните Forward:

новая виртуальная машина

Далее в выпадающем списке выбора операционной системы выберите Linux, а в списке версий - Debian Squeeze, затем отметьте Use ISO image и кликните кнопку Browse...

выбор источника установки

Выберите образ debian-6.0.2.1-amd64-netinst.iso, который вы создали в разделе 4 и кликните Choose Volume:

выбор образа диска

Теперь кликните Forward:

продолжение настройки

Задайте объем оперативной памяти и количество процессоров для виртуальной машины и кликните Forward:

объем оперативной памяти и количество процессоров для виртуальной машины

Теперь очередь диска. Отметьте Enable storage for this virtual machine, выберите Create a disk image on the computer's hard drive, задайте размер диска (например 12 GB), и отметьте Allocate entire disk now. Затем кликните Forward:

виртуальный диск

Остался последний этап диалога New VM. Перейдите в секцию Advanced options. Выберите Host device vnet0 (Bridge 'br0'). Это имя моста, созданного нами в разделе 2. После этого кликните Finish:

настройка моста

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

создается образ диска

После чего запускается виртуальная машина. Введите пароль root хоста Fedora 17 KVM:

ввод пароля root

Теперь вы можете подключиться к графической консоли гостевой машины и увидите инсталлятор Debian:

графическая консоль

Установите Debian, как вы обычно делаете это на физической системе.

7. Управление гостевой системой KVM в командной строке

Хост Fedora 17 KVM:

Гостевыми системами KVM можно управлять посредством virsh, "виртуальной оболочки". Чтобы подключиться к виртуальной оболочке, введите команду:

$ virsh --connect qemu:///system

Виртуальная оболочка выглядит следующим образом:

[root@server1 ~]# virsh --connect qemu:///system
Welcome to virsh, the virtualization interactive terminal.

Type:  'help' for help with commands
       'quit' to quit

virsh #

Теперь вы можете вводить команды для управления вашими гостевыми системами в виртуальной оболочке. Для просмотра списка доступных команд введите:

Для просмотра всех гостевых систем, как запущенных, так и неактивных, введите:

virsh # list --all
 Id Name                 State
----------------------------------
  3 vm11                 running
  - vm10                 shut off

virsh #

Если вы модифицируете xml-файл гостевой системы (расположенный в директории /etc/libvirt/qemu/), вы должны переопределить гостевую систему:

define /etc/libvirt/qemu/vm10.xml

Пожалуйста, запомните, что каждый раз, когда вы модифиуируете xml-файл в /etc/libvirt/qemu/, вы должны снова переопределить систему.
Для запуска остановленной гостевой системы введите:

start vm10

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

shutdown vm10

Для немедленной остановки (то есть, аналог нажатия кнопки питания) введите:

destroy vm10

Приостановка гостевой системы:

suspend vm10

Возобновление работы приостановленной системы:

resume vm10

Это самые важные команды.

8. Создание виртуальной машины на базе LVM в командной строке

Хост Fedora 17 KVM:

Гостевые системы на базе LVM имеют определенные преимущества над системами на базе образов дисков. Они не так сильно нагружают систему ввола/вывода жесткого диска и позволяют упростить процедуру резервного компирования (используя снэпшоты LVM).
Для использования гостевых систем на базе LVM требуется группа томов, имеющая свободное пространство, не выделенное какому-либо логическому разделу. В нашем примере я использую группу томов /dev/vg_server1 размером примерно 465 Гб...

vgdisplay

[root@server1 ~]# vgdisplay
  --- Volume group ---
  VG Name               vg_server1
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               465.28 GiB
  PE Size               4.00 MiB
  Total PE              119112
  Alloc PE / Size       26500 / 103.52 GiB
  Free  PE / Size       92612 / 361.77 GiB
  VG UUID               ZXWn5k-oVkA-ibuC-ip8x-edLx-3DMw-UrYMXg

[root@server1 ~]#

...которая содержит логические тома /dev/vg_server1/LogVol00 размером примерно 100 Гб и /dev/vg_server1/LogVol01 (около 6 Гб) - остальное свободно и может быть использовано для гостевых систем KVM:

lvdisplay

[root@server1 ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg_server1/LogVol01
  LV Name                LogVol01
  VG Name                vg_server1
  LV UUID                uUpXY3-yGfZ-X6bc-3D1u-gB4E-CfKE-vDcNfw
  LV Write Access        read/write
  LV Creation host, time server1.example.com, 2012-08-21 13:45:32 +0200
  LV Status              available
  # open                 1
  LV Size                5.86 GiB
  Current LE             1500
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

--- Logical volume ---
  LV Path                /dev/vg_server1/LogVol00
  LV Name                LogVol00
  VG Name                vg_server1
  LV UUID                FN1404-Aczo-9dfA-CnNI-IKn0-L2hW-Aix0rV
  LV Write Access        read/write
  LV Creation host, time server1.example.com, 2012-08-21 13:45:33 +0200
  LV Status              available
  # open                 1
  LV Size                97.66 GiB
  Current LE             25000
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

[root@server1 ~]#

Сейчас я создам виртуальную машину vm12 в качестве гостевой системы на базе LVM. Я хочу выделить для vm12 около 20 Гб дискового пространства, поэтому я создал логический том /dev/vg_server1/vm12 размером 20 Гб:

$ lvcreate -L20G -n vm12 vg_server1

После этого мы снова используем команду virt-install для создания гостевой системы:

Пожалуйста, отметьте, что я использую путь --disk path=/dev/vg_server1/vm12 вместо --disk path=/var/lib/libvirt/images/vm12.img,size=20, и теперь мне больше не нужно задавать размер диска, так как он определяется размером логического тома vm12 (20 Гб).

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

9. Конвертирование гостевой системы на базе образа диска в систему на базе LVM

Хост Fedora 17 KVM:

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

$ virsh --connect qemu:///system
shutdown vm10

Затем создайте логический том (т.е. /dev/vg_server1/vm10) такого же размера, как и файл образа. Чтобы узнать размер образа, введите...

ls -l /var/lib/libvirt/images/

[root@server1 ~]# ls -l /var/lib/libvirt/images/
total 13819392
-rw-r--r-- 1 qemu qemu   177209344 May 12 22:41 debian-6.0.5-amd64-netinst.iso
-rw------- 1 root root 12884901888 Aug 21 15:37 vm10.img
-rw------- 1 qemu qemu 12884901888 Aug 21 15:51 vm11.img
[root@server1 ~]#

Как вы видите, vm10.img имеет размер 12884901888 байт. Чтобы создать логический том точно такого же размера, необходимо задать опцию -L 12884901888b (пожалуйста, не забудьте b в конце числа, которое обозначает байты - по умолчанию он воспримет размер в мегабайтах):

$ lvcreate -L 12884901888b -n vm10 vg_server1

Теперь конвертируем образ:

$ qemu-img convert /var/lib/libvirt/images/vm10.img -O raw /dev/vg_server1/vm10

Сейчас вы можете удалить образ диска:

$ rm -f /var/lib/libvirt/images/vm10.img

Теперь мы должны открыть конфигурационный файл /etc/libvirt/qemu/vm10.xml...

$ vi /etc/libvirt/qemu/vm10.xml

... и изменить следующий радел...

... чтобы он выглядел так:

После чего необходимо переопределить гостевую систему:

$ virsh --connect qemu:///system

define /etc/libvirt/qemu/vm10.xml

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

start vm10

... и выйти из virsh shell.