Настройка kvm виртуализации на ubuntu 16.04. Перестаем бояться виртуализации при помощи KVM

Ранее я уже писал об установке Qemu-KVM в Debian . Но, на мой взгляд, информация получилась неполной. Плюс я не учёл некоторые нюансы. Потому предлагаю вашему вниманию обновлённую статью по установке виртуальной машины Qemu-KVM. Старую статью, естественно, удалю.

Думаю, объяснять что такое виртуальная машина , не стоит. Вы наверняка это знаете (раз читаете эту статью). Если нет - . Мы же остановимся непосредсвенно на сабже. Qemu-KVM - это проект по объединению двух замечтальнейшийх (на мой взгляд) технологий полной виртуализации. Qemu - это своего рода "эмулятор компьютера", который поддерживает великое множество аппаратных архитектур. В нём можно запустить практически любую ОС для любого устройства (к примеру я запускал старые версии Mac OS X , который для PowerPC ). Недостатком Qemu является его медлительность вследствии отсутствия аппратного ускорения. И тут на помощь приходит другой проект - KVM . Или Kernel Virtual Machine. KVM - это технология ядра Linux, которая позволяет обеспечить аппаратное ускорение при полной виртуализации. Недостатком KVM является поддержка только архитектуры x86

Почему Qemu-KVM? Для Linux это самый рекомендуемый проект виртуализации. Он работает быстрее, чем VirtualBox и VMware Player (по моим тестам), KVM - это родная для Линукса технология. Плюс, если вы обладатель хорошего игрового компьютера с двумя видеокартами, вы можете установить в Qemu-KVM Windows , пробросить в неё одну из видеокарт, и забыть о перезагрузке в другую ОС. Захотели поиграть - запустили виртуалку с виндой и играете. Производительность будет 95% от производительности установленной на "железо" винды. Но это просто шикарно, на мой взгляд. Об этом я напишу отдельную статью. Будет интересно:)

А теперь опишу план наших действий. Во первых, установку я буду проводить на примере Debian 8.2 GNOME 64 bit , хотя, особых различий в других графических окружениях не будет. Во-вторых - я буду описывать работу с KVM только в графическом режиме (мы ведь не на сервер будет его ставить). Поэтому никаких терминалов, скриптов и так далее, как обычно поступают в случае серверной виртуализации. В третьих - советую вам дополнительно прочитать документацию к Qemu и KVM (ссылки дам в конце статьи). Вам это очень пригодится, если вы хотите по-максимуму использовать весь потенциал этой связки. Ну чтож, план наших действий ясен. Теперь этапы действий:

  • установка qemu-kvm;
  • установка графического менеджера и дополнительных утилит;
  • настройка сетевого моста;
  • создание хранилища для виртуальных машин;
  • установка гостевой системы.
Для начала проверим, поддерживает ли ваш компьютер аппаратную виртуализацию. Для этого в терминале выполняем команду:

egrep "(vmx|svm)" /proc/cpuinfo

В выводе команды должны присутствовать либо vmx , либо svm . Если их нет - проверьте включена ли виртуализация в BIOS (ищите пункты Intel VT-i или аналогичный для AMD ). Если ничего нет - значит не повезло.

Устанавливаем необходимые компоненты:

sudo apt install qemu-kvm bridge-utils libvirt-bin virt-manager

Добавляем себя в группу libvirt:

sudo adduser $USER libvirt

Теперь настроим сеть. Для того чтобы все виртауальные машины могли выходить в сеть и связываться друг с другом, нужно создать сетевой мост и виртаульные сетевые карты для каждой виртуалки (tap-устройства ). Так как виртуальные машины мы будем устанавливать из графического интерфейса, то создавать вручную tap"ы не нужно. Virt Manager сделает это за нас при каждом запуске. Нам нужно только настроить мост. Для начала включим маршрутизацию в ядре:

sudo nano /etc/sysctl.conf

Ищем строку net.ipv4_forward=0 и меняем её значение на 1 . Сохраняем и:

sudo sysctl -p

Далее я буду предполагать следующее: 1) на вашем компьютере есть одна сетевая карта, получающая ip-адрес от роутера. 2) вы выходите в интернет через 3G-модем, и сетевая карта у вас свободна. Этот вариант предполагает побольше ручной работы, но он проверен неоднократно (у самого так на одной из машин). Итак, открываем файл interfaces:

sudo nano /etc/network/interfaces

Его содержимое по умолчанию такое:



auto lo
iface lo inet loopback

Меняем его содержимое. Для первого варианта:

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
address 192.168.0.2
gateway 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
bridge_ports eth0
bridge_stp off
bridge_maxwait 0
bridge_fd 0

Для второго варианта:

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

auto ppp0
iface ppp0 inet wvdial

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
address 192.168.0.2
gateway 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
bridge_ports eth0
bridge_stp off
bridge_maxwait 0
bridge_fd 0
up route del default br0

Примечание: если вам не нужно автоматическое подключение Интернета через модем после старта системы, уберите из конфига строки auto ppp0 и
iface ppp0 inet wvdial . В противном случае, убедитесь что при запуске системы, модем вставлен в USB-порт.

Сохраняем. Теперь для варианта с модемом, нужно установить программу дозвона wvdial :

sudo apt install wvdial

Правим конфиг (обратите внимание: в качестве примера используется 3G-модем Beeline . Примеры конфигов для других модемов вы без труда найдёте в интернете):

sudo nano /etc/wvdial.conf


Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1,"IP","home.beeline.ru"
Stupid Mode = 1
ISDN = 0
Modem Type = USB Modem
New PPPD = yes
Phone = *99#
Modem = /dev/ttyACM0
Username = beeline
Password = beeline
Baud = 9600
Country = Russia
Auto Reconnect = on
Auto DNS = off
Idle Seconds = 0

Сохраняем. Теперь модем будет включаться сразу после загрузки системы. Строка up route del default br0 удаляет маршрут по умолчанию через мост. Если этого не сделать, вы не сможете соединиться с Интернетом, так как трафик будет идти по мосту, а не через 3G-модем.

Последним этапом нам нужно сказать фаерволлу , чтобы он пропускал в сеть трафик от наших виртуалок и обратно. Для этого можно пойти двумя путями: написать скрипт с несколькими правилами для iptables , который будет запускаться вместе с системой, или ввести эти правила вручную и сохранить их. Я воспользуюсь первым вариантом. Для второго вам нужно будет установить пакет iptables-persistent и просто поочерёдно вводить правила (с использованием sudo). Итак. создаём скрипт (в любом текстовом редакторе). Вставляем туда следующее содержимое:

#!/bin/sh

# Определяем выходной интерфейс для которого будет применяться замена адресов (NAT)
iptables -v -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

# Пересылаем все пакеты, пришедшие на модем из глобальной сети (0.0.0.0/0) в локальную сеть (192.168.0.0/24)
iptables -v -A FORWARD -i ppp0 -o br0 -s 0.0.0.0/0 -d 192.168.0.0/24 -j ACCEPT

# Пересылаем все пакеты, пришедшие из локальной сети (192.168.0.0/24) в глобальную (0.0.0.0/0)
iptables -v -A FORWARD -i br0 -o ppp0 -s 192.168.0.0/24 -d 0.0.0.0/0 -j ACCEPT

Сохраняем его как gateway.sh и даём права на выполнение (либо в свойствах файла, либо в терминале командой chmod +x gateway.sh ). Теперь вы можете либо запускать его вручную, после того как загрузилась система, либо добавить в автозагрузку. Для этого переместите скрипт в ~/.config/autostart (в файловом менеджере включите показ скрытых файлов, и вы увидите каталог .config в домашней директории).

Теперь всё готово для установки виртуальной машины. Из меню приложений запускаем Virt Manager (менеджер виртуальных машин):

Кликаем правой кнопкой на строке localhost и выбираем Детали . Переходим на вкладку Хранилище . Нам нужно указать каталог (или раздел диска/диск) для хранения виртуальных машин.

В левом нижнем углу жмём на плюсик (Добавить пул ), указывам тип хранилища и путь к нему.

На вкладке Сетевые интерфейсы , можете проверить, всё ли работает.

Теперь нажимаем Файл - New virtual machine . Указываем путь к образу диска, тип виртуальной машины. Далее указываем количество оперативной памяти для неё и количество ядер процессора. Далее указываем наше хранилище и нажимаем Новый том . Указываем название, тип оставляем qcow2 , и размер. Это будет виртуальный жёсткий диск. Если планируете устанавливать систему с графической оболочкой и кучей программ, дайте места побольше (гигов 50). На последней вкладке ставим галочку на Изменить настройки перед запуском , проверяем что в качестве сетевого устройства выбран наш мост, пишем любое название для виртуалки и жмём Завершить . Перед вами откроется окно параметров этой виртуальной машины.





Переходим на вкладку Процессор , и ставим галочку на Скопировать настройки процессора хост-системы .

Далее на вкладку Сеть (следующая), и также указываем vitio . На вкладке Дисплей укажите Spice , а на вкладке Видео - QXL . Обычно эта связка обеспечивает максимальную производительность отрисовки графики, но, если хотите, можете поэксперементировать. Учтите, что для гостевых систем Windows, требуется отдельная установка QXL-драйвера (в самой Windows).


Теперь когда всё готово, в левом верхнем углу жмём Начать установку . И ставим систему как обычно, за одним исключением: как только установщик начнёт автоматически настраивать сеть, нажмите Отмена , и выберите Настроить сеть вручную . Укажите для виртуалки желаемый IP-адрес (в нашем случае 192.168.0.3 ), маску подсети (255.255.255.0 ), шлюз (шлюзом будет адрес хоста, тоесть 192.168.0.2 ) и DNS-сервер (здесь просто укажите Гугловский 8.8.8.8 ). И всё. Дальше ничего делать не нужно. Ставьте систему и настраивайте. В общем-то, всё. Описанные действия - это способ заменить, скажем, VirtualBox на более лучшую альтернативу. Прочитав документацию, вы поймёте, насколько широки возможности Qemu-KVM. Я намеренно не стал описывать здесь дополнительные консольные параметры и методы запуска виртуальных машин через терминал, так как это далеко не всегда нужно на домашней машине. Об этом я напишу отдельную статью, по настройке домашнего многофункционального сервера (который также сможет выступать в качестве сервера виртуальных машин). Для тех, кто по каким-то причинам не понял написанное, или остались непонятные моменты - предлагаю посмотреть ролик, в котором я уже не опишу, а покажу, как всё это добро устанавливать и настраивать. Если у вас есть предложения или дополнения к статье - пишите в комментариях.

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

Почему ? Эта операционная система мне близка и понятна, так что при выборе дистрибутива мучений, терзаний и метаний испытано не было. Особых преимуществ перед Red Hat Enterprise Linux у него нет, но было принято решение работать со знакомой системой.

Если вы планируете самостоятельно развернуть инфраструктуру, используя аналогичные технологии, я бы посоветовал взять именно RHEL: благодаря хорошей документации и хорошо написаным прикладным программам это будет если не на порядок, то уж точно раза в два проще, а благодаря развитой системе сертификации без особого труда можно будет найти некоторое количество специалистов, на должном уровне знакомых в данной ОС.

Мы же, повторюсь, решили использовать Debian Squeeze с набором пакетов из Sid/Experimental и некоторыми пакетами, бэкпортированными и собранными с нашими патчами.
В планах имеется публикация репозитория с пакетами.

При выборе технологии виртуализации рассматривались два варианта - Xen и KVM.

Также во внимание принимался факт наличия огромного количества разработчиков, хостеров, комерческих решений именно на базе Xen - тем интереснее было провести в жизнь решение именно на базе KVM.

Основной же причиной, по которой мы решили использовать именно KVM, является необходимость запуска виртуальных машин с FreeBSD и, в перспективе, MS Windows.

Для управления виртуальными машинами оказалось чрезвычайно удобно использовать и продукты, использующие ее API: virsh , virt-manager , virt-install , пр.

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

Разумеется, решение не идеально. Из минусов следует назвать:

  • Абсолютно невменяемые сообщения об ошибках.
  • Невозможность изменять часть конфигурации виртуальной машины на лету, хотя QMP (QEMU Monitor Protocol) это вполне позволяет.
  • Иногда к libvirtd по непонятной причине невозможно подключиться - он перестаёт реагировать на внешние события.

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

В KVM ничего такого не было до появления механизма распределения ресурсов ядра . Как обычно в Linux, доступ к этим функциям был реализован посредством специальной файловой системы cgroup , в которой при помощи обычных системных вызовов write() можно было добавить процесс в группу, назначить ему его вес в попугаях, указать ядро, на котором он будет работать, указать пропускную способность диска, которую этот процесс может использовать, или, опять же, назначить ему вес.

Профит в том, что всё это реализуется внутри ядра, и использовать это можно не только для сервера, но и для десктопа (что и использовали в известном «The ~200 Line Linux Kernel Patch That Does Wonders »). И на мой взгляд, это одно из самых значительных изменений в ветке 2.6, не считая любимого #12309 , а не запиливание очередной файловой системы. Ну, разве что, кроме POHMELFS (но чисто из-за названия).

Отношение к этой библиотеке-утилите у меня весьма неоднозначное.

С одной стороны это выглядит примерно так:

И ещё эту штуку чертовски сложно собрать из исходников и тем более в пакет: иногда мне кажется, что Linux From Scratch собрать с нуля несколько проще.

С другой стороны - очень мощная штука, которая позволяет создавать образы для виртуальных машин, модифицировать их, ужимать, ставить grub, модифицировать таблицу разделов, управлять конфигурационными файлами, переносить «железные» машины в виртуальную среду, переносить виртуальные машины с одного образа на другой, переносить виртуальные машины из образа на железо и, честно говоря, тут меня фантазия немного подводит. Ах, да: ещё можно запустить демон внутри виртуальной машины Linux и получить доступ к данным виртуальной машины вживую, и всё это делать на shell, python, perl, java, ocaml. Это краткий и далеко не полный список того, что можно сделать с .

Интересно, что большая часть кода в генерируется в момент сборки, равно как и документация к проекту. Очень широко используется ocaml, perl. Сам код пишется на C, который потом оборачивается в OCaml, и повторяющиеся куски кода генерируются сами. Работа с образами осуществляется путём запуска специального сервисного образа (supermin appliance), в который через канал внутрь него отправляются команды. Внутри этого образа содержится некоторый rescue набор утилит, таких как parted, mkfs и прочих полезных в хозяйстве системного администратора.

Я с недавнего времени его даже дома стал использовать, когда выковыривал из образа nandroid нужные мне данные. Но для этого требуется ядро с поддержкой yaffs.

Прочее

Ниже приведено ещё несколько интересных ссылок на описание использованных пограммных средств - почитать и поизучать самостоятельно, если интересно. Например,

В жизни сисадмина однажды настает момент, когда приходится с нуля разворачивать инфраструктуру предприятия либо переделывать уже имеющуюся, перешедшую по наследству. В этой статье я расскажу о том, как правильно развернуть гипервизор на основе Linux KVM и libvirt c поддержкой LVM (логических групп).

Мы пройдемся по всем тонкостям управления гипервизором, включая консольные и GUI-утилиты, расширение ресурсов и миграцию виртуальных машин на другой гипервизор.

Для начала разберемся с тем, что такое виртуализация. Официальное определение звучит так: «Виртуализация - это предоставление набора вычислительных ресурсов или их логического объединения, абстрагированное от аппаратной реализации и обеспечивающее при этом логическую изоляцию друг от друга вычислительных процессов, выполняемых на одном физическом ресурсе». То есть, если выражаться человеческим языком, имея один мощный сервер, мы можем превратить его в несколько средних серверов, и каждый из них будет выполнять свою задачу, отведенную ему в инфраструктуре, не мешая при этом другим.

Системные администраторы, работающие вплотную с виртуализацией на предприятии, мастера и виртуозы своего дела, поделились на два лагеря. Одни - приверженцы высокотехнологичной, но безумно дорогой VMware для Windows. Другие - любители open source и бесплатных решений на основе Linux VM. Можно долго перечислять преимущества VMware, но здесь мы остановимся на виртуализации, основанной на Linux VM.

Технологии виртуализации и требования к железу

Сейчас есть две популярные технологии виртуализации: Intel VT и AMD-V. В Intel VT (от Intel Virtualization Technology) реализована виртуализация режима реальной адресации; соответствующая аппаратная виртуализация ввода-вывода называется VT-d. Часто эта технология обозначается аббревиатурой VMX (Virtual Machine eXtension). В AMD создали свои расширения виртуализации и первоначально называли их AMD Secure Virtual Machine (SVM). Когда технология добралась до рынка, она стала называться AMD Virtualization (сокращенно AMD-V).

Перед тем как вводить аппаратное обеспечение в эксплуатацию, убедись, что оборудование поддерживает одну из этих двух технологий (посмотреть можно в характеристиках на сайте производителя). Если поддержка виртуализации имеется, ее необходимо включить в BIOS перед развертыванием гипервизора.

Среди других требований гипервизоров - поддержка аппаратного RAID (1, 5, 10), которая повышает отказоустойчивость гипервизора при выходе жестких дисков из строя. Если поддержки аппаратного RAID нет, то можно использовать программный на крайний случай. Но RAID - это мастхэв!

Решение, описанное в этой статье, несет на себе три виртуальные машины и успешно работает на минимальных требованиях: Core 2 Quad Q6600 / 8 Гбайт DDR2 PC6400 / 2 × 250 Гбайт HDD SATA (хардверный RAID 1).

Установка и настройка гипервизора

Я покажу, как настраивать гипервизор, на примере Debian Linux 9.6.0 - Х64-86. Ты можешь использовать любой дистрибутив Linux, который тебе по душе.

Когда ты определишься с выбором железа и его наконец-то привезут, придет время ставить гипервизор. При установке ОС все делаем, как обычно, за исключением разметки дисков. Неопытные администраторы часто выбирают опцию «Автоматически разбить все дисковое пространство без использования LVM». Тогда все данные будут записаны на один том, что нехорошо по нескольким причинам. Во-первых, если жесткий диск выйдет из строя, ты потеряешь все данные. Во-вторых, изменение файловой системы доставит массу хлопот.

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

Logical Volume Manager

Менеджер логических томов (LVM) - это подсистема, доступная в Linux и OS/2, построенная поверх Device Mapper. Ее задача - представление разных областей с одного жесткого диска или областей с нескольких жестких дисков в виде одного логического тома. LVM создает из физических томов (PV - Phisical Volumes) логическую группу томов (VG - Volumes Group). Она, в свою очередь, состоит из логических томов (LV - Logical Volume).

Сейчас во всех дистрибутивах Linux с ядром 2.6 и выше есть поддержка LVM2. Для использования LVM2 на ОС с ядром 2.4 надо устанавливать патч.

После того как система обнаружила жесткие накопители, запустится менеджер разбивки жестких дисков. Выбираем пункт Guided - use entire disk and set up LVM.


Теперь выбираем диск, на который будет установлена наша группа томов.



Система предложит варианты разметки носителя. Выбираем «Записать все файлы на один раздел» и идем дальше.




После сохранения изменений мы получим одну логическую группу и два тома в ней. Первый - это корневой раздел, а второй - это файл подкачки. Тут многие зададут вопрос: а почему не выбрать разметку вручную и не создать LVM самому?

Я отвечу просто: при создании логической группы VG загрузочный раздел boot не пишется в VG, а создается отдельным разделом с файловой системой ext2. Если этого не учесть, то загрузочный том окажется в логической группе. Это обречет тебя на мучения и страдания при восстановлении загрузочного тома. Именно поэтому загрузочный раздел отправляется на том без LVM.



Переходим к конфигурации логической группы для гипервизора. Выбираем пункт «Конфигурация менеджера логических томов».



Система оповестит о том, что все изменения будут записаны на диск. Соглашаемся.



Создадим новую группу - к примеру, назовем ее vg_sata .



INFO

В серверах используются носители SATA, SSD, SAS, SCSI, NVMe. Хорошим тоном при создании логической группы будет указывать не имя хоста, а тип носителей, которые используются в группе. Советую логическую группу назвать так: vg_sata , vg_ssd , vg_nvme и так далее. Это поможет понять, из каких носителей построена логическая группа.




Создаем наш первый логический том. Это будет том для корневого раздела операционной системы. Выбираем пункт «Создать логический том».



Выбираем группу для нового логического тома. У нас она всего одна.



Присваиваем имя логическому тому. Правильнее всего при назначении имени будет использовать префикс в виде названия логической группы - например, vg_sata_root , vg_ssd_root и так далее.



Указываем объем для нового логического тома. Советую выделить под корень 10 Гбайт, но можно и меньше, благо логический том всегда можно расширить.



По аналогии с примером выше создаем следующие логические тома:

  • vg_sata_home - 20 Гбайт под каталоги пользователей;
  • vg_sata_opt - 10 Гбайт для установки прикладного ПО;
  • vg_sata_var - 10 Гбайт для часто меняющихся данных, к примеру логов системы и других программ;
  • vg_sata_tmp - 5 Гбайт для временных данных, если объем временных данных велик, можно сделать и больше. В нашем примере этот раздел не создавался за ненадобностью;
  • vg_sata_swap - равен объему оперативной памяти. Это раздел для свопа, и создаем мы его для подстраховки - на случай, если закончится оперативная память на гипервизоре.

После создания всех томов завершаем работу менеджера.



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



Создаем одноименный раздел под каждый логический том.



Сохраняем и записываем проделанные изменения.



После сохранения изменений разметки диска начнут ставиться базовые компоненты системы, а затем будет предложено выбрать и установить дополнительные компоненты системы. Из всех компонентов нам понадобится ssh-server и стандартные системные утилиты.



После установки будет сформирован и записан на диск загрузчик GRUB. Устанавливаем его на тот физический диск, где сохранен загрузочный раздел, то есть /dev/sda .




Теперь ждем, пока закончится запись загрузчика на диск, и после оповещения перезагружаем гипервизор.





После перезагрузки системы заходим на гипервизор по SSH. Первым делом под рутом устанавливаем нужные для работы утилиты.

$ sudo apt-get install -y sudo htop screen net-tools dnsutils bind9utils sysstat telnet traceroute tcpdump wget curl gcc rsync

Настраиваем SSH по вкусу. Советую сразу сделать авторизацию по ключам. Перезапускаем и проверяем работоспособность службы.

$ sudo nano /etc/ssh/sshd_config $ sudo systemctl restart sshd; sudo systemctl status sshd

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

$ sudo pvscan $ sudo lvs

Устанавливаем компоненты виртуализации и утилиты для создания сетевого моста на интерфейсе гипервизора.

$ sudo apt-get update; apt-get upgrade -y $ sudo apt install qemu-kvm libvirt-bin libvirt-dev libvirt-daemon-system libvirt-clients virtinst bridge-utils

После установки настраиваем сетевой мост на гипервизоре. Комментируем настройки сетевого интерфейса и задаем новые:

$ sudo nano /etc/network/interfaces

Содержимое будет примерно таким:

Auto br0 iface br0 inet static address 192.168.1.61 netmask 255.255.255.192 gateway 192.168.1.1 broadcast 192.168.0.61 dns-nameserver 127.0.0.1 dns-search сайт bridge_ports enp2s0 bridge_stp off bridge_waitport 0 bridge_fd 0

Добавляем нашего пользователя, под которым будем работать с гипервизором, в группы libvirt и kvm (для RHEL группа называется qemu).

$ sudo gpasswd -a iryzhevtsev kvm $ sudo gpasswd -a iryzhevtsev libvirt

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

$ sudo virsh pool-list $ sudo virsh pool-define-as vg_sata logical --target /dev/vg_sata $ sudo virsh pool-start vg_sata; sudo virsh pool-autostart vg_sata $ sudo virsh pool-list

INFO

Для нормальной работы группы LVM с QEMU-KVM требуется сначала активировать логическую группу через консоль virsh .

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

$ sudo wget https://mirror.yandex.ru/debian-cd/9.5.0/amd64/iso-cd/debian-9.5.0-amd64-netinst.iso $ sudo mv debian-9.5.0-amd64-netinst.iso /var/lib/libvirt/images/; ls -al /var/lib/libvirt/images/

Чтобы подключаться к виртуальным машинам по VNC, отредактируем файл /etc/libvirt/libvirtd.conf:

$ sudo grep "listen_addr = " /etc/libvirt/libvirtd.conf

Раскомментируем и изменим строчку listen_addr = "0.0.0.0" . Сохраняем файл, перезагружаем гипервизор и проверяем, все ли службы запустились и работают.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «сайт», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score!

KVM или Kernel Virtual Module - это модуль виртуализации для ядра Linux, который позволяет превратить ваш компьютер в гипервизор для управления виртуальными машинами. Этот модуль работает на уровне ядра и поддерживает такие технологии аппаратного ускорения, как Intel VT и AMD SVM.

Само по себе программное обеспечение KVM в пространстве пользователя ничего не виртуализирует. Вместо этого, оно использует файл /dev/kvm для настройки виртуальных адресных пространств для гостевой машины в ядре. Каждая гостевая машина будет иметь свою видеокарту, сетевую и звуковую карту, жесткий диск и другое оборудование.

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

Перед тем как переходить к самой установке KVM нужно проверить поддерживает ли ваш процессор аппаратное ускорение виртуализации от Intel-VT или AMD-V. Для этого выполните такую команду:

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

Если в результате будет возвращено 0 - значит ваш процессор не поддерживает аппаратной виртуализации, если 1 или больше - то вы можете использовать KVM на своей машине.

Теперь мы можем перейти к установке KVM, набор программ можно получить прямо из официальных репозиториев:

sudo apt install qemu-kvm libvirt-bin bridge-utils virt-manager cpu-checker

Мы установили не только утилиту kvm, но и библиотеку libvirt, а также менеджер виртуальных машин. После того, как установка будет завершена вам необходимо добавить своего пользователя в группу libvirtd, потому что только root и пользователи этой группы могут использовать виртуальные машины KVM:

sudo gpasswd -a ПОЛЬЗОВАТЕЛЬ libvirtd

После выполнения этой команды выйдите из системы и войдите снова. Далее, давайте проверим все ли правильно было установлено. Для этого используйте команду kvm-ok:

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

Если все было сделано правильно, то вы увидите такое же сообщение.

Использование KVM в Ubuntu 16.04

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

Настройка моста в NetworkManager

Это можно сделать несколькими способами, например, можно использовать программу конфигурации сети NetworkManager.

Кликните по значку NetworkManager на панели, затем выберите изменить соединения , затем нажмите кнопку Добавить :

Затем выберите тип соединения Мост и нажмите Создать :

В открывшемся окне нажмите кнопку Добавить, чтобы связать наш мост с подключением к интернету:

Из списка выберите Ethernet и нажмите Создать :

В следующем окне выберите в поле устройство, сетевой интерфейс, с которым следует связать наш мост:

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

Ручная настройка моста

Сначала нужно установить набор утилит bridge-utils если вы еще этого не сделали:

sudo apt install bridge-utils

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

sudo brctl addbr bridge0
$ sudo ip addr show
$ sudo addif bridge0 eth0

Первая команда добавляет устройство моста br0, с помощью второй вам нужно определить какой сетевой интерфейс является основным подключением к внешней сети, в моем случае это eth0. И с помощью последней команды мы связываем мост br0 с eth0.

Теперь необходимо добавить несколько строк в настройки сети чтобы все поднималось автоматически после старта системы. Для этого откройте файл /etc/network/interfaces и добавьте туда такие строки:

sudo gedit /etc/network/interfaces

loopback
auto lo bridge0
iface lo inet loopback
iface bridge0 inet dhcp
bridge_ports eth0

Когда настройки будут добавлены перезагрузите сеть:

sudo systemctl restart networking

Теперь установка и настройка KVM полностью завершена и вы можете создать свою первую виртуальную машину. После этого вы можете посмотреть доступные мосты с помощью команды:

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

Настройка KVM Ubuntu завершена и теперь мы можем перейти к ее использованию. Сначала давайте просмотрим список уже существующих виртуальных машин:

virsh -c qemu:///system list

Он пуст. Создать виртуальную машину можно через терминал или в графическом интерфейсе. Для создания через терминал используйте команду virt-install. Сначала перейдем в папку libvirt:

cd /var/lib/libvirt/boot/

Для установки CentOS команда будет выглядеть вот так:

sudo virt-install \
--virt-type=kvm \
--name centos7 \
--ram 2048 \
--vcpus=2 \
--os-variant=rhel7 \
--hvm \
--cdrom=/var/lib/libvirt/boot/CentOS-7-x86_64-DVD-1511.iso \
--network=bridge=br0,model=virtio \
--graphics vnc \
--disk path=/var/lib/libvirt/images/centos7.qcow2,size=40,bus=virtio,format=qcow2

Разберем подробнее что означают параметры этой команды:

  • virt-type - тип виртуализации, в нашем случае kvm;
  • name - имя новой машины;
  • ram - количество памяти в мегабайтах;
  • vcpus - количество ядер процессора;
  • os-variant - тип операционной системы;
  • cdrom - установочный образ системы;
  • network-bridge - сетевой мост, который мы настроили ранее;
  • graphics - способ получения доступа к графическому интерфейсу;
  • diskpath - адрес нового жесткого диска для этой виртуальной машины;

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

sudo virsh vncdisplay centos7

Теперь вы можете ввести полученные данные в вашем клиенте VNC и подключится к виртуальной машине даже удаленно. Для Debian команда будет немного отличаться, но все выглядит похожим образом:

Переходим в папку для образов:

cd /var/lib/libvirt/boot/

Можно скачать установочный образ из интернета если это необходимо:

sudo wget https://mirrors.kernel.org/debian-cd/current/amd64/iso-dvd/debian-8.5.0-amd64-DVD-1.iso

Затем создадим виртуальную машину:

sudo virt-install \
--virt-type=kvm \
--name=debina8 \
--ram=2048 \
--vcpus=2 \
--os-variant=debian8 \
--hvm \
--cdrom=/var/lib/libvirt/boot/debian-8.5.0-amd64-DVD-1.iso \
--network=bridge=bridge0,model=virtio \
--graphics vnc \
--disk path=/var/lib/libvirt/images/debian8.qcow2,size=40,bus=virtio,format=qcow2

Теперь снова посмотрим список доступных машин:

virsh -c qemu:///system list

Для запуска виртуальной машины можно использовать команду:

sudo virsh start имя_машины

Для остановки:

sudo virsh shutdown имя_машины

Для перевода в режим сна:

sudo virsh suspend имя_машины

Для перезагрузки:

sudo virsh reboot имя_машины

sudo virsh reset имя_машины

Для полного удаления виртуальной машины:

sudo virsh destroy имя_машины

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

Если у вас есть доступ к графическому интерфейсу то нет никакой необходимости использовать терминал, вы можете применить полноценный графический интерфейс менеджера виртуальных машин Virtual Manager. Программу можно запустить из главного меню:

Для создания новой машины кликните по иконке со значком монитора. Дальше вам будет необходимо выбрать образ ISO вашей системы. Также можно использовать реальный CD/DVD привод:

На следующем экране выберите количество памяти, которая будет доступна для виртуальной машины, а также количество ядер процессора:

На этом экране вам нужно выбрать размер жесткого диска, который будет доступен в вашей машине:

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

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

Выводы

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

На завершение лекция от яндекса о том что такое виртуализация в Linux:

Выпуск WordPress 5.3 улучшает и расширяет представленный в WordPress 5.0 редактор блоков новым блоком, более интуитивным взаимодействием и улучшенной доступностью. Новые функции в редакторе […]

После девяти месяцев разработки доступен мультимедиа-пакет FFmpeg 4.2, включающий набор приложений и коллекцию библиотек для операций над различными мультимедиа-форматами (запись, преобразование и […]

  • Новые функции в Linux Mint 19.2 Cinnamon

    Linux Mint 19.2 является выпуском с долгосрочной поддержкой, который будет поддерживаться до 2023 года. Он поставляется с обновленным программным обеспечением и содержит доработки и множество новых […]

  • Вышел дистрибутив Linux Mint 19.2

    Представлен релиз дистрибутива Linux Mint 19.2, второго обновления ветки Linux Mint 19.x, формируемой на пакетной базе Ubuntu 18.04 LTS и поддерживаемой до 2023 года. Дистрибутив полностью совместим […]

  • Доступны новые сервисные релизы BIND, которые содержат исправления ошибок и улучшения функций. Новые выпуски могут быть скачано со страницы загрузок на сайте разработчика: […]

    Exim – агент передачи сообщений (MTA), разработанный в Кембриджском университете для использования в системах Unix, подключенных к Интернету. Он находится в свободном доступе в соответствии с […]

    После почти двух лет разработки представлен релиз ZFS on Linux 0.8.0, реализации файловой системы ZFS, оформленной в виде модуля для ядра Linux. Работа модуля проверена с ядрами Linux c 2.6.32 по […]

  • В WordPress 5.1.1 устранена уязвимость, позволяющая получить контроль над сайтом
  • Комитет IETF (Internet Engineering Task Force), занимающийся развитием протоколов и архитектуры интернета, завершил формирование RFC для протокола ACME (Automatic Certificate Management Environment) […]

    Некоммерческий удостоверяющий центр Let’s Encrypt, контролируемый сообществом и предоставляющий сертификаты безвозмездно всем желающим, подвёл итоги прошедшего года и рассказал о планах на 2019 год. […]

  • Вышла новая версия Libreoffice – Libreoffice 6.2