+7 495 230 03 03 8 800 222 50 03
DevOps

Установка KVM на ubuntu

В данной инструкции используется железный сервер с установленной ОС Ubuntu 22.04 LTS. Главным условием для запуска KVM является наличие процессора с поддержкой аппаратной виртуализации (Vt-d+Vt-x, AMD-V). Обратите внимание, что количество ресурсов, требуемых для дальнейшей эксплуатации KVM варьируется в зависимости от задач. Для подключения по SSH будем использовать машину на Windows 10 LTSC.

Подготовка сервера

Ищем и применяем обновления, если такие уже появились:

sudo apt update && sudo apt upgrade

Установка и настройка ключей ssh

Устанавливаем ssh для удалённого управления (если ещё не установлен):

sudo apt install ssh

Проверяем, запустился ли сервис:

sudo systemctl status ssh

Сервис должен быть в состоянии Active.

Настроим безопасную аутентификацию по ключам:

ssh keygen -t  rsa

Сохраняем ключи в предлагаемую директорию, а затем разрешим подключаться по приватному ключу:

touch ~/.ssh/authorized_keys && cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys

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

Если локальная машина на Linux, то достаточно скопировать в ключ поддиректории домашней папки пользователя

Если локальная машина на ОС Windows, то необходимо создать отдельную папку для ключей, и дать права ТОЛЬКО на пользователя, из-под которого заходите по ssh.

Для этого создаём папку, заходим в Свойства -> Безопасность -> Дополнительно -> Отключить наследование -> Удалить все унаследованные разрешения из этого объекта.

Затем в этом же окне добавляем себя: Добавить” -> “Выберите субъект” -> “Дополнительно” -> ищем пользователя -> OK.

Выбираем права полный доступ” -> OK.

Затем в созданную папку с модифицированными копируем приватный ключ, команда выглядит так:

scp <имя_пользователя>@<имя_хоста_или_IP>:/home/<имя_пользователя>/.ssh/id_rsa %папка_на_локальном_компьютере%id_rsa

Теперь заходим на наш сервер по приватному ключу:

ssh <имя_пользователя>@<имя_хоста> -i <расположение-ключа>

Пример:

ssh efsol_it@efsol-vm -i C:Usersefsol_itssh_keysid_rsa

Проверяем успешна ли прошла аутентификация и в случае успеха продолжаем настраивать сервер:

Установка виртуализации

Устанавливаем пакеты:

sudo apt install qemu qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager libvirt-daemon virt-top libguestfs-tools libosinfo-bin qemu-system

По завершению проверяем статус сервиса виртуализации:

sudo systemctl status libvirtd

Статус должен быть Active.

Установка панели управления cockpit

Для облегчения эксплуатации хост-машины установим панель управления cockpit:

sudo apt install cockpit-machines

Теперь нужно проверить статус сервиса cockpit:

sudo systemctl status cockpit

Дополнительно проверим работу сервиса, зайдя по адресу в браузере по ссылке: https://ip-адрес-машины:9090.

Если всё установилось правильно, то увидим страницу авторизации.

Также нужно убедиться, что модуль vhost_net включён и работает:

lsmod | grep vhost

Назначаем права на текущего пользователя

Если нужно назначить права управления виртуализацией на текущего не-root пользователя, то вводим следующие команды:

sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER

Если нужно назначить на другого пользователя, то $USER заменяем на имя требуемого пользователя.

Настройка сети

Мост с именем virbr0 создается в процессе установки. Это устройство использует NAT для подключения компьютеров гостей к внешнему миру.

brctl show

Отображает все мосты, к которым подключены гостевые машины.

При создании мостов всё управление сетью на хост-машине осуществляется в ручном режиме и изменения необходимо вносить в /etc/netplan/01-network-manager-all.yaml. В общем случае мы имеем 1 интерфейс управления и доп.интерфейсы для создания мостов и проброса сети в виртуальные машины.

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

ip a

Далее редактируем файл:

sudo nano nano /etc/netplan/01-network-manager-all.yaml

Примерное содержание:

# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      dhcp4: false
      dhcp6: false
      addresses: [192.168.0.26/24]
      gateway4: 192.168.0.1
      mtu: 1500
      nameservers:
        addresses: [8.8.8.8]
    enp0s8:
      dhcp4: false
      dhcp6: false

  bridges:
    br0:
      interfaces: [enp0s8]
      addresses: [192.168.0.22/16]
      mtu: 1500
      nameservers:
        addresses: [8.8.4.4, 8.8.8.8]
      parameters:
        stp: true
        forward-delay: 4
      dhcp4: no
      dhcp6: no

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

Важно! Если машина подключена к VLAN, то интерфейсом моста нужно выбрать именно vlan. В таком случае, конфигурация будет выглядеть примерно так:

# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      dhcp4: false
      dhcp6: false
      addresses: [192.168.0.26/24]
      gateway4: 192.168.0.1
      mtu: 1500
      nameservers:
        addresses: [8.8.8.8]
    enp0s8:
      dhcp4: false
      dhcp6: false

  vlans:
    vlan252:
    id: 252
    link: enp0s8
    dhcp4: false
    dhcp6: false

  bridges:
    br0:
      interfaces: [vlan252]
      addresses: [10.15.252.21/24]
      routes: 
        - to: default
          via: 10.15.252.254
      nameservers:
        addresses: [8.8.4.4, 8.8.8.8]

Также назначаем маршрут по умолчанию, где в параметр via вписываем адрес сетевого шлюза в vlan.

Затем применяем настройки:

sudo netplan generate
sudo netplan apply

Возможно кратковременное прерывание связи с сервером, так что придётся переподключиться по ssh. Теперь нужно проверить, что настройки применились:

ip a

Должен появиться новый интерфейс br0 с адресом 192.168.0.22, а у интерфейса enp0s8 адрес исчез. Значит настроено корректно. Далее необходимо сообщить службе виртуализации что она может использоваться новый сетевой интерфейс. Создаем файл host-bridge0.xml:

<network>
  <name>host-bridge0</name>
  <forward mode="bridge"/>
  <bridge name="br0"/>
</network>

Применяем настройки. Определяем интерфейс:

virsh net-define host-bridge0.xml

Запускаем:

virsh net-start host-bridge0

Настраиваем автозапуск:

virsh net-autostart host-bridge0

Создание ВМ

Скачиваем .iso-файл нужной ОС и размещаем его в директории с общими правами доступа для всех:

sudo chmod 777 -R /vm/images
sudo chmod 777 /vmhttps://efsol.ru/images/ubuntu2204.iso

Далее создаём виртуальную машину. Команда на создание ВМ будет выглядеть примерно так:

virt-install 
--virt-type=kvm 
--name ubuntu22.04 
--ram 2048 
--vcpus=2 
--os-variant=ubuntu22.04 
--hvm 
--cdrom /vmhttps://efsol.ru/images/ubuntu2204.iso 
--network=bridge:br0,model=virtio 
--graphics vnc,listen=0.0.0.0 
--disk path=/var/lib/libvirthttps://efsol.ru/images/ubuntu2204.qcow2,size=10,bus=virtio,format=qcow2

Расшифровка основных параметров:

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

Если все параметры указаны корректно, то установка продолжится в окне клиента VNC, либо же можно подключиться через панель управления cockpit.

Установка VM с ОС Windows 10

У Windows нет OOB-поддержки виртуальных дисков qcow2, создаваемых kvm, поэтому необходимо установить драйвера virtio, скачать iso-образ.

Чтобы подключить с диск с драйверами, в команду необходимо добавить ещё один параметр –disk:

virt-install 
--virt-type=kvm 
--name windows10 
--ram 4096 
--vcpus=4 
--os-variant=win10 
--hvm 
--cdrom /vmhttps://efsol.ru/images/windows10.iso 
--network=bridge:br0,model=virtio 
--graphics vnc,listen=0.0.0.0 
--disk path=/var/lib/libvirthttps://efsol.ru/images/windows10.qcow2,size=30,bus=virtio,format=qcow2
--disk /vmhttps://efsol.ru/images/virtio-win.iso,device=cdrom,bus=sata --boot cdrom

В процессе установки Windows предложит поискать драйвера в расположении, которое потребуется указать.

Настройку и обслуживание KVM мы можем взять на себя. Оставьте заявку или напишите в чат!


Дата публикации: 1 марта 2023
Не нашли ответа на свой вопрос?

Смотрите также

Обсуждение материала

Содержание

Заказать звонок

Оставьте свои данные для того, чтобы специалист с вами связался.

*нажимая на кнопку, Вы даете согласие на обработку персональных данных
Быстрое внедрение включает:
На сервере установлено следующее ПО (доступно при подключении по протоколу RDP):
Также настроено:
Перед внедрением клиент предоставляет информацию о пользователях (логины и пароли). После завершения работ, клиенту высылается инструкция и ярлык для подключения.
Индивидуальное внедрение по ТЗ клиента обсуждается отдельно.