Виртуализация QEMU-KVM
QEMU — программное обеспечение с открытым исходным кодом для эмуляции аппаратного обеспечения и виртуализации. Позволяет ОС и ПО спроектированные для одной аппаратной архитектуры (например, ARM) выполнять на другой (например PC) как отдельный процесс.
Недостаток QEMU его медлительность, связанная с программной эмуляцией, даже если запущен на железе совместимом с гостевой ОС. Для улучшения производительности, в QEMU имеется модуль ядра KVM, который позволяет большинству гостевых ОС выполняться непосредственно на x86 и x86_64 процессорах с поддержкой аппаратной виртуализации Intel VT или AMD-V.
QEMU-KVM может быть запущен только на Linux или BSD системах с поддержкой аппаратной виртуализации Intel VT или AMD-V на x86 или x86_64 процессорах.
В данной статье настройка qemu-kvm будет выполняться под Debian GNU/Linux 6.
Перед началом выполните команду:
1 |
egrep '(vmx|svm)' --color=always /proc/cpuinfo |
Если вывод будет пустой, то Ваш CPU не поддерживает аппаратную виртуализацию.
1. Установка компонентов qemu-kvm
1 |
root@hyperv:~# aptitude install kvm libvirt-bin virtinst |
Проверяем, включена ли поддержка виртуализации в BIOS. Если modprobe kvm-intel или /etc/init.d/qemu-kvm start возвращают ошибку:
1 2 |
root@hyperv:~# modprobe kvm-intel FATAL: Error inserting kvm_intel (/lib/modules/2.6.32-5-amd64/kernel/arch/x86/kvm/kvm-intel.ko): Operation not supported |
или
1 2 3 |
root@hyperv:~# /etc/init.d/qemu-kvm start FATAL: Error inserting kvm_intel (/lib/modules/2.6.32-5-amd64/kernel/arch/x86/kvm/kvm-intel.ko): Operation not supported Module kvm_intel failed to load ... failed! |
то поддержка виртуализации в BIOS отключена — надо включить.
2. Настройка моста между виртуальным интерфейсом гостевой машины и сервером
Конфигурация интерфейса до изменений:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
root@hyperv:~# cat /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 iface eth0 inet static address 192.168.128.14 netmask 255.255.252.0 network 192.168.128.0 broadcast 192.168.131.255 gateway 192.168.128.1 # dns-* options are implemented by the resolvconf package, if installed dns-nameservers 192.168.128.2 dns-search company.com |
Меняем на:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
root@hyperv:~# cat /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback auto eth0 iface eth0 inet manual auto br0 iface br0 inet static address 192.168.128.14 network 192.168.128.0 netmask 255.255.252.0 broadcast 192.168.131.255 gateway 192.168.128.1 bridge_ports eth0 bridge_stp off bridge_fd 0 bridge_maxwait 0 |
Перезапустем службу networking для применения настроек:
1 |
root@hyperv:~# invoke-rc.d networking restart |
3. Настройка удаленного доступа к гостевой ОС через UltraVNC.
Перед первым запуском гостевой ОС необходимо настроить удаленное подключение через UVNC для управления процессом установки гостевой ОС.
Откроем для редактирования файл qemu.conf и внесем изменения:
1 |
root@hyperv:~# nano /etc/libvirt/qemu.conf |
Раскомментируем следующие строки и меняем на свое усмотрение:
1 2 |
vnc_listen = "0.0.0.0" # IP адрес интерфейса на котором слушать порт (по умолчанию 5900) vnc_password = "XYZ12345" # пароль для доступа к гостевой ОС |
4. Установка гостевой ОС.
Первый запуск виртуальной машины (ВМ):
1 2 3 4 5 6 7 8 9 10 |
root@hyperv:~# virt-install --connect qemu:///system -n guest_os -r 1024 \ --vcpus=2 \ --disk path=/data0/images/guest_os.img,size=9,format=raw,bus=virtio,cache=none -c /data1/debian-6.0.4-amd64-DVD-1.iso \ --vnc \ --noautoconsole \ --os-type linux \ --os-variant debiansqueeze \ --accelerate \ --network=bridge:br0 \ --hvm |
Далее, подключаемся vnc-клиентом и устанавливаем систему. После окончания установки, перед загрузкой ВМ, необходимо выполнить еще одно действие — коммандой «virsh define <file>» обновить настройки kvm сервера, иначе после перезагрузки может опять начаться процесс инсталяции.
ЗАПОМНИТЕ: При рестарте ВМ настройки, измененные в XML-файле, примененны не будут, для их вступления в силу используйте команду «virsh define <file>».
1 2 3 |
root@hyperv:~# virsh define /etc/libvirt/qemu/guest_os.xml Domain guest_os defined from /etc/libvirt/qemu/guest_os.xml virsh # start guest_os |
После инсталяции добавляем ВМ в автозапуск
1 |
virsh# autostart guest_os |
Теперь после перезагрузки гипервизора, автоматически запустится ВМ.
5. Настройка блочного устройства.
Для доступа гостевой ОС к ФС гипервизора необходимо настроить сервис nbd.
(Написать мануал об использовании kvm-nbd)
Устанавливаем nbd-server для прямого доступа к ФС гипервизора из гостевой систем
5.1 Настройка на гипервизоре.
Устанавливаем необходимые пакеты:
1 |
root@hyperv:~# apt-get install nbd-server |
Конфигурируем nbd-server:
1 |
dpkg-reconfigure nbd-server |
Настраиваем:
1 2 3 4 5 6 7 8 9 10 11 12 |
root@hyperv:~# nano /etc/nbd-server/config [generic] # If you want to run everything as root rather than the nbd user, you # may either say «root» in the two following lines, or remove them # altogether. Do not remove the [generic] section, however. user = nbd group = nbd # What follows are export definitions. You may create as much of them as # you want, but the section header has to be unique. [export] exportname = /dev/cciss/c0d1p1 port = 2000 |
5.2 Настройка на ВМ
Устанавливаем необходимые пакеты:
1 |
root@guestos:~# apt-get install nbd-client |
Проверяем подключение к сетевому блочному устройству:
1 2 3 |
root@guestos:~# nbd-client 192.168.128.14 2000 /dev/nbd0 Negotiation: ..size = 244161536KB bs=1024, sz=244161536 |
Вносим настройки в конфигурационный файл клиентской части:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
root@guestos:~# nano /etc/nbd-client # Name of the first used nbd /dev-entry: NBD_DEVICE[0]=/dev/nbd0 # # Type; s=swap, f=filesystem (with entry in /etc/fstab), r=raw (no other setup # than to run the client) NBD_TYPE[0]=f # # The host on which the nbd-server process is running NBD_HOST[0]=192.168.128.14 # # The port on which this client needs to connect NBD_PORT[0]=2000 |
Создаем точку монтирования сетевого блочного устройства:
1 |
root@guestos:~# mkdir /nbd0hyperv |
Назначаем права:
1 |
root@guestos:~# chmod 777 /nbd0hyperv |
Добавляем в fstab для автоматического монтирования при загрузке:
1 2 3 |
root@guestos:~# nano /etc/fstab # NBD0 from hyperv /dev/nbd0 /nbd0hyperv ext4 defaults 0 0 |
ПРИМЕЧАНИЕ: Тип ФС (ext4) в fstab должен совпадать с ФС гипервизора
Монтируем:
1 |
root@guestos:~# mount /nbd0hyperv |
6. Настройка virt-manager с sasl аутентификацией
virt-manager позволяет подключаться к гипервизору для мониторинга и управления виртуальными машинами. Для управления доступом к гипервизору через virt-manager предусмотрен механизм sasl аутентификации пользователей.
6.1 Настройка libvirtd
Настроим libvirtd для работы с sasl
В файле /etc/libvirt/libvirtd.conf раскоментируем:
1 2 3 4 5 |
listen_tls=0 # отключить TLS listen_tcp=1 # включить слушать TCP порт tcp_port = "16509" # какой порт listen_addr = "0.0.0.0" # какой интерфейс слушать auth_tcp="sasl" # какой тип аутентификации использовать |
Для того что бы libvirt был доступен по сети необходимо отредактировать скрипт запуска libvirt-bin — добавить ключ «-l» и перезапустить libvirt-bin
1 2 3 |
root@hyperv:~# nano /etc/default/libvirt-bin libvirtd_opts="-d -l" root@hyperv:~# /etc/init.d/libvirt-bin restart |
Проверяем:
1 2 |
root@hyperv# netstat -anp | grep tcp | grep libvirt tcp 0 0 0.0.0.0:16509 0.0.0.0:* LISTEN 4151/libvirtd |
6.2 Настройка qemu
Раскомментируем в qemu.cnf строки:
1 2 3 4 5 6 7 |
cgroup_controllers = [ "cpu", "devices" ] cgroup_device_acl = [ "/dev/null", "/dev/full", "/dev/zero", "/dev/random", "/dev/urandom", "/dev/ptmx", "/dev/kvm", "/dev/kqemu", "/dev/rtc", "/dev/hpet", "/dev/net/tun", ] |
Выполним следующие команды:
1 2 3 |
root@hyperv:~# mkdir /dev/cgroup root@hyperv:~# mount -t cgroup -o devices,cpu none /dev/cgroup root@hyperv:~# /etc/init.d/libvirt-bin restart |
6.3 Настройка sasl
Устанавливаем пакет cyrus-sasl2
1 |
root@hyperv:~# apt-get install sasl2-bin |
В Debain-е cyrus-sasl2 не читает конфиг из файла размещенного /etc/sasl2/libvirt.conf, как указано в /etc/libvirt/libvirtd.conf, поэтому его следует скопировать туда, откуда cyrus-sasl2 будет читать.
1 2 3 |
root@hyperv:~# cp /etc/sasl2/libvirt.conf /usr/lib/sasl2/ root@hyperv:~# chown -R root:sasl /usr/lib/sasl2/libvirt.conf root@hyperv:~# chmod -R 660 /usr/lib/sasl2/libvirt.conf |
В файле libvirt.conf раскоментируем:
1 |
mech_list: digest-md5 |
Добавление пользователя
1 2 3 |
root@hyperv:~# saslpasswd2 -a libvirt user Password: Again (for verification): |
Список пользователей:
1 2 |
root@hyperv:~# sasldblistusers2 -f /etc/libvirt/passwd.db user@hyperv: userPassword |
Удаление пользователя:
1 |
root@hyperv:~# saslpasswd2 -a libvirt -d user |
6.4 Настройка virt-manager
virt-manager это клиентское ПО, которое мы будем настраивать на машине администратора — на вашей машине.
Установим virt-manager:
1 |
root@localhost:~# apt-get install virt-manager |
Для подключения к гипервизоу на машине администратора, с правами текущего пользователя в терминале выполнить:
1 |
user@localhost:~$ virt-manager -c qemu+tcp://192.168.128.14/system |
После этого запустится графическая оболочка менеджера виртуальных машин
Добавить комментарий