Навожу заметку в которой пойдет речь об настройке и установке популярной системы виртуализации KVM(Kernel-based Virtual Machine). KVM — это тип аппаратной виртуализации, т.е. независимость гостевой ОС от хостовой. В предыдущей статье шла речь об контейнерной системе виртуализации OpenVZ, которая отлично подходит для виртуализации ОС Linux, но если нужен виртуальный сервер на базе Windows — лучшим вариантом, на данный момент есть KVM виртуализация.
Не все процессоры поддерживают данный тип виртуализации! Для проверки нужно выполнить команду.
[root@centos ~] egrep '(svm|vmx)' /proc/cpuinfo flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm tpr_shadow vnmi flexpriority
Если не получили никакого вывода — проц не поддерживает KVM виртуализации. Если все ок — устанавливаем и стартуем демон.
[root@centos ~] yum install kvm libvirt virt-manager [root@centos ~] service libvirtd start Starting libvirtd daemon: [ OK ]
Если демон не поднялся, нужно проверить загрузились модули или нет.
[root@centos ~] lsmod | grep kvm kvm_intel 45674 0 kvm 291811 1 kvm_intel
Теперь нужно настроить сетевой мост, предварительно удалив дефолтный. Для этого нужно немного модифицировать стандартный интерфейс и добавить бридж.
[root@centos ~] vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" BOOTPROTO="static" HWADDR="1C:6F:65:53:77:D5" BRIDGE=bridge0 ONBOOT="yes" [root@centos ~] vim /etc/sysconfig/network-scripts/ifcfg-bridge0 DEVICE="bridge0" TYPE=Bridge BOOTPROTO="static" IPADDR=192.168.1.10 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 ONBOOT="yes" [root@centos ~] service network restart Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: [ OK ] Bringing up interface bridge0: [ OK ]
Теперь удалим дефолтный virbr0
[root@centos ~] virsh net-list Name State Autostart ----------------------------------------- default active yes [root@centos ~] virsh net-destroy default Network default destroyed [root@centos ~] virsh net-undefine default Network default has been undefined
Для проверки состояния моста можно использовать утилиту brctl. Это стандартная утилита для работы с ethernet мостами.
[root@centos ~] brctl show bridge name bridge id STP enabled interfaces bridge0 8000.1c6f655377d5 no eth0
Теперь сеть настроена. Можно создавать гостевую ОС. Для этого используют утилита virt-install. У нее очень много опций и ключей, советую посмотреть и поэкспериментировать с ними. Я так и сделал — навожу пример своих ключиков для создания виртуалки Windows 2008 R2.
[root@centos ~] virt-install --connect qemu:///system \ > -n win2k8-webserver \ > -r 1536 \ > --arch=x86_64 \ > --vcpus=2 \ > -c /vz/template/kvm/win2k8r2.iso \ > --os-type windows \ > --os-variant win2k8 \ > --disk path=/dev/main/web-server \ > --network bridge:bridge0 \ > --graphics vnc,password=alex1989,listen=0.0.0.0,port=5901 \ > -v \ > --noautoconsole \ > --autostart \ > -d \ > --disk path=/vz/template/kvm/virtio-win-0.1-49.iso,device=cdrom,perms=ro \ > --boot cdrom,hd
Здесь,
«/vz/template/kvm/win2k8r2.iso» — это оригинальные образ ОС,
«/dev/main/web-server» — путь к созданному LVM разделу
«/vz/template/kvm/virtio-win-0.1-49.iso» — образ с драйверами
Создания LVM раздела:
[root@centos ~] lvcreate -L 100G -n web-server main # web-server - имя раздела # main - имя volume group
Образ с драйверами можно скачать здесь.
[root@centos ~] wget http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/virtio-win-0.1-49.iso
После предыдущей команды будет запущена установка Windows. Установка производиться в интерактивном режиме, по этому нужно подключиться к графической консоли. Подключаться можно по ІР-адресу на нужный порт. Порт можно узнать такой командой
[root@centos ~] virsh vncdisplay win2k8-webserver :0
Это означает, что для подключения к нашей виртуальной ОС, нужно использовать порт 5900. Для подключения к интерактивной установки можно использовать утилиту vncviewer. В нашем случаи:
[root@remote ~] vncviewer 192.168.1.10:5900
Теперь, чтобы установить базовые драйвера для Windows доходим до выбора Жесткого диска (drive selection screen), далее нажимаем на “load drivers” (заrрузить драйвера) и кликаем “Browse”. Далее переходим в «E:\viostor\wlh\{amd64|x86}» и выбираем нужные драйвера. По завершению установки у нас будет полноценный виртуальный windows сервер, к которому можно подключаться как по RDP так и по VNC.
Расположение основных конфигов.
/etc/libvirt/qemu.conf # основной конфиг qemu. Тут задаём параметры vnc сервера. /etc/libvirt/qemu/win2k8-webserver.xml # папка для хранения конфигов виртуальных машин.
Далее наш конфиг-файл win2k8-webserver.xml можно использовать для разворачивания Windows VDS-серверов по шаблону.
[root@centos ~] lvcreate -L 50G -n win_templ main [root@centos ~] dd if=/var/lib/vz/template/kvm_templates/win2008StdSP1R2x64-template.img of=/dev/main/win_templ [root@centos ~] cp /etc/libvirt/qemu/win2k8-webserver.xml /etc/libvirt/qemu/win_templ.xml [root@centos ~] vim /etc/libvirt/qemu/win_templ.xml # поменять логин, пароль, МАС-адрес [root@centos ~] virsh -c qemu:///system define /etc/libvirt/qemu/win_templ.xml [root@centos ~] virsh -c qemu:///system start win_templ [root@centos ~] virsh -c qemu:///system autostart win_templ [root@centos ~] virsh vncdisplay win_templ :5
Если в виртуальной машине не поднялась сеть, нужно посмотреть настройки моста — есть ли виртуальный интерфейс созданной гостевой машины.
[root@centos ~] cat /etc/libvirt/qemu/win_templ.xml | grep mac [root@centos ~] ip a | grep -B1 '28\:93' vnet2 Link encap:Ethernet HWaddr 00:0c:29:28:93:a5 [root@centos ~] brctl show # увидим в каком из мостов наш vnet2, если нету - добавляем [root@centos ~] brctl addif breth0 vnet2
Если на сервере настроен iptables — нужно добавить правила для подключения к виртуалкам.
IPTABLES -A INPUT -m state --state NEW -m tcp -p tcp -m multiport --dports 5900:5903,6001:6003 -j ACCEPT
Часто употребляемые команды.
virsh list --all # листинг всех виртуальных машин virsh start win_templ # запуск виртуалки virsh shutdown win_templ # выключение гладкое virsh destroy win_templ # выключить по питанию (если не отвечает) virsh undefine win_templ # удалить (конифг тоже удаляется) virsh autostart win_templ # добавить в автозагрузку virsh autostart --disable win_templ # удалить из автозагрузки virsh qemu-monitor-command win_templ help --hmp # запустить команду в qemu мониторе virsh define /etc/libvirt/qemu/win_templ.xml #обновление информации о машине virsh vncdisplay win_templ # порт virsh dumpxml win_templ | grep vnc # порт