Библиотека сайта 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:
Введите свой пароль:
При первом запуске 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:
Вы должны увидеть работающую vm10. Кликните кнопку Open, чтобы открыть графическую консоль гостевой системы:
Снова введите пароль root для хоста KVM:
Теперь вы должны подключиться к графической консоли гостевой машины и увидеть инсталлятор 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:
Теперь вы можете подключиться к графической консоли гостевой машины и увидите инсталлятор 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.