Установка KVM на Ubuntu 20.04

Материал из sysadm
Перейти к навигации Перейти к поиску

Подготовка

Проверка поддержки виртуализации (Intel-VT или AMD-V) , если что то нет так, то включите виртуализацию в UEFI/BIOS

lscpu | grep Виртуализация

# проверяем наличие флага vmx или svm
lscpu | grep -E 'vmx|svm'

apt install cpu-checker
kvm-ok
 INFO: /dev/kvm exists
 KVM acceleration can be used

Установка

apt install qemu qemu-kvm libvirt-daemon libvirt-daemon-system libvirt-clients bridge-utils libosinfo-bin virtinst

# Если установлена графическая оболочка, то можно дополнительно установить GUI
apt install virt-manager

# проверка модулей ядра
lsmod | grep -i kvm
 kvm_intel             286720  0
 kvm                   712704  1 kvm_intel

# проверка сервисов
systemctl status libvirtd
systemctl status qemu-kvm

# проверка подключения к libvirtd
virsh sysinfo

Проверьте, что ваш пользователь включен в группу libvirt

# вывод списка групп
id -nG <пользоватль>

Создание пула хранилища

# все выполняется под root-ом
sudo su
chown -R root:root /path/to/KVM-Store
chmod 711 /path/to/KVM-Store
chmod 600 /path/to/KVM-Store/*

virsh pool-define-as KVM-Store dir - - - - "/path/to/KVM-Store"
virsh pool-build KVM-Store
virsh pool-start KVM-Store
virsh pool-autostart KVM-Store
virsh pool-list --all
virsh pool-info KVM-Store

Настройка хранилища ISO образов

chown -R sysop:libvirt-qemu "/path/to/KVM-ISO"
chmod -R 755 "/path/to/KVM-ISO"

Настройка сети

Желательно иметь не менее двух сетевых интерфейсов. Один сетевой интерфейс оставляем физическому серверу и не связываем с ним никаких виртуальных сетей. Остальные сетевые интерфейсы связываем с виртуальными сетями KVM. Если требуется разделение на VLAN-ы, то на физическом сервере создайте подчиненные интерфейсы связанные с нужными VLAN-ами и связывайте с ними соответствующие виртуальные сети KVM. Примечание: Настройка в рамках одного сетевого интерфейса возможна, но она более сложна и может иметь ряд проблем или особенностей, поэтому здесь мы этот вариант не рассматриваем.

Ссылки по теме

# проверьте что запущен сетевой менеджер
systemctl status NetworkManager

# управление сетевыми интерфейсами осуществляется через утилиту nmcli
# проверка статуса
nmcli general status

# показать имя хоста
nmcli general hostname

# список интерфейсов и их статус
nmcli device status

# список доступных подключений
nmcli connection show

# свойства подключения
nmcli connection show "Проводное соединение 1"

# выключить/отключить подключение
nmcli connection down "Проводное соединение 1"
nmcli connection up "Проводное соединение 1"

# команды можно сокращать
nmcli conn up "Проводное соединение 1"

# создание подключения с включенным DHCP
nmcli connection add con-name "LAN" ifname enp24s0 type ethernet

# создание подключения со статическим IP
nmcli connection add con-name "LAN" ifname enp2s0 type ethernet autoconnect no ip4 192.168.0.210 gw4 192.168.0.1

nmcli conn modify "LAN" ipv4.dns 8.8.8.8
nmcli conn modify "LAN" +ipv4.dns 8.8.4.4
nmcli conn modify "LAN" +ipv4.addresses 192.168.0.240/24

Создание виртуальной сети связанной с нужным сетевым интерфейсом

Если вы используете выделенный под KVM интерфейс, то желательно на нем отключить IPv4 и IPv6. Если используется интерфейс хоста, то необходимо иметь ввиду, что в данном случае хост и гостевая машина не будут видеть друг друга по сети.

Создайте файл конфигурации сети KVM-имя_интерфейса.xml

<network>
  <name>KVM-имя_интерфейса</name>
  <forward mode='bridge'>
    <interface dev='имя_интерфейса'/>
  </forward>
</network>

Создайте виртуальную сеть

virsh net-define KVM-имя_интерфейса.xml
virsh net-autostart KVM-имя_интерфейса
virsh net-start KVM-имя_интерфейса

# проверьте список виртуальных сетей
virsh net-list --all

После манипуляций с интерфейсами и виртуальными сетями желательно перегрузить сеть и KVM

# остановите все гостевые машины
virsh list
virsh shutdown <вирт.машина>

# жесткий вариант остановки
virsh destroy <вирт.машина>

# перегрузите сеть
systemctl restart network

# перегрузите libvirtd
systemctl restart libvirtd
Создание подчиненного сетевого интерфейса с привязкой к VLAN
nmtui

Добавить
VLAN
Имя профиля:  [<имя_интерфейса>-vlan<номер>]
Устройство:   [<имя_интерфейса>.<номер>]
Родительский: [<имя_интерфейса>]
VLAN ID:      [<номер>]

Конфигурация IPv4 <Отключено>
Конфигурация IPv6 <Игнорировать>

Создание виртуальной машины

Создание виртуальной машины

virt-install \
   --network network=<KVM_сеть1>,model=virtio \
   ...
   --network network=<KVM_сетьN>,model=virtio \
   --name <имя_машины> \
   --ram=<память_МБ> \
   --vcpus=<кол-во_CPU> \
   --disk path='<путь_к_файлу_диска>',size=<размер_ГБ>,format=qcow2,bus=virtio \
   --os-variant <тип_ОС> \
   --graphics spice,password=<пароль> \
   --cdrom '<путь_к_iso_образу_установки>' \
   --boot hd,cdrom,menu=on

Для определения типа ОС, используйте команду

osinfo-query os
win10                | Microsoft Windows 10
win2k19              | Microsoft Windows Server 2019
win2k16              | Microsoft Windows Server 2016
win2k12r2            | Windows Server 2012 R2
win2k8r2             | Microsoft Windows Server 2008 R2
ubuntu20.04          | Ubuntu 20.04
debian10             | Debian 10
centos8              | CentOS 8
freebsd11.1          | pfsense (нужно уточнять, pfsense периодически обновляет базовую ОС)

Добавление сетевого интерфейса к уже созданной виртуальной машине

virsh edit <имя_машины>
добавьте в соответствующий раздел, остальные параметры будут назначены автоматически.

    <interface type='network'>
      <source network='имя_KVM_сети'/>
      <model type='virtio'/>
    </interface>

virsh attach-interface gate2 network KVM-eno4 --model virtio --persistent

# отключить интерфейс от работающей машины нельзя
# можно только убрать из конфигурации и перегрузить
virsh domiflist gate2
virsh detach-interface gate2 network --mac 52:54:00:a1:40:22 --config

Драйвера для гостевых систем

Описанное ниже относится к CentOS, нужно переделать под Ubuntu

Дополнительную информацию смотрите по ссылке https://fedoraproject.org/wiki/Windows_Virtio_Drivers

# добавлен репозиторий с virtio драйверами для гостевых Windows
wget https://fedorapeople.org/groups/virt/virtio-win/virtio-win.repo -O /etc/yum.repos.d/virtio-win.repo
yum install virtio-win

Данный пакет содержит драйвера в следующем виде
/usr/share/virtio-win/*.iso: ISO CDROM containing all the drivers. See details below
/usr/share/virtio-win/*.vfd: VFD floppy images for using during install of Windows XP
/usr/share/virtio-win/drivers: Copy of the extracted VFD driver contents
/usr/share/guest-agent/*.msi: QEMU Guest Agent 32bit and 64bit MSI installers

Для установки драйверов в гостевой Windows, необходимо подключить актуальный образ с драйверами
/usr/share/virtio-win/virtio-win.iso