Програмне забезпечення KVM складається з завантаження модуля ядра (що зветься kvm.ko), що надає базовий сервіс віртуалізації, специфічного для процесора модуля kvm-amd.ko або kvm-intel.ko, і компонентів для користувача режиму (модифікованого QEMU). Всі компоненти KVM є програмним забезреченням із відкритим вихідним кодом. Компонент ядра, необхідний для роботи KVM, включений в основну гілку Linux починаючи з версії 2.6.20 (лютий 2007). Тож для роботи з даним типом віртуалізації варто мати лише ядро більш-менш сучасної версії.
Самостійно KVM не виконує емуляції. Замість цього програма (QEMU), що працює в просторі користувача, використовує інтерфейс /dev/kvm для налаштування адресного простору гостя віртуальної машини, через нього ж і емулює пристрої введення-виведення і відеоадаптер. (c) Wikipedia
Тож приступаємо! Установка КVM віртулізації буде проведено для Ubuntu 12.10. Спершу перевіримо чи підтримує процесор хост-системи апаратну віртуалізацію:
# 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 dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt lahf_lm arat dtherm tpr_shadow vnmi flexpriority ept vpid
Якщо вивід відсутній - то можна завершувати спроби встановлення KVM, адже даний тип віртуалізації не працює на процесорах без підтримки SVM чи Intel VT. Як варіант можна використати XEN PV (паравіртуалізацію), що власне є також дуже хорошим варіантом. Але загалом у всіх відносно сучасних процесорах не має бути таких проблем.
Тепер встановимо супутнє програмне забезпечення:
# sudo -i
# apt-get install ubuntu-virt-server python-vm-builder kvm-ipxe
Додамо користувача root в групи libvirtd та kvm:
# adduser `id -un` libvirtd
# adduser `id -un` kvm
Перелогінюємось і перевіряємо чи коректно було встановлено KVM:
# virsh -c qemu:///system list
Id Name State
----------------------------------------------------
Якщо все саме так і немає жодних помилок - то поки все йде в правильному руслі.
Наразі будемо налаштувувати мережевий міст (bridge) задля того, щоб в гостевій операційній системі було підключення до мережі.
Встановлюємо пакет для бріджингу:
# apt-get install bridge-utils
Одразу згадаю, що драйвери wifi-карток далеко не всі підтримують режим бріджинга, тож краще експериментувати з провідним інтерфейсом eth. Мої мережеві налаштування /etc/network/interfaces до правки виглядали так:
Встановлюємо пакет для бріджингу:
# apt-get install bridge-utils
Одразу згадаю, що драйвери wifi-карток далеко не всі підтримують режим бріджинга, тож краще експериментувати з провідним інтерфейсом eth. Мої мережеві налаштування /etc/network/interfaces до правки виглядали так:
# cat /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.26
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
А після так:
# cat /etc/network/interfaces
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address 192.168.1.26
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
У випадку коли мережею управляє Network Manager, то interfaces-налаштування звісно будуть майже пустими. Також бажано взагалі зупинити Network Manager.
# cat /etc/network/interfaces
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address 192.168.1.26
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
У випадку коли мережею управляє Network Manager, то interfaces-налаштування звісно будуть майже пустими. Також бажано взагалі зупинити Network Manager.
Перевантажуємо мережу:
# /etc/init.d/networking restart
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000
link/ether 64:31:50:04:7c:49 brd ff:ff:ff:ff:ff:ff
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 64:31:50:04:7c:49 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.26/24 brd 192.168.0.255 scope global br0
inet6 fdee:cbcd:a595:0:c81c:78ee:72ef:6a31/64 scope global temporary dynamic
5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 2a:bf:a7:d5:3a:d7 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
Після цього бажано перевантажити сервер.
Власне підготовчі кроки було виконано, переходимо до установки гостевої операційної системи. Для створення віртуалки із Ubuntu можна скористуватись скриптом vmbuilder, проте перед цим створимо директорію для віртуальної машини та скопіюємо template-файли для майбутньої машини:
# mkdir -p /var/lib/libvirt/images/vm-ubuntu/mytemplates/libvirt
# cp /etc/vmbuilder/libvirt/* /var/lib/libvirt/images/vm-ubuntu/mytemplates/libvirt/
Також опишимо віртуальний диск майбутньої інсталяції:
# vi /var/lib/libvirt/images/vm-ubuntu/vmbuilder.partition
root 2048
swap 1024
---
/var 2048
Розмір задано в МБ, а лінія "---" створить директорії var на другому віртуальному диску. Тобто до віртуалки буде підключено два віртуальних HDD.
Користуючись вищезгаданим скриптом переходимо до самого процесу установки:
# vmbuilder kvm ubuntu \
--suite=precise \
--flavour=virtual \
--arch=amd64 \
--mirror=http://de.archive.ubuntu.com/ubuntu \
-o \
--libvirt=qemu:///system \
--ip=192.168.1.30 \
--gw=192.168.1.1 \
--part=vmbuilder.partition \
--templates=mytemplates \
--user=vmipeacocks \
--name=vmipeacocks --pass=blogspot \
--addpkg=vim-nox --addpkg=unattended-upgrades \
--addpkg=openssh-server --addpkg=acpid \
--addpkg=openssh-server --addpkg=acpid \
--mem=1024 \
--hostname=vm-ubuntu \
--bridge=br0
За декілька хвилин гостьову систему буде встановлено:
# virsh -c qemu:///system list
Id Name State
----------------------------------------------------
12 vm-ubuntu running
Також можна підключить по ssh на ip 192.168.1.30, так як було попередньо встановлено відповідний пакет ключем -addpkg=openssh-server.
Якщо ж необхідний консольний доступ через virsh-меню, то слід налаштувати консоль в гостевій операційній системі (попредньо підключившись, наприклад, по ssh):
# vim /etc/init/ttyS0.conf
# ttyS0 - getty#
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.
start on stopped rc or RUNLEVEL=[2345]
stop on runlevel [!2345]
respawn
exec /sbin/getty -L 115200 ttyS0 vt102
І запустити її як процес:
$ sudo start ttyS0
Тепер гостева операційна система буде доступна також через virsh-консоль:
# virsh console vm-ubuntu
Connected to domain vm-ubuntu
Escape character is ^]
Ubuntu 12.04.2 LTS vm-ubuntu ttyS0
vm-ubuntu login:
Установка інших дистрибутивів/операційних систем відбувається за допомогою скрипта virt-install. Наведу приклад установлення CentOS.
vm-ubuntu login:
Установка інших дистрибутивів/операційних систем відбувається за допомогою скрипта virt-install. Наведу приклад установлення CentOS.
Встановлюємо virt-install:
# apt-get install virtinst
Качаємо net-install/minimal образ CentOS і монтуємо його:
# wget http://ftp.colocall.net/pub/centos/6.4/isos/x86_64/CentOS-6.4-x86_64-netinstall.iso
# mkdir /mnt/centos64
# mount -o loop CentOS-6.4-x86_64-netinstall.iso /mnt/centos64
# mkdir /mnt/centos64
# mount -o loop CentOS-6.4-x86_64-netinstall.iso /mnt/centos64
Створюємо диск розміром 8 ГБ для гостьової операційної системи:
# dd if=/dev/zero of=/var/lib/libvirt/images/vm-centos.img bs=1M count=8192
Запускаємо virt-install:
# sudo virt-install \
--connect qemu:///system \
-n vm-centos \
-r 1024 \
--vcpus=2 \
--disk path=/var/lib/libvirt/images/vm-centos.img \
-l /mnt/centos64 \
--os-type linux \
--accelerate \
--nographics \
-v \
--network=bridge:br0 \
-x "console=ttyS0"
--network=bridge:br0 \
-x "console=ttyS0"
Після виконання команди стартує псевдографічний інтерфейс установки CentOS, де потрібно буде указати налаштування мережі і таке інше.
Також можна скористатись програмою Virt-manager для управління віртуальними машинами
Щоб мати можливість вимикати/вмикати віртуальну машину за допомогою virsh-меню необхідно пересвідчитись, що в гостевій операційній системі установлено i запущено acpid.
Посилання:
http://www.howtoforge.com/virtualization-with-kvm-on-ubuntu-12.04-lts-p2
http://sysadminman.net/blog/2011/kvm-virtualization-text-centos-guest-install-2098
http://www.howtoforge.com/installing-kvm-guests-with-virt-install-on-ubuntu-12.04-lts-server-p2
http://opennodecloud.com/documentation/howtos/kvm-guests-virt-install-examples/
http://linuxguru.ru/virtualization/kvm/ustanovka-virtualizacii-kvm-v-debian-squeeze/
http://forum.likg.org.ua/kvm/setup-serial-console-device-for-virsh-console-centos-t504.html
http://ubuntuforums.org/showthread.php?t=1159220&p=9610421#post9610421
Управління віртуальними машинами може виконуватись через virsh-меню:
# virsh list
# virsh list --all
# virsh dominfo vm
# virsh start vm
# virsh shutdown vm
# virsh console vm
# virsh edit vm
# virsh destroy vm
# virsh undefine vm
# virsh help
Щоб мати можливість вимикати/вмикати віртуальну машину за допомогою virsh-меню необхідно пересвідчитись, що в гостевій операційній системі установлено i запущено acpid.
Посилання:
http://www.howtoforge.com/virtualization-with-kvm-on-ubuntu-12.04-lts-p2
http://sysadminman.net/blog/2011/kvm-virtualization-text-centos-guest-install-2098
http://www.howtoforge.com/installing-kvm-guests-with-virt-install-on-ubuntu-12.04-lts-server-p2
http://opennodecloud.com/documentation/howtos/kvm-guests-virt-install-examples/
http://linuxguru.ru/virtualization/kvm/ustanovka-virtualizacii-kvm-v-debian-squeeze/
http://forum.likg.org.ua/kvm/setup-serial-console-device-for-virsh-console-centos-t504.html
http://ubuntuforums.org/showthread.php?t=1159220&p=9610421#post9610421
Якраз те, що мені потрібно! Дякую :)
ВідповістиВидалити