KVM — это модуль ядра Linux, и для работы с KVM модуль должен быть установлен и загружен в ядро Linux.
Модуль обычно называется kvm, но для процессоров Intel он называется kvm_intel, а для процессоров AMD — kvm_amd.
Ядро Linux будет изолировать созданную виртуальную машину памяти и процессора в процесс, как отдельную систему.
Особенности KVM
Виртуализация KVM предоставляет следующие функции в процессе виртуализации.
- Безопасность: KVM использует комбинацию SELinux и sVirt для защиты и изоляции виртуальных машин.
- Хранение: KVM может использовать локальные или связанные с NAS технологии хранения с различными файловыми системами. На диске ВМ хранится один или несколько файлов со снимками, резервными копиями.
- Аппаратное обеспечение: KVM может использовать самые разные аппаратные средства, поддерживаемые Linux, такие как USB, принтер, PCI-устройства и т. Д.
- Память: KVM наследует функции управления памятью в Linux, включая неравномерный доступ к памяти и слияние страниц на одном ядре.
- Живая миграция: KVM поддерживает живую миграцию с одного хоста виртуализации на другой хост без прерывания обслуживания.
Проверим что процессор поддерживает квм
[root@kvm ~]# lsmod | grep kvm
kvm_intel 188688 0
kvm 636931 1 kvm_intel
irqbypass 13503 1 kvm
Отключите и остановите NetworkManager
Известно, что NetworkManager вызывает проблемы при работе с Linux Bridge, поэтому для нас лучше отключить его:
1 2 |
# systemctl stop NetworkManager # systemctl disable NetworkManager |
Установите пакеты, связанные с KVM
1 |
# yum install qemu-kvm qemu-img libvirt libvirt-python libvirt-client virt-install virt-viewer virt-manager |
1 |
yum install "@X Window System" xorg-x11-xauth xorg-x11-fonts-* xorg-x11-utils -y |
Запустите и включите демон libvirtd
1 2 |
# systemctl enable libvirtd # systemctl start libvirtd |
Установите общесистемные привилегии для KVM
Нам нужно добавить нашего обычного пользователя mid в группу kvm, чтобы он мог запустить virt-manager
1 |
# usermod -a -G kvm mid |
Нам также необходимо установить правила polkit (policy kit) для KVM.
Редактируем файл 49-polkit-pkla-compat.rules:
1 |
# vim /etc/polkit-1/rules.d/49-polkit-pkla-compat.rules |
и добавьте следующее:
[codesyntax lang="php"]
1 2 3 4 5 6 |
polkit.addRule(function(action, subject) { if (action.id == "org.libvirt.unix.manage" && subject.isInGroup("kvm")) { return polkit.Result.YES; } }); |
[/codesyntax]
Создайте мост KVM Linux Bridge (модемный сетевой интерфейс гипервизора KVM с сетевыми интерфейсами VM)
В этом примере необходимо чтобы виртуальные машины получали свои IP-адреса из той же сети, где подключен хост KVM Hypervisor, поэтому мы подключим его основной сетевой интерфейс (enp0s3) к сетевым интерфейсам VM.
Для этого нам нужно создать Linux Bridge из интерфейса enp0s3 на хосте KVM Hypervisor.
Текущая конфигурация сети Hypervisor (сразу после установки KVM):
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[root@kvm ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:c7:4d:8d brd ff:ff:ff:ff:ff:ff inet 192.168.1.171/24 brd 192.168.1.255 scope global noprefixroute enp0s3 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fec7:4d8d/64 scope link valid_lft forever preferred_lft forever 3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000 link/ether 52:54:00:7c:7d:3d brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0 valid_lft forever preferred_lft forever 4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000 link/ether 52:54:00:7c:7d:3d brd ff:ff:ff:ff:ff:ff |
[/codesyntax]
Интерфейс virbr0 был создан автоматически вместе с установкой KVM и представляет виртуальную сеть, существующую «внутри» среды KVM с NAT (трансляция сетевых адресов).
Поскольку мы не нуждаемся в NAT в среде KVM (мы хотим скрыть интерфейс Hypervisor), мы можем удалить существующую виртуальную сеть KVM на основе интерфейса virbr0.
Для настройки сети KVM мы будем использовать приложение virt-manager, которое является удобным интерфейсом GUI для интерфейса командной строки KVM.
для этого ставим на винде xming
а в putty правим настройки:
Запустите virt-manager от пользователя root:
1 |
# virt-manager |
… должно появиться окно virt-manager:
Правый щелчок на QEMU/KVM -> Details -> Virtual Networks -> Disable network: “default” -> Delete network: “default” based on virbr0
Теперь мы можем подключить интерфейс Hypervisor KVM (em1):
Щелкните правой кнопкой мыши:QEMU/KVM -> Details -> Network Interfaces -> Add Interface:
- Interface type: Bridge
- Interface name: br-em1
- Start mode: on boot
- Activate now: enabled
- IP settings: copy configuration from ’em1′
- Bridge settings: STP on, delay 0.00 sec
… нажмите Finish, чтобы переопределить существующую конфигурацию и создать KVM Linux Bridge.
Теперь мы можем проверить вновь созданный Linux Bridge (br-em1):
теперь IP назначается br-em1, а em1 действует теперь только как интерфейс):
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[root@kvm ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br1-enp0s3 state UP group default qlen 1000 link/ether 08:00:27:c7:4d:8d brd ff:ff:ff:ff:ff:ff 5: br1-enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 08:00:27:c7:4d:8d brd ff:ff:ff:ff:ff:ff inet 192.168.1.171/24 brd 192.168.1.255 scope global br1-enp0s3 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fec7:4d8d/64 scope link valid_lft forever preferred_lft forever |
[/codesyntax]
Проверьте настройку моста:
1 2 3 |
[root@kvm ~]# <strong>brctl show</strong> bridge name bridge id STP enabled interfaces br1-enp0s3 8000.080027c74d8d yes enp0s3 |
Теперь KVM Linux мост настроен
Создаём новую виртуальную машину:
копируем на наш сервер образ системы:
[root@kvm ~]# ls -l /var/CentOS-7-x86_64-Minimal-1511.iso
-rw-r--r-- 1 root root 632291328 Dec 9 2016 /var/CentOS-7-x86_64-Minimal-1511.iso
всё дальше ставим как обычную систему