Установка и настройка KVM в Ubuntu

Сложно себе представить в наше время физический сервер без установленной на нем той или иной системы виртуализации. Я расскажу, как установить и настроить популярный гипервизор kvm на сервер под управлением Ubuntu. Это решение является open source, так что можно свободно использовать где угодно.

Что такое KVM?

KVM (Kernel-based Virtual Machine) — гипервизор виртуальных машин для Linux. Не стоит его путать с системами контейнеризации, такими как докер или lxc. Это принципиально разные вещи. Гипервизор дает полную изоляцию рабочего окружения, в том числе и железа. Находясь в виртуальной машине, вы имеете в своем распоряжении полноценную операционную систему, принадлежащую только вам.

Существует несколько популярных гипервизоров, как бесплатных, так и за деньги. KVM является полностью бесплатным решением, которое очень активно используют хостеры, в том числе предоставляющие услуги облачных технологий. Так же есть неплохая реализация полноценного гипервизора kvm с интерфейсом управления — proxmox. Это готовый продукт на базе дистрибутива дебиан.

Я сегодня не буду рассматривать готовые сборки гипервизоров, а вручную установлю на Ubuntu Server нативный гипервизор KVM с минимальными надстройками над ним. У нас на выходе будет сам гипервизор, локальная сеть для его корректной работы и средства управления гипервизором и виртуальными машинами. Если вам интересно, почему мой выбор пал на именно на убунту, читайте мой обзор этой системы, а так же статью про установку ubuntu.

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

Прежде чем начать установку гипервизора KVM в Ubuntu, проверим, поддерживает ли наш процессор виртуализацию. Для этого существует утилита kvm-ok. Если у вас нет ее в системе, установите пакет, который ее содержит.

sudo apt install cpu-checker
sudo kmv-ok

Если ваш процессор не поддерживает виртуализацию, то получите сообщение:

INFO: Your CPU does not support KVM extensions
KVM acceleration can NOT be used

Если же все ОК, то информация будет следующая.

Проверка виртуализации процессора

В этом случае можно приступать к установке виртуализации kvm.

sudo apt install qemu qemu-kvm libvirt-daemon-system virtinst libosinfo-bin

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

Я устанавливаю следующие компоненты kvm:

  1. qemu и qemu-kvm — сам гипервизор
  2. libvirt-daemon-system и virtinst — утилиты для управления гипервизором и виртуальными машинами
  3. libosinfo-bin — пакет с информацией о поддержки гипервизорами различных операционных систем.

Запустим и добавим в автозагрузку сервис управления kvm:

sudo systemctl enable --now libvirtd

В целом, все. Установка KVM на Ubuntu на этом и заканчивается. Можно проверить, загрузились ли у вас модули ядра kvm.

sudo lsmod | grep -i kvm
kvm_intel 282624 0
kvm 663552 1 kvm_intel

Все в порядке, гипервизор kvm готов к работе.

Сетевой Bridge для kvm

Настройка сети для виртуальных машин kvm может быть настроена различными способами. Я как минимум 3 наиболее популярных знаю:

  1. Виртуальные машины выходят во внешний мир через сам хост kvm, на котором настроен NAT. Этот вариант вам будет доступен сразу после установки kvm. Ничего дополнительно настраивать не надо, так как сетевой бридж для этого virbr0 уже будет добавлен в систему. А в правилах iptables будет добавлен MASQUERADE для NAT.
  2. Одна из виртуальных машин превращается в шлюз и через нее осуществляется доступ во внешний мир для всех виртуальных машин. Наиболее гибкий способ управления сетью для vm, но в то же время требует больше времени на настройку и набор знаний по работе с сетями.
  3. Для виртуальных машин kvm создается отдельный сетевой бридж во внешнюю сеть. Они напрямую получают в нее сетевой доступ.

Последний вариант наиболее простой и удобный, поэтому настроим сеть для виртуальных машин таким образом. Для этого нам нужно установить дополнительный пакет на host.

sudo apt install bridge-utils

Настройка Bridge для kvm

Теперь на хосте приводим сетевые настройки в /etc/netplan к следующему виду.

network:
  ethernets:
    ens18:
      dhcp4: false
      dhcp6: false
  version: 2

  bridges:
    br0:
      macaddress: 16:76:1a:3b:be:03
      interfaces:
        - ens18
      dhcp4: true
      dhcp6: false
      parameters:
        stp: true
        forward-delay: 4

Здесь будьте очень внимательны. Не выполняйте изменения сетевых настроек, не имея прямого доступа к консоли сервера. Очень высок шанс того, что что-то пойдет не так и вы потеряете удаленный доступ к серверу.

В предложенном наборе правил netplan у меня один сетевой интерфейс на хосте гипервизора — ens18. Он изначально получал настройки по dhcp. Мы добавили новый сетевой бридж br0, в него добавили интерфейс ens18. Так же мы указали, что br0 будет получать сетевые настройки по dhcp. Я указал mac адрес для того, чтобы он не менялся после перезагрузки. Такое может происходить. Адрес можно указать любой, не принципиально. Я сделал похожий на адрес физического сетевого интерфейса.

Теперь надо применить новые настройки.

sudo netplan apply

Сразу после этого вы потеряете доступ к серверу по старому адресу. Интерфейс ens18 перейдет в состав bridge br0 и потеряет свои настройки. А в это время бридж br0 получит новые сетевые настройки по dhcp. IP адрес будет отличаться от того, что был перед этим на интерфейсе ens18. Чтобы снова подключиться удаленно к гипервизору kvm, вам надо будет пойти на dhcp сервер и посмотреть, какой новый ip адрес ему назначен.

Если у вас нет dhcp сервера или вы просто желаете вручную указать сетевые настройки, то сделать это можно следующим образом.

network:
  ethernets:
    ens18:
      dhcp4: false
      dhcp6: false
  version: 2

  bridges:
    br0:
      macaddress: 16:76:1a:3b:be:03
      interfaces:
        - ens18
      addresses:
        - 192.168.25.2/24
      gateway4: 192.168.25.1
      nameservers:
        addresses:
          - 192.168.25.1
          - 77.88.8.1
      dhcp4: false
      dhcp6: false
      parameters:
        stp: true
        forward-delay: 4

В этом случае после применения новых настроек, гипервизор kvm будет доступен по адресу 192.168.25.2.

Обращайте внимание на все отступы в конфигурационном файле netplan. Они важны. В случае ошибок, настройки сети применены не будут. Иногда эта тема очень напрягает, так как не получается сразу понять, где именно в отступах ошибка. В этом плане yaml файл для настроек сети гипервизора как-то не очень удобен.

Далее еще один важный момент. Чтобы наш kvm хост мог осуществлять транзит пакетов через себя, надо это явно разрешить в sysctl. Добавляем в /etc/sysctl.d/99-sysctl.conf новый параметр. Он там уже есть, надо только снять пометку комментария.

net.ipv4.ip_forward=1

Применяем новую настройку ядра.

sudo sysctl -p /etc/sysctl.d/99-sysctl.conf
net.ipv4.ip_forward = 1

С настройкой сети гипервизора мы закончили. На данном этапе я рекомендую перезагрузить сервер и убедиться, что все настройки корректно восстанавливаются после перезагрузки.

Настройка KVM в Ubuntu Server

В целом, какой-то особенной настройки для гипервизора kvm после установки делать не нужно. Я обычно выношу в отдельные директории диски виртуальных машин и iso образы. Например, в /mnt/kvm. Это позволяет подмонтировать туда любые внешние хранилища, если будет такая необходимость.

# mkdir -p /mnt/kvm/{disk,iso}

Теперь при создании виртуальных машин можно указывать эти директории.

В рамках настройки kvm сервера, рекомендую сразу же указать нужный часовой пояс и установить софт для автоматического обновления времени сервера. Это важно, так как гостевые виртуальные системы будут синхронизировать время с хостом.

sudo timedatectl set-timezone Europe/Moscow
sudo apt install chrony
sudo systemctl enable --now chrony

Настройка KVM

kvm passthrough

Гипервизор KVM поддерживает так называемый проброс оборудования в виртуальную машину. Называется эта технология passthrough. Для того, чтобы это было возможно, ваше железо должно поддерживать технологию IOMMU. С ее помощью можно, к примеру, пробросить в виртуальную машину видеокарту.

У этой технологии очень много нюансов, так что в рамках данной статьи я не буду ее рассматривать и приводить примеры. У меня под рукой нет подходящего железа, а показывать непроверенные конфиги мне не хочется. Рассказываю об этом, просто чтобы вы знали о существовании такой возможности.

port forwarding

Если вы не создаете свой отдельный сетевой бридж для виртуальных машин, с помощью которого они будут автоматически попадать во внешнюю сеть, вам необходимо будет пробрасывать порты внутрь виртуалок. Я считаю это не очень удобным, поэтому выше и описал способ сразу вывести виртуальную машину во внешнюю сеть. Но если вам по каким-то причинам не хочется это делать и вы остаетесь на дефолтной настройке сети в kvm, то вам придется с помощью iptables делать проброс портов. Это не очень сложно, если вы умеете работать с iptables. Если же нет, то это может стать проблемой.

В рамках данной статьи я тоже не буду рассматривать этот вопрос, так как iptables отдельная большая тема. Просто знайте, что проброс портов в виртуальную машину это обычная настройка iptables. Приведу только один пример, как с помощью iptables пробросить порт ssh для одной из виртуальных машин.

iptables -I FORWARD -o virbr0 -d 192.168.122.11 -j ACCEPT 
iptables -t nat -I PREROUTING -p tcp --dport 22122 -j DNAT --to 192.168.122.11:22

В этом примере я пробросил внешний tcp порт 22122 хоста в виртуальную машину 192.168.122.11, порт 22. В данном случае virbr0 дефолтный бридж, который был автоматически создан при установке kvm на хост.

Основные команды KVM

Для дальнейшей работы с гипервизором kvm нам необходимо познакомиться с основными командами управления.

Просмотр всех виртуальных машин:

virsh list --all

Запустить неактивную виртуальную машину:

virsh start vm

Выключить vm штатно через возможности ОС:

virsh shutdown vm

Мгновенная остановка виртуальной машины. Например, если она зависла.

virsh destroy vm

Информация о дисках vm:

virsh domblklist vm

Посмотреть информацию о vm:

virsh dominfo vm

Краткая информация о хосте гипервизора kvm:

virsh nodeinfo

Информация о файле образа диска vm:

qemu-img info disk1.qcow2

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

Давайте теперь создадим и запустим нашу первую виртуальную машину на гипервизоре kvm. Для этого нам достаточно только консоли системы ubuntu и команды virt-install. Но перед тем, как создать саму машину, сделаем для нее диск в формате qcow2.

sudo qemu-img create -f qcow2 -o preallocation=metadata /mnt/kvm/disk/vmserver01-disk1.qcow2 10G
Formatting '/mnt/kvm/disk/vmserver01-disk1.qcow2', fmt=qcow2 size=3221225472 cluster_size=65536 preallocation=metadata lazy_refcounts=off refcount_bits=16

Отлично, теперь создаем виртуальную машину для гипервизора kvm:

sudo virt-install -n vmserver01 \
--noautoconsole \
--vcpus=1 --cpu host --check-cpu \
--ram 1024 --arch=x86_64 \
--network=bridge:br0 \
--cdrom /mnt/kvm/iso/ubuntu-20.04.1-live-server-amd64.iso \
--disk path=/mnt/kvm/disk/vmserver01-disk1.qcow2 \
--graphics vnc,listen=0.0.0.0,password=parol \
--os-type linux --os-variant=ubuntu20.04 --boot cdrom,hd,menu=on

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

Я получил предупреждение о том, что слишком мало выделил оперативной памяти для виртуальной машины Ubuntu20.04

WARNING Requested memory 1024 MiB is less than the recommended 2048 MiB for OS ubuntu20.04

На самом деле это не страшно. Для минимальной конфигурации хватит и таких ресурсов. Рассмотрим теперь подробно параметры, которые я указал при создании vm.

noautoconsole параметр указывает на то, что не надо подключаться к консоли vm. Мы и не сможем это сделать, так как на сервере не установлено графическое окружение
vcpus, cpu, check-cpu параметры cpu — количество виртуальных процессоров и их описание. В моем примере один процессор, а описание берется с хоста.
ram объем оперативной памяти для новой виртуальной машины
arch тип архитектуры
network параметры сети. В данном случае подключаем к виртуальной машине созданный ранее сетевой бридж в локальную сеть.
cdrom указываем образ диска, с которого будет выполняться установка системы
disk путь к диску, который мы создали ранее для виртуальной машины
graphics параметры подключения к консоли виртуальной машины. В данном случае подключение будет возможно по vnc с паролем parol.
os-type, os-variant тип операционной системы на новосозданной виртуальной машине
boot параметры загрузки системы. Сначала грузимся с cd, потом с диска.

После создания и запуска виртуальной машины, можно подключиться к ее консоли. Для этого надо узнать, к какому порту VNC осуществлять подключение. Запускаем в консоли гипервизора команду:

virsh vncdisplay vmserver01
:0

Вывод :0 означает, что нет отступа от дефолтного порта vnc 5900. Если бы в выводе было :1, значит подключаться нужно было бы к порту 5901. В нашем случае подключаемся через любой vnc клиент к ip адресу гипервизора по порту 5900.

Подключение к консоли виртуальной машины

Вводим пароль, который указали при создании VM. Если вы его забыли, то можно подсмотреть в конфигурационном файле виртуальной машины. Он находится тут — /etc/libvirt/qemu/vmserver01.xml.

Пароль для доступа по vnc

После подключения к консоли виртуальной машины, увидим традиционный установщик Ubuntu.

Консоль виртуальной машины с ubuntu в kvm

Можно продолжать установку непосредственно системы внутри vm. На этом установку новой виртуальной машины в kvm закончим. Рассмотрим дополнительно некоторые важные параметры, касающиеся управления.

Автозапуск виртуальной машины

Для того, что виртуальная машина kvm автоматически запускалась при старте гипервизора, можно явно это указать в самом начале. Во время создания vm надо добавить параметр autostart примерно так:

sudo virt-install -n vmserver01 --autostart --noautoconsole --vcpus=1...........

Если не сделали это сразу, не беда. За автозапуск виртуальных машин в kvm отвечает наличие символьной ссылки на конфигурацию vm в соответствующей директории — /etc/libvirt/qemu/autostart. Так что просто создайте ее.

sudo ln -s /etc/libvirt/qemu/vmserver01.xml /etc/libvirt/qemu/autostart

Либо воспользуйтесь встроенной командой:

sudo virsh autostart vmserver01

После этого виртуальная машина vmserver01 будет автоматически запускаться после перезагрузки хоста kvm.

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

Теперь рассмотрим ситуацию, когда вам надо удалить виртуальную машину в kvm, используя только консоль. Сделать это не сложно. Для начала посмотрим на список всех виртуальных машин хоста:

sudo virsh list --all
Id Name State
----------------------------
2 vmserver01 running

Останавливаем виртуальную машину vmserver01:

sudo virsh shutdown vmserver01

Это команда для штатного выключения через операционную систему виртуальной машины. Если в ней не установлены средства интеграции с гипервизором, то она не сработает. В этом случае нужно либо через саму виртуальную машину сделать завершение работы, либо остановить ее принудительно в гипервизоре:

sudo virsh destroy vmserver01

Теперь уже виртуальную машину можно удалить:

sudo virsh undefine vmserver01

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

Эта команда по сути просто удаляет конфигурацию vm из директории /etc/libvirt/qemu. Для полного удаления виртуальной машины вам необходимо отдельно удалить ее диск. Сделайте это вручную сами  в зависимости от того, где располагался диск. Если это был обычный qcow2 или raw файл, то удалите его командой rm.

sudo rm /mnt/kvm/disk/vmserver01-disk1.qcow2

Будьте внимательны с именем файла. Не удалите случайно диск от другой виртуальной машины.

Увеличение размера диска

Для увеличения диска виртуальной машины в kvm достаточно воспользоваться консольной утилитой qemu-img. Если вы не знаете, где располагается диск виртуальной машины, посмотреть можно так:

sudo virsh domblklist vmserver01

Увеличение размера диска

Далее нам нужно завершить работу виртуальной машины. После этого увеличиваем размер диска:

sudo qemu-img resize /mnt/kvm/disk/vmserver01-disk1.qcow2 +1G
Image resized.

Увеличил размер диска на 1G. Посмотрим информацию о диске:

sudo qemu-img info /mnt/kvm/disk/vmserver01-disk1.qcow2

Информация о диске virtual machine

В моем примере размер диска vm был изначально 2G, я увеличил его до 3-х.

KVM Agent

Для того, чтобы гипервизор мог получать информацию о виртуальной машине и взаимодействовать с ней, на нее необходимо установить qemu-guest-agent. Он нужен, например, для корректного завершения работы системы командой от гипервизора. Или для создания снепшота диска виртуалки без ее остановки. Для этого в свойствах виртуальной машины его нужно включить.

Сделать это можно отредактировав конфиг виртуальной машины. В него нужно добавить дополнительный channel. Сделаем это.

sudo virsh shutdown vmserver01
sudo virsh edit vmserver01

Добавляем в конфиг:

<channel type='unix'>
 <target type='virtio' name='org.qemu.guest_agent.0'/>
 <address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>

Прежде чем добавлять, посмотрите, нет ли у вас уже этой секции в конфигурации.

После этого в самой виртуальной машине нужно установить пакет qemu-guest-agent. Обычно он присутствует в стандартных репозиториях всех популярных систем. Для windows нужно отдельно скачать образ диска virtio-win и установить агента оттуда. Скачать образ можно тут, ссылки для windows в конце.

Установка Windows 10 в KVM

Для того, чтобы установить виртуальную машину с Windows 10 в KVM ничего особенного делать не надо. Кладем iso образы системы и virtio драйверов на kvm хост и запускаем виртуальную машину.

sudo virt-install -n vm-win10 \
--noautoconsole \
--vcpus=2 --cpu host --check-cpu \
--ram 4096 --arch=x86_64 \
--network=bridge:br0 \
--cdrom /mnt/kvm/iso/windows10.iso \
--cdrom /mnt/kvm/iso/virtio-win.iso \
--disk path=/mnt/kvm/disk/vm-win10-disk1.qcow2,format=qcow2,bus=virtio \
--graphics vnc,listen=0.0.0.0,password=parol \
--os-type windows --os-variant=win10 --boot cdrom,hd,menu=on

Дальше подключаемся по vnc и выполняем установку Windows 10. Узнать порт vnc для подключения можно командой:

virsh vncdisplay vm-win10
:0

В данном случае порт будет 5900. Число после двоеточия добавляется к стандартному порту 5900. Если бы там было :5, то подключаться нужно было бы по порту 5905. Если во время установки в списке дисков будет пусто, необходимо загрузить драйвер с образа virtio-win.iso. Сам драйвер находится в папке E:\viostor\w10\amd64.

После установки Windows 10 на KVM, зайдите в систему и установите драйвера для всего неопознанного оборудования. Драйвер можно поставить автопоиском с диска virtio-win. В самом конце с этого же диска установите Qemu Guest Agent. Он там в отдельной директории лежит в виде приложения.

На этом все, система с Windows 10 готова работать на гипервизоре KVM. Установка немного посложнее, чем в других гипервизорах из-за того, что в стандартном образе виндовс нет драйверов для дисков kvm.

Snapshot виртуальной машины KVM

Отдельно расскажу, как сделать snapshot виртуальной машины в kvm. Для того, чтобы функционал снимков был доступен, ваши диски должны быть в формате qcow2. Именно он поддерживает снэпшоты. Если диски raw, то сделать снимок не получится. Так же необходимо, чтобы в системе был установлен qemu-guest-agent. Если его не будет, то при создании снимка работающей vm получите ошибку:

error: Guest agent is not responding: QEMU guest agent is not connected

Прежде чем делать snapshot, посмотрим на имя диска виртуальной машины:

sudo virsh domblklist vmserver01
Target Source
------------------------------------------------
vda /mnt/kvm/disk/vmserver01-disk1.qcow2
sda -

Отлично, имя диска vda. Теперь делаем его snapshot:

sudo virsh snapshot-create-as --domain vmserver01 snapshot-name -diskspec vda,file=/mnt/kvm/disk/vmserver01-disk1-snapshot.qcow2 --disk-only --atomic --quiesce --no-metadata
Domain snapshot snapshot-name created
vmserver01 имя виртуальной машины, для которой делаем снэпшот
snapshot-name название самого снепшота, актуально, когда их несколько
vda имя диска виртуальной машины
vmserver01-disk1-snapshot.qcow2 имя и путь для снепшота

После этого в директории /mnt/kvm/disk появится файл vmserver01-disk1-snapshot.qcow2, куда будут писаться все изменения диска. Сам же диск останется в неизменном виде. В этой ситуации его удобно забэкапить. Рассмотрим это позже. Если сейчас посмотреть список дисков виртуальной машины, то в качестве диска там будет указан снэпшот.

sudo virsh domblklist vmserver01
 Target   Source
---------------------------------------------------------
 vda      /mnt/kvm/disk/vmserver01-disk1-snapshot.qcow2

Для того, чтобы удалить снепшот и объединить изменения с основным файлом виртуальной машины, используйте команду:

sudo virsh blockcommit vmserver01 vda --active --verbose --pivot
Block commit: [100 %]
Successfully pivoted

Проверьте список дисков. У вас должен исчезнуть snapshot, а основной диск вернется на прежнее место.

Бэкап виртуальной машины

Бэкап виртуальной машины kvm может быть выполнен по-разному. По своей сути это просто копия диска и экспорт настроек vm. Если вы хотите делать backup без остановки виртуальной машины, то необходимо воспользоваться снепшотом. Как его сделать, я показал выше. После того, как снэпшот сделан, вам достаточно просто скопировать основной диск vm. Сделать это можно любым доступным способом. Например, можно его сразу же сжать и положить в директорию с бэкапами.

sudo tar -czvf /mnt/backup/vmserver01-disk1.qcow2.tar.gz /mnt/kvm/disk/vmserver01-disk1.qcow2

Мы сжали диск виртуальной машины с помощью tar и gz и положили его в директорию с бэкапами /mnt/backup/. Для полноты бэкапа, положим туда же и настройки виртуальной машины.

sudo virsh dumpxml vmserver01 > /mnt/backup/vmserver01.xml

После того, как сделаете backup виртуальной машины, не забудьте объединить снэпшот с основными диском. Не допускайте роста числа снэпшотов. Это приводит к сильному снижению производительности, а когда снимков станет слишком много, могут быть ошибки работы с диском.

Если у вас есть возможность остановить виртуальную машину для создания архива, то снимки вам не нужны. Просто останавливайте виртуалку и копируйте ее диски. А потом запускайте снова. Можно все эти действия объединить в скрипт. Примерно так:

#/bin/bash
virsh shutdown vmserver01
tar -czvf /mnt/backup/vmserver01-disk1.qcow2.tar.gz /mnt/kvm/disk/vmserver01-disk1.qcow2
virsh dumpxml vmserver01 > /mnt/backup/vmserver01.xml
virsh start vmserver01

Это просто набросок. По хорошему, сюда нужно добавлять проверки, отправку отчета на почту и т.д.

Web интерфейс (gui) для KVM

Выше я показал, как управлять виртуальными машинами через консоль. В целом, весь необходимый функционал доступен. Но если вам хочется управлять виртуальными машинами kvm через браузер, то можно поставить простую панель управления для этого. В качестве KVM Web Interface я предлагаю использовать VMDashboard. Это обычное веб приложение, написанное на php. В работе использует базу данных MySQL.

Устанавливаем необходимые компоненты сервера для работы Web Interface.

sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql php-xml php-libvirt-php python

Для того, чтобы работало подключение к консолям виртуальных машин через web интерфейс, необходимо раскомментировать один параметр в /etc/libvirt/qemu.conf.

sudo nano /etc/libvirt/qemu.conf
vnc_listen = "0.0.0.0"

Продолжаем настройку web панели для kvm. Добавляем пользователя www-data в группу libvirt:

sudo adduser www-data libvirt

Переходим в директорию www и загружаем исходники панели:

cd /var/www/html
sudo wget https://github.com/VMDashboard/vmdashboard/archive/v19.01.03.tar.gz

Распаковываем их и готовим к запуску:

sudo tar -xzf v19.01.03.tar.gz
sudo mv vmdashboard-19.01.03 vmdashboard
sudo chown -R www-data:www-data /var/www/html/vmdashboard

Теперь нам нужно создать mysql базу для веб панели.

sudo mysql -u root
CREATE DATABASE vmdashboard;
CREATE USER 'vmdashboard'@'localhost' IDENTIFIED BY 'parol';
GRANT ALL PRIVILEGES ON vmdashboard.* to 'vmdashboard'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Далее нужно перезагрузить kvm сервер:

sudo reboot

После перезагрузки идем в web интерфейс по адресу http://10.20.1.40/vmdashboard/ и настраиваем подключение к панели управления виртуальными машинами. Используем данные о созданной ранее базе данных и пользователе.

Web интерфейс для KVM

На этом установка и настройка веб панели управления для kvm закончена. Можно переходить в интерфейс и управлять виртуалками.

kvm gui

Заключение

Постарался всесторонне рассмотреть вопрос установки и настройки гипервизора kvm на ubuntu server. Если забыл что-то важное, напомните в комментариях. Я дополню статью.