KVM

Настройка Libvirt QEMU и стека KVM в Debian

Настройка Libvirt QEMU и стека KVM в Debian
Виртуализация на основе QEMU-KVM лежит в основе стека виртуализации на базе Linux. Это бесплатная программа с открытым исходным кодом, которая является одной из самых распространенных технологий виртуализации в отрасли. Большинство поставщиков облачных услуг используют KVM и не зря. Он предлагает очень эффективный и в то же время очень безопасный стек виртуализации, и не требует запутанного лицензирования. Это не относится к вашей типичной настройке Hyper-V или VMWare. Однако компромисс заключается в том, что настройка может быть очень сложной, особенно для неопытных пользователей. Эта статья призвана уменьшить эту сложность для читателя.

С учетом сказанного, давайте попробуем настроить наш собственный гипервизор KVM на сервере Debian 9 .

Включение расширений VT-x или AMD-V

В идеале вам понадобится чистая установка вашего любимого дистрибутива Linux на машину (не виртуальную машину) с довольно современным процессором. Большинство современных процессоров Intel поддерживают расширения VT-x, и аналогично AMD имеет расширения AMD-V. Эти расширения представляют собой «улучшения», встроенные прямо в кристалл вашего ЦП, что обеспечивает более быструю и безопасную виртуализацию. Вы должны включить эти расширения из меню BIOS / UEFI материнской платы. Обратитесь к руководству по материнской плате для получения дополнительной информации.

Если вы не хотите испортить свою идеально работающую рабочую станцию ​​Linux, вы можете использовать виртуальную машину в облаке для проведения этих экспериментов. DigitalOcean, например, предлагает виртуальные машины с включенной вложенной виртуализацией. Это позволяет запускать виртуальные машины внутри виртуальной машины, размещенной в облаке (это называется вложенной виртуализацией). Очевидно, это будет очень неэффективный способ практически запустить гипервизор, но в качестве эксперимента он подойдет. Убедитесь, что у вас есть как минимум 4 ГБ памяти и более 2 процессоров.

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

$ lscpu
… .
Виртуализация: VT-x
… .

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

Установка KVM и QEMU

KVM (или виртуальная машина на основе ядра) состоит из нескольких модулей ядра Linux, которые будут использовать расширения ЦП, которые мы включили ранее. QEMU, с другой стороны, состоит из набора пользовательских программ, которые предоставляют нам возможности эмуляции. В качестве автономного программного обеспечения QEMU можно использовать для запуска программ с одной архитектуры, например ARM, на другой, например x86_64, и наоборот. Его можно использовать для запуска чего угодно, от одного двоичного файла до полной операционной системы.

Разумеется, мы будем использовать его только для виртуализации операционных систем x86_64 на платформе x86_64. А для этого нам понадобится всего один пакет:

$ sudo apt install qemu-kvm

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

$ lsmod | grep kvm
kvm_intel 200704 0
квм 598016 1 квм_интел
irqbypass 16384 1 квм

Теоретически это все, что вам нужно. Но вы скоро поймете, что это практично. Виртуальные машины чрезвычайно сложны, и нам требуется программная оболочка для управления всеми различными требованиями, такими как работа в сети, управление файловой системой и т. Д., В достаточно автоматизированном (и масштабируемом) виде. Для этого нам понадобится библиотека / демон виртуализации Libvirt.

Установка Libvirt

Libvirt - важнейшая часть вашего стека виртуализации. Демон libvirtd запускает службы, связанные с виртуализацией, в фоновом режиме. Сервисы, которые прослушивают такие запросы, как «Создать виртуальную машину», «Уничтожить виртуальную машину», «Создать сеть» и т. Д. И выполняют их в них с помощью основных утилит Linux, таких как двоичные файлы qemu, iptables и т. Д.

Libvirt очень универсален и может использоваться для управления гостевыми KVM, контейнерами LXC и стеком виртуализации Xen. На данный момент мы просто сосредоточимся на Libvirt для гостей KVM. Libvirtd предоставляет API, который может использоваться приложениями с графическим интерфейсом, такими как virt-manager или oVirt, или инструментами командной строки, такими как virt-install, virsh и т. Д. Мы можем написать даже наших собственных клиентов, использующих тот же стандартный API.  Мы будем использовать инструменты командной строки, такие как virsh и virt-install, чтобы все было стандартизировано.

Установим все эти инструменты:

$ apt установить libvirt-clients libvirt-daemon-system virtinst

Нам также понадобится еще один пакет libguestfs-tools, который поможет нам редактировать или модифицировать жесткие диски и файловые системы гостевых виртуальных машин.

большой! Теперь мы установили весь стек и знаем, как устроена архитектура. Чтобы использовать libvirt (и связанные с ним инструменты), добавьте своего пользователя в группы libvirt-qemu и libvirt.

$ sudo usermod -aG libvirt
$ sudo usermod -aG libvirt-qemu

Или запустите команды от имени пользователя root.

Virsh и запуск сети по умолчанию

Утилита командной строки virsh - это то, что вы будете часто использовать при управлении своими виртуальными машинами. Вы можете просто ввести virsh и перейти в интерфейс командной строки virsh или ввести virsh [Опции] из вашей обычной оболочки. Просмотрите вывод справки virsh всякий раз, когда вы застряли в какой-либо операции, связанной с виртуальной машиной.

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

$ virsh net-autostart по умолчанию
$ virsh net-start по умолчанию

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

$ virsh net-dumpxml по умолчанию

По умолчанию
3d723dc6-49a4-4f73-bf6d-623d6b46b099












Файл xml может показать вам диапазон возможных IP-адресов и то, как они будут связываться с внешним миром. По сути, трафик будет поступать к ним через NAT, и они не будут частью внешней сети вашего хоста. Вы можете использовать мостовую сеть, чтобы открыть каждую виртуальную машину в локальной сети хоста.

Чтобы запустить виртуальную машину

Чтобы запустить виртуальную машину, нам понадобится установочный носитель (например, установочный ISO-образ для любой операционной системы) и сколько процессоров и сколько памяти необходимо выделить для виртуальной машины, и нужен ли ей VNC. На этом шаге вы действительно можете оценить установщик с графическим интерфейсом, такой как virt-manager, однако мы сделаем это с помощью довольно сложной команды virt-install.

Мне нравится хранить все мои загрузочные носители в / var / lib / libvirt / boot, а все виртуальные машины и их виртуальный жесткий диск в / var / lib / libvirt / images (расположение по умолчанию), это упрощает организацию.

$ cd / var / lib / libvirt / загрузка
$ wget http: // релизы.убунту.com / 18.04.2 / убунту-18.04.2-рабочий стол-amd64.iso

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

Чтобы создать новую виртуальную машину и загрузить ее, выполните:

$ virt-install --virt-type kvm \
--имя myVM \
--память 2048 --vcpus = 2 \
--cdrom / var / lib / libvirt / загрузка / ubuntu-18.04.2-рабочий стол-amd64.iso \
--размер диска = 40 \
--графика vnc, listen = 0.0.0.0, порт = 5900 \
--noautoconsole

Приведенная выше команда действительно сложна. Я предлагаю сохранить эти команды в текстовых файлах и запускать их как исполняемые скрипты всякий раз, когда вы создаете новую виртуальную машину. Большинство параметров, таких как virt-type и virt-name, не требуют пояснений. Их просто утомительно записывать.

Последний вариант для отображения VNC запустит сервер VNC и позволит вам получить консольный доступ к вашей виртуальной машине удаленно, подключившись к порту хоста 5900. Откройте клиент VNC на рабочем столе и перейдите к IP-адресу вашего KVM-хоста на порту 5900. Убедитесь, что вы достигли IP-адреса хоста, а не IP-адреса виртуальной машины. Ваш VNC подключится к видеовыходу вашей виртуальной машины, и вы сможете продолжить установку.

Куда дальше?

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

Иногда вам придется физически удалить файлы жесткого диска, сохраненные в / lib / libvirt / images, даже после удаления виртуальной машины из libvirt. Для дальнейшей автоматизации попробуйте импортировать образы qcow2, которые используются в большинстве дистрибутивов Linux, таких как Ubuntu и CentOS. В них предустановлена ​​ОС.

Заключение

Настроить это нигде так просто, как настроить VirtualBox, и причина этого многочисленна. Большая часть стека сложна, потому что он спроектирован как модульный и хорошо масштабируемый. Он не делает никаких предположений относительно того, где вы запускаете виртуальную машину. Среда может быть персональным компьютером или центром обработки данных. Работа с графическим интерфейсом может в некоторой степени снизить эту сложность. Однако эти системы предназначены для работы с REST API для подключения к биллинговым системам вашей организации, системам мониторинга и т. Д. После развертывания к ним почти никогда не прикасаются люди.

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

Как использовать Xdotool для стимулирования щелчков мыши и нажатия клавиш в Linux
Xdotool - это бесплатный инструмент командной строки с открытым исходным кодом для имитации щелчков мыши и нажатия клавиш. В этой статье будет краткое...
5 лучших эргономичных компьютерных мышей для Linux
Вызывает ли длительное использование компьютера боль в запястье или пальцах?? Вы страдаете от скованности суставов и постоянно должны пожимать руки? В...
Как изменить настройки мыши и сенсорной панели с помощью Xinput в Linux
Большинство дистрибутивов Linux по умолчанию поставляются с библиотекой libinput для обработки событий ввода в системе. Он может обрабатывать события ...