KVM виртуализация на Ubuntu


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

Чтобы использовать KVM на сервере, который будет хостом, должна присутствовать поддержка виртуализации на аппаратном уровне.



KVM виртуализация и установка гипервизора на Ubuntu сервер


Прежде всего проверим поддерживается ли виртуализация на уровне аппаратной части. Необходимые данные возьмем из вывода /proc/cpuinfo

egrep -c '(vmx|svm)' /proc/cpuinfo


0 будет означать, что kvm виртуализацию использовать не получится.



Такой результат, в частности, можно увидеть если попытаться настроить kvm виртуализацию на облачной машине, которая сама является виртуальной.


Если проверка пройдена — продолжаем

kvm-ok

INFO: /dev/kvm exists
KVM acceleration can be used


В консоль не должно быть выведено ошибок вроде -bash: kvm-ok: command not found (при выполнении опять же на облачном сервере оболочка сообщит о том, что команда не найдена)



Архитектура системы хоста


Чтобы иметь возможность создавать виртуальные машины с 32-х и 64-х битной архитектурой хост машина должна быть 64-х битной. На 32-х битном мастере получится создавать только 32-х битные гостевые системы. Также только при 64 битах получится выделить для гостевой системы более 2 Гб оперативной памяти.



Выяснить битность системы можно так:

egrep -c ' lm ' /proc/cpuinfo



Единица или большее число в вывод будут означать, что на мастере 64 бита



Другой вариант

file /bin/ls

/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=a0823e17cafbe5b2296346216445566840fdfd88, stripped



В случае с 32-х битной системой соответственно было бы

/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=07da0cea3ca1e33719560d9eba3bffe7e4c8b67f, stripped



Архитектуру также можно посмотреть используя uname

uname -m



Все необходимые приготовления выполнены.



Обновляем список репозиториев и устанавливаем пакеты, которые потребуются для работы kvm виртуализации


apt-get update

apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder virtinst ubuntu-virt-server bridge-utils pm-utils



Они выполняются от имени root или из под sudo, после добавляем пользователя с реквизитами которого авторизованы в системе  в группы kvm и libvirtd


su admin

sudo adduser `id -un` kvm

sudo adduser `id -un` libvirtd



За счет 'id -un' выбирается тот пользователь который сейчас выполняет команды с правами суперпользователя



Далее меняем владельца и группу владельца устройства kvm

sudo chown root:libvirtd /dev/kvm



Теперь нужно выйти из системы и зайти вновь от имени того же пользователя — лучше перезагрузить сервер, затем отдать команду которая выведет список всех существующих виртуальных машин (пустой на данном этапе)


virsh -c qemu:///system list

Id Name State
—————————————————-



Пример вывода приведен на скриншоте:

KVM виртуализация на Ubuntu


Отсутствие ошибок будет означать, что установка выполнена успешно.



Управлять виртуальными машинами можно через virtual manager — веб-интерфейс, который в продакшн среде обычно не применяется. Он устанавливается при помощи apt-get и вызывается из консоли обращением по имени пакета.



Рассмотрим создание гостевых машин в kvm и основные операции с ними при помощи virsh



Установим дополнительные пакеты, которые будут полезны при работе с виртуальными машинами

apt-get install kvm libvirt-bin virt-manager virt-viewer virt-top virt-what



Вывести список всех существующих машин используя virsh можно так:

virsh list --all



Он пуст и вывод абсолютно идентичен выводу команды использовавшейся ранее

KVM виртуализация предполагает создание машин на основе образов iso, которые нужно размещать в каталоге /var/lib/libvirt/images — изначально он пуст



Прежде всего меняем конфигурацию сети на сервере, сейчас он работает на белом IP адресе, который относится к интерфейсу eth0, через него происходит выход в интернет.



В /etc/network/interfaces меняем iface eth0 inet static на iface eth0 inet manual. После этого добавляем новый интерфейс br0, присваивая ему тот IP адрес и сетвую маску, что относились к eth0. Оставляем теми же broadcast, network и gateway дописывая в настройки интерфейса br0 несколько строк:


bridge_ports eth0

bridge_fd 9

bridge_hello 2

bridge_maxage 12

bridge_stp off



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


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


virt-install \
-n VM1 \
--description "VM1" \
--os-type=Linux \
--ram=512 \
--vcpus=1 \
--disk path=/var/lib/libvirt/images/VM1.img,bus=virtio,size=5 \
--graphics none \
--location /home/admin/ubuntu-20.04.5-server-i386.iso \
--network bridge:br0



В качестве опций задаются имя виртуальной машины, описание, тип операционной системы (Linux), название дистрибутива (может также быть — например, centos7), количество оперативной памяти и CPU выделяемых для системы, путь к файловой системе и размер диска, указание на необходимость использования на виртуальной машине только консольного режима.



Последними опциями задается путь к установочному .iso файлу и настройки сети. Если задан бридж машина будет доступна в сети как самостоятельный хост. Все настройки хранятся в /etc/libvirt/qemu/networks/. также можно указать необходимость использования NAT.



Созданную виртуальную машину можно запустить следующей командой

virsh --connect qemu:///system start VM1



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

virsh start VM1



Это и последующие команды нужно выполнять из под  sudo иди один раз перейдя в оболочку sudo 'sudo bash'



Выключить машину

virsh shutdown VM1



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

virsh destroy VM1



Перезагрузить

virsh reboot VM1



Уничтожить

virsh undefine VM1



Команда для вывода списка всех созданных гостевых систем уже приводилась ранее


Можно подключиться к консоли VM1

virsh-viewer VM1



За счет save и restore можно создавать снапшоты и восстанавливаться из них, синтаксис следующий

virsh save VM1 VM1-10152017.stat

virsh restore VM1-10152017.stat



Подробную информацию о работе с KVM и QEMU и о том как работает  KVM виртуализация в целом можно найти на официальном сайте проекта.



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

Сказать спасибо