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
—————————————————-
Пример вывода приведен на скриншоте:
Отсутствие ошибок будет означать, что установка выполнена успешно.
Управлять виртуальными машинами можно через 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 образ системы с каким-либо предустановленным ПО или выполненными настройками, на основе которого в дальнейшем создавать новые виртуальные машины.