KVM (или Kernel-based Virtual Machine) — это программное решение, обеспечивающее виртуализацию в среде Linux на платформе x86, которая поддерживает аппаратную виртуализацию на базе Intel VT (Virtualization Technology) либо AMD SVM (Secure Virtual Machine).
Программное обеспечение KVM состоит из загружаемого модуля ядра (называемого kvm.ko), предоставляющего базовый сервис виртуализации, процессорно-специфического загружаемого модуля kvm-amd.ko либо kvm-intel.ko, и компонентов пользовательского режима (модифицированного QEMU).
Сам по себе KVM не выполняет эмуляции. Вместо этого программа, работающая в пространстве пользователя, использует интерфейс /dev/kvm для настройки адресного пространства гостя виртуальной машины, через него же эмулирует устройства ввода-вывода и видеоадаптер.
KVM позволяет виртуальным машинам использовать немодифицированные образы дисков QEMU, VMware и других, содержащие операционные системы. Каждая виртуальная машина имеет своё собственное виртуальное аппаратное обеспечение: сетевые карты, диск, видеокарту и т. д.
Убедимься что наше оборудование поддерживает необходимые расширения виртуализации.
#kvm-ok INFO: /dev/kvm exists KVM acceleration can be used
Установка
Для установки необходимых пакетов введите
#apt-get update #apt-get install kvm libvirt-bin virtinst bridge-utils #apt-get install virt-manager virt-viewer
Настройка VNC для доступа к виртуальным машинам
Для подключения к консоли виртуальной машины используется VNC сервер. Каждая виртуальная машина получает свой порт, начиная с :5900 и будет отвечать на адрес 127.0.0.1:5900, следующая машина на адрес 127.0.0.1:5901 и так далее.
VNC сервер по умолчанию слушает только локальный адрес 127.0.0.1. Чтобы получить доступ к консоли виртуальной машины с другого компьютера надо раскомментировать строку vnc_listen = "0.0.0.0" в файле /etc/libvirt/qemu.conf
Перезапускаем KVM
#service libvirt-bin restart
Теперь можно будет подключаться к консоли виртуальной машины с других компьютеров с помощью VNC клиента Remmina, TightVNC, RealVNC и т.д. указав айпи сервера например: 192.168.1.100:5900
Настройка сетевого моста
Чтобы виртуальная машина могла полноценно работать с сетью, нужно создать мост
Сетевой-мост это устройство используемое для соединения разных сетей между собой так, что эта сеть видится как единая.
отредактируйте файл /etc/network/interfaces
#nano /etc/network/interfaces iface eth0 inet manual auto br0 iface br0 inet static address 192.168.2.100 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameserver 192.168.1.1 bridge_ports eth0 bridge_stp off bridge_fd 0 bridge_maxwait 0
Перезапускаем сеть
#/etc/init.d/networking restart
Командой brctl show посмотрим состояния сетевого моста
Программа brctl предназначена для создания, сопровождения и просмотра конфигурации модуля сетевого-моста "bridge" в ядре Linux.
#brctl show bridge name bridge id STP enabled interfaces br0 8000.f8bc124b0734 no eth0
Создание виртуальной машины
#virt-install --name=webserver --ram=2000 --vcpu=4 --boot=cdrom,hd --disk=path=webserver,size=50,bus=virtio --cdrom=ubuntu-14.04-server-i386.iso --os-type=linux --graphics=vnc,password=0000 --network=bridge:br0,model=virtio --autostart --cpuset=2,4,14,15 --cpu=host --machine=pc-1.1
--name= webserver – Имя для создаваемой машины. Должно быть уникальным.
--ram=2000 – Память (в мегабайтах) выделяемая для машины.
--vcpus=4 – Количество виртуальных процессоров в создаваемой машине.
--cpuset=2,4,14,15 – Задать физические процессоры, которые может использовать виртуальная машина. Нумерация начинаются с нуля, перечисление идет через запятую.
--cdrom=ubuntu-14.04-server-i386.iso - Образ установочного компакт-диска CD-ROM
--os-type=linux - Тип устанавливаемой ОС, например 'linux', 'unix', 'windows'.
--boot=cdrom,hd - Последовательность загрузки CD-ROM,HDD
--disk=path=/home/andy/webserver,size=50,bus=virtio - путь к виртуальному диску, размер диска в гигабайтах, тип виртуального контроллера "virtio,ide"
--cpu=host - Модель ЦПУ и возможности (--cpu=coreduo,x2apic). Узнать возможные типы ЦПУ можно командой
#qemu-system-x86_64 -cpu ? x86 qemu64 QEMU Virtual CPU version 2.0.0 x86 phenom AMD Phenom(tm) 9550 Quad-Core Processor x86 core2duo Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz x86 kvm64 Common KVM processor x86 qemu32 QEMU Virtual CPU version 2.0.0 x86 kvm32 Common 32-bit KVM processor x86 coreduo Genuine Intel(R) CPU T2600 @ 2.16GHz x86 486 x86 pentium x86 pentium2 x86 pentium3 x86 athlon QEMU Virtual CPU version 2.0.0 x86 n270 Intel(R) Atom(TM) CPU N270 @ 1.60GHz x86 Conroe Intel Celeron_4x0 (Conroe/Merom Class Core 2) x86 Penryn Intel Core 2 Duo P9xxx (Penryn Class Core 2) x86 Nehalem Intel Core i7 9xx (Nehalem Class Core i7) x86 Westmere Westmere E56xx/L56xx/X56xx (Nehalem-C) x86 SandyBridge Intel Xeon E312xx (Sandy Bridge) x86 Haswell Intel Core Processor (Haswell) x86 Opteron_G1 AMD Opteron 240 (Gen 1 Class Opteron) x86 Opteron_G2 AMD Opteron 22xx (Gen 2 Class Opteron) x86 Opteron_G3 AMD Opteron 23xx (Gen 3 Class Opteron) x86 Opteron_G4 AMD Opteron 62xx class CPU x86 Opteron_G5 AMD Opteron 63xx class CPU x86 host KVM Процессор со всеми поддерживаемыми функциями ЦПУ хоста (доступна только в режиме KVM) Recognized CPUID flags: pbe ia64 tm ht ss sse2 sse fxsr mmx acpi ds clflush pn pse36 pat cmov mca pge mtrr sep apic cx8 mce pae msr tsc pse de vme fpu hypervisor rdrand f16c avx osxsave xsave aes tsc-deadline popcnt movbe x2apic sse4.2|sse4_2 sse4.1|sse4_1 dca pcid pdcm xtpr cx16 fma cid ssse3 tm2 est smx vmx ds_cpl monitor dtes64 pclmulqdq|pclmuldq pni|sse3 smap adx rdseed rtm invpcid erms bmi2 smep avx2 hle bmi1 fsgsbase 3dnow 3dnowext lm|i64 rdtscp pdpe1gb fxsr_opt|ffxsr mmxext nx|xd syscall perfctr_nb perfctr_core topoext tbm nodeid_msr tce fma4 lwp wdt skinit xop ibs osvw 3dnowprefetch misalignsse sse4a abm cr8legacy extapic svm cmp_legacy lahf_lm pmm-en pmm phe-en phe ace2-en ace2 xcrypt-en xcrypt xstore-en xstore kvm_pv_unhalt kvm_pv_eoi kvm_steal_time kvm_asyncpf kvmclock kvm_mmu kvm_nopiodelay kvmclock pfthreshold pause_filter decodeassists flushbyasid vmcb_clean tsc_scale nrip_save svm_lock lbrv npt
--machine=pc-1.1 - Имитируемый тип машины, получить список типов машин можно командой
#qemu-system-x86_64 -machine ? Supported machines are: pc-0.13 Standard PC (i440FX + PIIX, 1996) pc-i440fx-2.0 Standard PC (i440FX + PIIX, 1996) pc-1.0 Standard PC (i440FX + PIIX, 1996) pc-q35-1.7 Standard PC (Q35 + ICH9, 2009) pc-1.1 Standard PC (i440FX + PIIX, 1996) q35 Standard PC (Q35 + ICH9, 2009) (alias of pc-q35-2.0) pc-q35-2.0 Standard PC (Q35 + ICH9, 2009) pc-i440fx-1.4 Standard PC (i440FX + PIIX, 1996) pc-i440fx-1.5 Standard PC (i440FX + PIIX, 1996) pc-0.14 Standard PC (i440FX + PIIX, 1996) pc-0.15 Standard PC (i440FX + PIIX, 1996) xenfv Xen Fully-virtualized PC pc-q35-1.4 Standard PC (Q35 + ICH9, 2009) isapc ISA-only PC pc-0.10 Standard PC (i440FX + PIIX, 1996) pc Ubuntu 14.04 PC (i440FX + PIIX, 1996) (alias of pc-i440fx-trusty) pc-i440fx-trusty Ubuntu 14.04 PC (i440FX + PIIX, 1996) (default) pc-1.2 Standard PC (i440FX + PIIX, 1996) pc-0.11 Standard PC (i440FX + PIIX, 1996) pc-i440fx-1.7 Standard PC (i440FX + PIIX, 1996) pc-i440fx-1.6 Standard PC (i440FX + PIIX, 1996) none empty machine xenpv Xen Para-virtualized PC pc-q35-1.5 Standard PC (Q35 + ICH9, 2009) pc-q35-1.6 Standard PC (Q35 + ICH9, 2009) pc-0.12 Standard PC (i440FX + PIIX, 1996) pc-1.3 Standard PC (i440FX + PIIX, 1996)
--graphics=vnc,password=0000 - VNC доступ к виртуальной машине. Если параметр port=PORT NUMBER” не определен, то будет назначен первый свободный порт после 5900. Узнать инормацию о запущенном vnc-дисплее можно посредством “virsh vncdisplay”.
--network=bridge:br0,model=virtio - Подключиться к сетевому мосту "br0", модель сетевого контроллера, возможные значения можно узнать, введя команду
#qemu-system-x86_64 -device ? ... Network devices: name "e1000", bus PCI, desc "Intel Gigabit Ethernet" name "i82550", bus PCI, desc "Intel i82550 Ethernet" name "i82551", bus PCI, desc "Intel i82551 Ethernet" name "i82557a", bus PCI, desc "Intel i82557A Ethernet" name "i82557b", bus PCI, desc "Intel i82557B Ethernet" name "i82557c", bus PCI, desc "Intel i82557C Ethernet" name "i82558a", bus PCI, desc "Intel i82558A Ethernet" name "i82558b", bus PCI, desc "Intel i82558B Ethernet" name "i82559a", bus PCI, desc "Intel i82559A Ethernet" name "i82559b", bus PCI, desc "Intel i82559B Ethernet" name "i82559c", bus PCI, desc "Intel i82559C Ethernet" name "i82559er", bus PCI, desc "Intel i82559ER Ethernet" name "i82562", bus PCI, desc "Intel i82562 Ethernet" name "i82801", bus PCI, desc "Intel i82801 Ethernet" name "ne2k_isa", bus ISA name "ne2k_pci", bus PCI name "pcnet", bus PCI name "rtl8139", bus PCI name "usb-bt-dongle", bus usb-bus name "usb-net", bus usb-bus name "virtio-net-device", bus virtio-bus name "virtio-net-pci", bus PCI, alias "virtio-net" name "vmxnet3", bus PCI, desc "VMWare Paravirtualized Ethernet v3" ...
С таким соединением гостевая машина имеет полноценное соединение с внешней сетью. Может создавать исходящие соединения и принимать входящие.
--autostart - автозапуск виртуальной машины при старте хоста.
Управление виртуальными машинами
Получить список запущенных виртуальных машин:
#virsh -c qemu:///system list
Запустить виртуальную машину:
#virsh -c qemu:///system start webserver
Перегрузить виртуальную машину:
#virsh -c qemu:///system reboot webserver
Принудительно перезагрузить виртуальную машину:
#virsh -c qemu:///system reset webserver
Выключить виртуальную машину:
#virsh -c qemu:///system shutdown webserver
Принудительно выключить виртуальную машину:
#virsh -c qemu:///system destroy webserver
Подключение образа компакт-диска:
#virsh attach-disk svhs /home/andy/windows2003r2.iso hdc --type cdrom --mode readonly
Извлечение образа:
#virsh change-media webserver hdc --eject