KVM (Kernel-based Virtual Machine) — это инструмент с открытым исходным кодом, использующийся для виртуализации. Он отличается высоким уровнем интеграции с операционными системами семейства GNU / Linux. Данное приложение представляет собой загружаемый модуль ядра, который модифицирует вашу ОС в гипервизор Типа 1 (bare-metal). С помощью него можно создавать платформу для запуска виртуальных машин (ВМ).
Как работает KVM
Для начала поговорим про основные принципы, на базе которых реализована KVM. Начнем с того, что все виртуальные системы в ней обособлены как отдельные процессы Linux. То есть все они обладают своим виртуальным аппаратным обеспечением:
- процессором;
- оперативной памятью;
- сетевой картой;
- жестким диском.
Также каждая виртуальная машина управляется ядром.
С помощью KVM можно реализовать вложенную виртуализацию, запуская виртуальные системы в уже работающих виртуальных системах. Это приложение может эмулировать различное аппаратное обеспечение архитектуры x86 и поддерживает средства аппаратной виртуализации — Intel VT и AMD-V. В результате чего она обладает рядом следующих преимуществ:
- эффективная изоляция виртуальных систем и повышенный уровень безопасности;
- использование SELinux (Security-Enhanced Linux) с технологией sVirt, обеспечивающей безопасную виртуализацию;
- наследование функции управления памятью ядра;
- миграция в автономном режиме в реальном времени (передачи активной виртуальной системы между разными физическими хостами).
Все это и многое другое делает KVM стандартным инструментом многих системных администраторов и других IT-специалистов по всему миру.
Установка KVM на Fedora / CentOS / RHEL 8
Сперва следует проверить, поддерживает ли Ваше аппаратное обеспечение технологию виртуализации. Для этого введите в командную строку Linux следующие команды:
# grep -e 'vmx' /proc/cpuinfo #Intel systems
# grep -e 'svm' /proc/cpuinfo #AMD systems
Теперь следует убедиться, что модули KVM уже загружены в ядро Вашей операционной системы. Для этого вводим следующую команду:
# lsmod | grep kvm
Пример вывода (тестовая платформа на базе Intel):
Мы решили дополнительно использовать веб-интерфейс Cockpit, с помощью которого будем создавать виртуальные системы GNU / Linux и заниматься их администрированием.
Настройка Cockpit
Cockpit — это удобный и простой в освоении инструмент, предназначенный для мониторинга и администрирования серверов под управлением Linux через веб-браузер. С его помощью можно легко выполнять следующие виды задач:
- мониторинг трафика и настройка сетевых подключений;
- управление дисковым пространством;
- создание виртуальных систем;
- чтение системных логов.
Авторизация в веб-интерфейсе этого инструмента происходит с использованием данных локальной учетной записи Вашей системы. Права доступа, которыми обладает выбранная учетная запись, определяют доступные Cockpit возможности по управлению системой. То есть для выполнения большинства операций нужно авторизоваться с помощью данных аккаунта, имеющего права суперпользователя (sudo).
Системы под управлением дистрибутивов CentOS 8 и RHEL 8 уже содержат установленный и активированный инструмент Cockpit. Если приложение отсутствует, его поможет установить простая команда dnf
.
Также для работы с виртуальными системами на основе Libvirt следует установить соответствующее расширение cockpit-machines. Для этого введите в командную строку следующую команду:
# dnf install cockpit cockpit-machines
Далее нужно дождаться установки указанного пакета, после чего можно активировать сокет Cockpit:
# systemctl start cockpit.socket
Также важно настроить его автозапуск после включения системы:
# systemctl enable cockpit.socket
Теперь следует проверить статус сокета, чтобы убедиться в его работоспособности. Для этого введите в консоль следующую команду:
# systemctl status cockpit.socket
Далее добавьте службу Cockpit в исключения Вашего брандмауэра и перезагрузите его. Для этого введите команду firewall-cmd
:
# firewall-cmd --add-service=cockpit --permanent
# firewall-cmd --reload
Теперь запустите свой веб-браузер и введите в адресную строку следующий URL-адрес:
https://ваш_ip_адрес:9090/
В результате у Вас должен открыться веб-интерфейс Cockpit. Стоит отметить, что данный инструмент использует самозаверенный сертификат SSL для включения HTTPS. То есть, для доступа к нему Вам нужно в ответ на предупреждение от браузера подтвердить свои действия. В результате Вы должны увидеть окно авторизации, куда можно ввести данные вашей учетной записи Linux.
Если Вы правильно ввели свои данные и правильно выполнили предыдущие шаги — откроется веб-консоль приложения.
Установка модуля виртуализации KVM на CentOS 8
Следующий шаг — установка модуля виртуализации. Для этого воспользуемся следующей командой:
# dnf module install virt
Также нужно установить некоторые пакеты. Например, virt-install позволит Вам легко создавать виртуальные системы через интерфейс командной строки. А пакет virt-viewer — позволяет осуществлять мониторинг существующих виртуальных машин. Для их установки введите:
# dnf install virt-install virt-viewer
Стоит проверить, сконфигурирован ли хост для активации драйверов гипервизора Libvirt. Для этого предназначена команда virt-host-validate
:
# virt-host-validate
Осталось запустить демон Libvirt при помощи команды:
# systemctl start libvirtd.service
Его обязательно нужно добавить в список приложений, автоматически запускающихся при включении системы:
# systemctl enable libvirtd.service
Рекомендуем дополнительно убедиться в работоспособности Libvirt, проверив его статус:
# systemctl status libvirtd.service
Настройка сетевого моста в Cockpit
Теперь поговорим о том, как создать виртуальный сетевой коммутатор — сетевой мост. Он нужен для того, чтобы подключить виртуальные машины к той же сети, в которой работает хост.
После запуска демона Libvirt, в качестве сетевого интерфейса по умолчанию активируется virbr0. Это виртуальный сетевой коммутатор, работающий в NAT-режиме.
Специально для этой статьи мы создадим сетевой интерфейс в режиме моста с именем bridge0. Он обеспечит присутствие виртуальных систем в сети, к которой подключен хост-компьютер.
Сперва зайдем в веб-интерфейс Cockpit и там выберем пункт панели инструментов «Сети» (Networking). После этого выберем подпункт «Добавить мост» (Add Bridge).
Далее Вы должны увидеть всплывающее окно. В нем нужно указать следующие данные:
- имя моста;
- подчиненные устройства моста или портовые устройства (к примеру — enp4s0f0, интерфейс Ethernet).
После этого нажмем кнопку «Принять» (Apply).
В списке доступных интерфейсов должен появиться Ваш мост. Спустя пару секунд интерфейс Ethernet будет деактивирован.
Создание виртуальных машин и управление ими через Cockpit
Для начала вернитесь в панель инструментов Cockpit. Там выберите пункт «Виртуальные машины» (Virtual Machines) — Вы должны увидеть подпункт «Создать ВМ» (Create VM).
Снова появится всплывающее окно, куда вводим следующие параметры новой виртуальной машины:
- Имя (Name, например – CentOS_8_DB);
- Тип установки (указываем с ISO образа);
- Источник установки (указываем путь где лежит ISO образ);
- Операционная система (Определяется автоматически)
- Хранилище (я выбираю Create new raw volume);
- Размер хранилища (указываем необходимое значение под виртуальную машину);
- память (указываем необходимое значение ).
Важно: данные о поставщике операционной системы и о самой ОС автоматически заполнялся после указания источника для установки.
Также, очень важно, если у вас на виртуалке будет реальный IP, то выберите пункт Create and edit чтобы до запуска установки, настроить сеть!
В результате Ваша виртуальная машина должна автоматически запуститься с использованием указанного ISO-образа. После этого можно продолжить установку ОС.
Нажатие кнопки «Сетевые интерфейсы» (Network Interfaces) на панели управления виртуальной машиной покажет Вам, что в качестве источника используется созданный ранее мост.
Если вы хотите, чтобы ваша машина получала IP автоматически перейдите по ссылке сеть
Далее жмем на Создать виртуальную сеть в открывшемся окне вводим:
- Имя (Название виртуальной сети)
- Режим пересылки (выбираем NAT)
- Устройство (выбираем ранее созданный мост bridge0)
- Настройка IP (выбираем только IPv4 или оба IPv4 и IPv6)
- IPv4 (указываем IP адрес виртуальной машины)
- Маска или длина префекса (указываем 24 что равнозначно 255.255.255.0)
- Ставим галку Задать диапазон DHCP и указываем диапазон выделяемых IP адресов как на рисунке
В настройках сети виртуальной машины указываем следующее
- Тип интерфейса (Virtual network)
- Источник (указываем название созданной виртуальной сети IN)
- Модель (выбираем virtio)
В принципе все, можно приступать к установке и настройке
Если же у вас предусмотрен внешний IP адрес для каждой виртуальной машины, то необходимо следующее. В настройках сетевого интерфейса
- Тип интерфейса (Bridge to LAN)
- Источник (bridge0)
- Модель (выбираем virtio)
А далее при установке ОС необходимо вручную указать IP адрес, маску и шлюз. Для простоты в CentOS есть замечательная утилита NMTUI.
Защитите ваш Cockpit
Cockpit работает на популярном порту 9090 и поэтому лучше сменить порт в целях безопасности. Создадим директорию в которой будет храниться файл listen.conf
mkdir -p /etc/systemd/system/cockpit.socket.d/
mcedit /etc/systemd/system/cockpit.socket.d/listen.conf
И добавляем в него следующее содержимое
[Socket]
ListenStream=
ListenStream=4433
где 4433 наш новый порт, сохраняем и выходим, и наконец, перезапустите службы, чтобы изменения вступили в силу:
systemctl daemon-reload
systemctl restart cockpit.socket
Не забудьте внести изменения в ваш firewall, чтобы вы смогли войти
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="ваш_ip_адрес" port port="4433" protocol="tcp" accept'
firewall-cmd --reload