С учетом сказанного, давайте попробуем настроить наш собственный гипервизор 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 kvmkvm_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 net-autostart по умолчанию$ virsh net-start по умолчанию
Это запустит сеть по умолчанию и обеспечит ее автоматический запуск при перезагрузке хоста. Чтобы узнать подробности об этой сети по умолчанию, используйте команду:
$ virsh net-dumpxml по умолчаниюФайл 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. Просмотрите официальную документацию и напишите свой собственный крутой скрипт, чтобы развернуть парк виртуальных машин, и дайте нам знать, если вы нашли это руководство полезным.