KVM (Kernel-based Virtual Machine) – гіпервизор (VMM – Virtual Machine Manager) , работающий в виде модуля (званого kvm.ko) на ОС Linux. KVM — програмне рішення, що забезпечує віртуалізацію в середовищі Linux на платформі x86, яка підтримує апаратну віртуалізацію на базі Intel VT (Virtualization Technology) або AMD SVM (Secure Virtual Machine). Компонент ядра, необхідний для роботи KVM, включений в основну гілку Linux починаючи з версії 2.6.20 (лютий 2007). На KVM заснована Red Hat Enterprise Virtualization (RHEV), промислова платформа для організації управління інфраструктурою віртуалізації від компанії Red Hat.
Програмне забезпечення KVM складається з завантажувального модуля ядра (званого kvm.ko), що надає базовий сервіс віртуалізації, процесорно-специфічного завантажувального модуля kvm-amd.ko або kvm-intel.ko, і компонентів для режиму користувача (модифікованого QEMU).
Сам по собі KVM не виконує емуляції. Замість цього програма, що працює в просторі користувача (userspace), використовує інтерфейс /dev/kvm для налаштування адресного простору гостя віртуальної машини, через нього ж емулює пристрої вводу-виводу і відеоадаптер.
KVM дозволяє віртуальним машинам використовувати немодифіковані образи дисків QEMU, VMware та інших, що містять операційні системи. Кожна віртуальна машина має своє власне віртуальне апаратне забезпечення: мережеві карти, диск, відеокарту тощо.
Гипервизор нужен для того, чтобы запускать некий софт в несуществующей (виртуальной) среде и при этом, скрывать от этого софта реальное физическое железо, на котором этот софт работает. Гипервизор работает в роли «прокладки» между физическим железом (хостом) и виртуальной ОС (гостем).
Поскольку KVM является стандартным модулем ядра Linux, он получает от ядра все положенные ништяки (работа с памятью, планировщик и пр.). А соответственно, в конечном итоге, все эти преимущества достаются и гостям (т.к. гости работают на гипервизоре, которые работает на/в ядре ОС Linux).
KVM очень быстрый, но его самого по себе недостаточно для запуска виртуальной ОС, т.к. для этого нужна эмуляция I/O. Для I/O (процессор, диски, сеть, видео, PCI, USB, серийные порты и т.д.) KVM использует QEMU.
QEMU (Quick Emulator) – эмулятор различных устройств, который позволяет запускать операционные системы, предназначенные под одну архитектуру, на другой (например, ARM –> x86). Кроме процессора, QEMU эмулирует различные периферийные устройства: сетевые карты, HDD, видео карты, PCI, USB и пр.
Работает это так: Инструкции/бинарный код (например, ARM) конвертируются в промежуточный платформонезависимый код при помощи конвертера TCG (Tiny Code Generator) и затем этот платформонезависимый бинарный код конвертируется уже в целевые инструкции/код (например, x86).
ARM –> промежуточный_код –> x86
По сути, вы можете запускать виртуальные машины на QEMU на любом хосте, даже со старыми моделями процессоров, не поддерживающими Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). Однако в таком случае, это будет работать весьма медленно, в связи с тем, что исполняемый бинарный код нужно перекомпилировать на лету два раза, при помощи TCG (TCG – это Just-in-Time compiler).
Отже:
Крок 1: Перевірка підтримки віртуалізації апаратними засобами в Ubuntu
Перед встановленням KVM в Ubuntu перевіримо чи підтримується обладнанням KVM в системі. Мінімальними парметрами може бути наявність розширення для CPU, а саме для процесорів AMD активна технологія AMD SVM (модуль kvm_amd) та процесорів Intel активована технологія Intel-VT (модуль kvm_intel)
Щоб перевірити чи підтримується системою віртуалізація необхідно виконати наступну команду:
$ egrep -c '(vmx|svm)' /proc/cpuinfo
8
Результат більше 0 говорить про те що віртуалізація підтримується.
Чтобы проверить, поддерживает ли ваша система виртуализацию KVM, выполните команду kvm-ok (Если утилита «kvm-ok» отсутствует на вашем устройстве, установите её, выполнив команду apt):
$ sudo apt install cpu-checker
$ kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used
Крок 2: Установка KVM в Ubuntu
Список необхідного програмного забезпечення:
qemu - забезпечує апаратну віртуалізацію
qemu-kvm - основний пакет KVM
libvirt-daemon - демон віртуалізації
libvirt-daemon-system
libvirt-clients -
bridge-utils - дозволяє створювати bridge віртуальні зєднання, щоб дозволити іншим користувачам отримувати доступ до віртуальної машини ззовні host системи.
virt-manager - утиліта для керування віртуальними машинами через графічний інтерфейс користувача
$ sudo apt install -y qemu qemu-kvm libvirt-daemon libvirt-clients bridge-utils virt-manager
Також можна встановити інші допоміжні інструменти:
virt-top
libguestfs-tools
libosinfo-bin
qemu-system
Після інсталяції перевірити чи завантажений модуль vhost_net:
$ sudo modprobe vhost_net
$ lsmod | grep vhost
цей модель надасть інструменти, аналогічні Linux ls, cat, top command для використання з віртуальними машинами
Де і що прийнято зберігати:
/var/lib/libvirt/boot/ — ISO-образи для інсталяції гостьових систем;
/var/lib/libvirt/images/ — образы жорстких дисків гостьових систем;
/var/log/libvirt/ — логи;
/etc/libvirt/ — каталог з файлами конфігурації;
Після інсталяції утиліт спершу перевіряємо чи активний демон віртуалізації:
$ sudo systemctl status libvirtd
Можна включити його в автозапуск разом із системою:
$ sudo systemctl enable --now libvirtd
Перевіряю чи завантажений модуль KVM:
$ lsmod | grep -i kvm