Виртуализация при помощи virtualbox kvm

Подробная настройка виртуальной машины.

Обзор.

Выбрать набор микросхем q35. Он лучше поддерживает проброс.

Выбрать прошивку (firmware) ovmf — OVMF_CODE.fd.

Применить изменения.

Информация об ОС.

Убедиться, что выбрано Windows 10, так как это подтягивает мета-информацию, которая влияет на доступные настройки Virt-manager и libvirt.

Процессоры.

В этой вкладке указывается число потоков, конфигурация (модель процессора) и топология процессора. В данном примере копируется конфигурация хоста с разделением на 8 потоков: 4 ядра умножаются на 2 потока, что имитирует гиперпоточность.

Для гостя выделяется 16384 Мб ОЗУ. Всего в системе 32 Гб.

Параметры загрузки.

Переставить SATA CDROM 1, к которому примонтирован установочный образ, на первое место, тем самым повысив приоритет загрузки:

Иначе процесс установки не сможет начаться. Можно будет лишь наблюдать интерфейс UEFI Interactive Shell, в котором придётся указать путь до загрузочной области вручную:

SATA Диск 1.

Ранее созданный виртуальный накопитель подключается через эмуляцию шины SATA:

В параметрах производительности переключить «Режим кэширования» на «none», а «Режим ввода-вывода» на «native». Это улучшит отзывчивость и позволит избежать потери данных при принудительном выключении виртуальной машины.

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

SATA CDROM 1.

Эмуляция CD-ROM устройства, подключенного по шине SATA. В него примонтирован установочный образ.

После установки гостевой ОС устройство SATA CDROM 1 можно удалить.

Если используется обычная конфигурация сети, то можно оставить как есть.

Планшет.

Подобные устройства правильнее пробрасывать в виртуальную машину. Поэтому эмулируемое устройство лучше удалить.

Дисплей VNC.

Заменить VNC на «Сервер SPICE» и убрать прослушивание (Listen type), так как виртуализация будет локальной:

Этот протокол более предпочтителен, когда требуется передача звука от гостя к хосту. Так же у него нет проблемы с «залипанием» курсора по краям экрана.

Для Windows-гостей это не требуется, поэтому лучше удалить.

Видео QXL.

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

Controller USB 0.

Оставить по умолчанию.

Теперь всё готово для установки ОС, останется нажать кнопку «Начать установку».

После подтверждения будет запущена виртуальная машина с процессом установки:

Курсор из окна виртуальной машины освобождается комбинацией Ctrl + Alt.

С установкой Win10 предлагаю разобраться самостоятельно. Основная сложность в том, что каждое крупное обновление появляются всё новые и новые преграды для отказа от навязываемой учётной записи MS и прочего «ненужно». На момент 2021 года только для отказа от некоторой(!) части телеметрии предлагается снять более десятка галочек, которые, как в головоломке, надёжно спрятаны в графическом интерфейсе и разнесены на несколько окон. Стоит отметить, что без применения спецсредств отключить основную массу телеметрии невозможно.

После установки и завершения работы виртуальной машины можно удалить SATA CDROM 1:

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

В данной инструкции рассмотрим использование сетевого моста.

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

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

yum install bridge-utils

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

ip a

В моем примере были следующие данные:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp4s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:16:76:04:26:c6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.24/24 brd 192.168.1.255 scope global enp4s0f0
       valid_lft forever preferred_lft forever
    inet6 fe80::216:76ff:fe04:26c6/64 scope link
       valid_lft forever preferred_lft forever
3: enp5s5: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:16:76:04:26:c7 brd ff:ff:ff:ff:ff:ff
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 52:54:00:cd:86:98 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
    link/ether 52:54:00:cd:86:98 brd ff:ff:ff:ff:ff:ff

* из этого для нас важны enp4s0f0 — реальный сетевой интерфейс с настроенным IP-адресом 192.168.1.24, через который идет подключение сервера к локальной сети (из него мы будем делать мост); 00:16:76:04:26:c6 — mac-адрес реального ethernet адаптера; virbr0 — виртуальный сетевой адаптер.

Редактируем настройки реального адаптера:

vi /etc/sysconfig/network-scripts/ifcfg-enp4s0f0

Приводим его к виду:

ONBOOT=yes
BRIDGE=br0
TYPE=Ethernet
DEVICE=enp4s0f0
BOOTPROTO=none

Создаем интерфейс для сетевого моста:

vi /etc/sysconfig/network-scripts/ifcfg-br0

DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.24
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=77.88.8.8

Перезапускаем сетевую службу:

systemctl restart network

Сетевые настройки должны измениться — в моем случае:

2: enp4s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000
    link/ether 00:16:76:04:26:c6 brd ff:ff:ff:ff:ff:ff
3: enp5s5: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:16:76:04:26:c7 brd ff:ff:ff:ff:ff:ff
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 52:54:00:cd:86:98 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
    link/ether 52:54:00:cd:86:98 brd ff:ff:ff:ff:ff:ff
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 00:16:76:04:26:c6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.24/24 brd 192.168.1.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::216:76ff:fe04:26c6/64 scope link
       valid_lft forever preferred_lft forever

Настаиваем перенаправления сетевого трафика:

vi /etc/sysctl.d/99-sysctl.conf

net.ipv4.ip_forward=1

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

sysctl -p /etc/sysctl.d/99-sysctl.conf

Перезапускаем libvirtd:

systemctl restart libvirtd

Особенности виртуализации для ядра Linux

Для исполнения прямых аппаратных запросов в ОС должна иметься библиотека, которая направляла бы эти запросы аппаратной части напрямую. На платформах базы Linux долгое время никакой встроенной системы виртуализации (встроенного гипервизора), просто не существовало. Каждый производитель ПО для виртуализации, который поддерживало технологию аппаратной виртуализации, вынуждены были создавать собственные модули для ядра Linux (vboxdrv в Virtualbox, vmware-service в VMWare и пр.) Естественно, это не могло продолжаться вечно, и компания Qumranet, Inc, выкупленая затем Radhat создала ассоциацию Open Virtualization Alliance, которая была признана решить проблему отсутствия базового гипервизора для ядра Linux. Так и был создан гипервизор KVM или Kernel-based Virtual Machine.

Реализация

Гипервизор KVM представляет из себя загружаемый модуль ядра Linux, который предназначен для обеспечения виртуализации на платформе Linux x86. Сам модуль содержит компонент собственно виртуализации(kvm.ko), и процессорно-специфический загружаемый модуль kvm-amd.ko либо kvm-intel.ko.

Необходимым условием для использования KVM является поддержка инструкций виртуализации — Intel VT либо AMD , и ядро Linux версии 2.6.20 и выше. Существует также порт KVM под Free-BSD. Для вызова KVM традиционно используется QEMU, но также ведутся попытки добавить поддержку KVM в Virtualbox.

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

KVM позволяет виртуальным машинам использовать немодифицированные образы дисков QEMU, VMware и других, содержащие операционные системы. Каждая виртуальная машина имеет своё собственное виртуальное аппаратное обеспечение: сетевые карты, диск, видеокарту и другие устройства.

Роль снимков KVM

1. Горячий резерв 2. Аварийное восстановление 3. Вернуться к определенному состоянию в истории

Место использования снимка

Есть два типа снимков kvm: Метод 1. Используйте моментальный снимок lvm, если раздел — lvm, вы можете использовать lvm для выполнения резервного копирования моментального снимка kvm Метод 2. Используйте изображение в формате qcow2 для создания снимка.

Создать снимок KVM

Примечание. В рамках centos6 виртуальная машина kvm по умолчанию использует формат изображений в необработанном формате, который имеет лучшую производительность и максимальную скорость. Недостатком является то, что она не поддерживает некоторые новые функции, такие как поддержка зеркалирования, сжатие zlib диска, шифрование AES и т.Для использования функции моментального снимка формат диска должен быть qcow2.

Просмотр формата диска
Создать снимок
Синтаксис для создания снимка: virsh snapshot — создать имя виртуальной машины
Синтаксис имени при создании снимка: virsh snapshot-create-as имя виртуальной машины KVM имя снимка (имя снимка также поддерживает китайский язык)
Просмотр списка снимков образа виртуальной машины
Просмотр последнего использованного снимка
Место хранения файла конфигурации моментального снимка
Посмотреть размер снимка
Восстановить снимок
Удалить снимок
часто используемые команды virsh
Экспорт файла конфигурации виртуальной машины centos7.0
Повторно добавьте виртуальную машину в список каталогов virt-manager

Базовые команды управления ВМ

1. Получить список созданных машин:

virsh list —all

2. Включить / перезагрузить / выключить.

а) включить виртуальную машину можно командой:

virsh start FirstTest

* где FirstTest — имя созданной машины.

б) перезагрузить:

virsh reboot FirstTest

* посылает команду операционной системе на корректную перезагрузку.

в) выключить корректно:

virsh shutdown FirstTest

* посылает команду операционной системе на корректное выключение.

г) выключить принудительно:

virsh destroy FirstTest

* грубо выключает ВМ. Может привести к потере данных. Способ стоит применять при полном зависании виртуалки.

д) приостановить:

virsh suspend FirstTest

Для возобновления работы вводим команду:

virsh resume FirstTest

е) отправить команду всем гостевым операционным системам:

for i in $(virsh list —name —state-shutoff); do virsh start $i; done

for i in $(virsh list —name —state-running); do virsh shutdown $i; done

* первыя команда запустит все ВМ, вторая — отправит команду на выключение.

3. Разрешаем автостарт для созданной ВМ:

virsh autostart FirstTest

4. Удаление виртуальной машины:

Удаляем виртуальную машину:

virsh undefine FirstTest

Удаляем виртуальный жесткий диск:

\rm /kvm/images/FirstTest-disk1.img

* где /kvm/images — папка, где хранится диск; FirstTest-disk1.img — имя виртуальног диска для удаленной машины.

5. Редактирование конфигурации виртуальной машины:

Открыть редактор для изменения конфигурации:

virsh edit FirstTest

Также можно менять параметры из командной строки. Приведем несколько примеров для работы с виртуальной машиной FirstTest.

а) изменить количество процессоров:

virsh setvcpus FirstTest 2 —config —maximum

virsh setvcpus FirstTest 2 —config

б) изменить объем оперативной памяти:

virsh setmaxmem FirstTest 2G —config

virsh setmem FirstTest 2G —config

6. Работа со снапшотами

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

virsh snapshot-create-as —domain FirstTest —name FirstTest_snapshot_2020-03-21

* где FirstTest — название виртуальной машины; FirstTest_snapshot_2020-03-21 — название для снапшота.

б) Список снапшотов можно посмотреть командой:

virsh snapshot-list —domain FirstTest

* данной командой мы просмотрим список всех снапшотов для виртуальной машины FirstTest.

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

virsh shutdown FirstTest

После вводим:

virsh snapshot-revert —domain FirstTest —snapshotname FirstTest_snapshot_2020-03-21 —running

* где FirstTest — имя виртуальной машины; FirstTest_snapshot_2020-03-21 — имя созданного снапшота.

г) Удалить снапшот можно так:

virsh snapshot-delete —domain FirstTest —snapshotname FirstTest_snapshot_2020-03-21

7. Клонирование виртуальных машин

Для примера, склонируем виртуальную машину FirstTest и создадим новую SecondTest.

Для начала, мы должны остановить виртуалку:

virsh suspend FirstTest

После можно клонировать:

virt-clone —original FirstTest —name SecondTest —file /kvm/images/SecondTest-disk1.img

* итого, мы склонируем виртуальную машину FirstTest. Новая машина будет иметь название SecondTest, а путь до диска будет /kvm/images/SecondTest-disk1.img.

Восстанавливаем работу FirstTest:

virsh resume FirstTest

Какой диск выбрать в kvm — lvm, raw (img) или qcow2

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

LVM. Тут все понятно. Использование lvm томов в виде дисков виртуальных машин. Такой диск будет блочным устройством и должен работать быстрее всех остальных типов, так как нет лишней прослойки в виде файловой системы.

Плюсы:

  • Снэпшоты средствами самого lvm, с них легко снять бэкап без остановки виртуальной машины.
  • Максимальное быстродействие.
  • Легко изменить размер диска.

Минусы:

  • Более сложное управление по сравнению с дисками в виде отдельных файлов.
  • Менее гибкое управление пространством диска. Если весь диск разбить на lvm разделы для виртуалок, то места на нем не останется, даже если вируталки будут пустые.
  • Более сложный перенос на другой сервер.

RAW. Это обычный формат сырых данных. Среди дисков в виде файлов это будет самый простой и быстрый вариант. Все данные пишутся как есть без дополнительных обработок и служебной информации. Формат является универсальным для большинства популярных гипервизоров.

Плюсы:

  • Максимальная простота и производительность среди образов в виде файла.
  • Универсальный формат с поддержкой в большинстве гипервизоров.
  • Легкость переноса виртуальной машины на другой сервер. Достаточно просто скопировать файл.

Минусы:

  • Не поддерживает снепшоты ни в каком виде.
  • Занимает сразу все выделенное пространство на диске, даже если внутри виртуальной машины место будет свободно. Из-за отсутствия фрагментации в некоторых случаях это может оказаться плюсом.

QCOW2. Родной формат для гипервизора QEMU. Расшифровывается как QEMU Copy-on-write. Этот формат позволяет создавать динамические диски для виртуальных машин, а так же поддерживает снепшоты. Теоретически, скорость работы должна хоть и не сильно, но уступать RAW. Как обстоит дело на практике, я не знаю, не замерял и подробно эту информацию не проверял.

Плюсы:

  • Поддержка снепшотов и динамических дисков. Как следствие — более удобное управление дисковым пространством.
  • Легкость переноса виртуальной машины на другой сервер. Достаточно просто скопировать файл.

Минусы:

Более низкая производительность, по сравнению с другими типами образов.

У каждого типа есть свои преимущества и недостатки. Lvm проще всего бэкапить, но им сложнее всего управлять. Для того, кто хорошо знаком с lvm это не проблема, если сталкиваешься первый раз, то возникает много вопросов. У raw нет снепшотов, лично для меня это большой минус, я этот формат вообще не рассматриваю. Если нет максимальной нагрузки на дисковую подсистему, то QCOW2 мне кажется наиболее приемлемым вариантом. Собственно, ниже и пойдет рассказ, как совместить удобство управления QCOW2 и простоту бэкапов и снэпшотов lvm. Я покажу, как сделать живой бэкап виртуальной машины kvm в формате qcow2 без остановки виртуальной машины.

Графическое управление[править]

Чтобы сделать некое подобие «Диспетчера Hyper-V» (Графическую консоль для управления виртуальными машинами) устанавливаем следующий пакет:

# apt-get install virt-manager

Открываем Virt-Manager. Файл>Добавить соединение>

  • Локальная машина
  • Удаленный сервер
    • QEMU/KVM-Connect to remove host over SSH
      • вводим имя пользователя
      • вводим IP
      • ставим галочку подключаться автоматически

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

  1. Нажимаем на кнопку «Создать виртуальную машину»
  2. Выбираем метод установки — локальный/ISO
  3. Выбираем ISO/CD и тип ОС (с помощью автодополнения)
  4. Выбираем количество ОЗУ и процессоров
  5. Создаем виртуальный жесткий диск
  6. Вводим название и выбираем сеть

Некоторые настройкиправить

Выберите машину, нажмите на лампу…

Настройка жесткого дискаправить

…Диск-1> Дополнительные параметры>Шина диска

Тип диска:

  • IDE — рекомендуется для Windows XP и младше
  • SATA — для 7 и старше

Включить меню загрузки> ставите очередность.

Иначе вы просто не загрузитесь с CD/ISO.

запускать при старте системы

Подключение ISOправить

…Выберите IDE CDROM> Browse.

В окне «Выберите том хранилища» нажмите на плюс (добавить пул), выберите тип dir-каталог в файловой системе и укажите папку с iso-образами.

Выберите образ из пула и нажмите на кнопку «Выбор тома».

Примечание: В качестве каталога можно указать папку прописанную в /etc/openssh — так вы легко сможете закидывать и подключать ISO-образы

NATправить

NAT — это механизм в сетях TCP/IP, позволяющий преобразовывать IP-адреса одной сети, в адрес другой сети.

Т.е. у вас в локальной сети сеть 192.168.0.x., а у виртуальных машин будет 192.168.1.x. И NAT позволит вам общатся между сетью 0.x и 1.x.

По-умолчанию в virt-manager уже есть NAT-интерфейс, но если вы его случайно удалили или хотите создать новый, то это делается так:

  • откройте Правка>Свойства подключения>Виртуальные сети>+
  • введите название сети
  • режим: NAT
  • Forward to: любое физическое устройство

Можете так же настроить адресацию IPv4 и DHCP-сервер (они настраиваются автоматически).

И в настройках виртуальной машины выберите данный интерфейс.

Мостправить

Чтобы напрямую общаться между реальной сетью и виртуальными машинами напрямую нужно создать сетевой мост.

Данный способ является наиболее правильным. Проще всего его сделать через alterator-net-bridge.

Например, br0, затем в настройках ВМ указать именно его.

//Как? Расписать…

Примечание: При этом управление сетью перейдет к etcnet и NetworkManager уже будет не нужен, его и его апплет можно удалить: apt-get remove NetworkManager NetworkManager-applet-gtk. В трее, соответственно, иконка статуса сети исчезнет.

Проброс портовправить

Из переписки:

Настроил тут проброс порта в QEMU-виртуалку. Казалось бы, в чём проблема-то?

 cmd|qemu -netdev user,id=user0,hostfwd=tcp::2222-:22 -device e1000,netdev=user0" …

как-то так (можно вместо e1000 паравиртуальный драйвер, это побыстрее будет).

Но. Я это сделал через libvirt! И оказалось, что штатными средствами (не только тыкая в менюшки virt-manager, но и, кажется, вообще прямой настройкой сети) нельзя. Не знаю, почему. Может быть, можно, но я не нашёл как. А я искал. То, что в libvirt называется NAT, в действительности садится на tun/tap, лезет в iptables и т. д. Наверное, для совместимости с другими платформами виртуализации, не знаю.

Короче.

  1. В настройках virt-manager разрешаем «Редактирование XML»
  2. Удаляем все сетевые устройства.
  3. Добавляем в конец общего XML-я виртуалки (например, во вкладке «Обзор»), перед закрывающим </domain>, такие строки:
 <qemu:commandline>
   <qemu:arg value="-netdev"/>
   <qemu:arg value="user,id=user0,hostfwd=tcp::2222-:22"/>
   <qemu:arg value="-device"/>
   <qemu:arg value="e1000,netdev=user0"/>
 </qemu:commandline>

Если неймспейс qemu не загружен, то такие:

И qemu преспокойненько само всё как надо делает. Фишка — не забыть про
иначе просто не заработает, а вам ничего не скажет)

Графикиправить

Откройте «Правка> Параметры», вкладка «Статистика», отметьте галочками, какие графики вы хотите сделать доступными.

Вкл./выкл. график вы можете через «Вид> График».

Снимок машины можно создать только если виртуальный жесткий диск у вас в формате *.qcow2.

Настройка параметров QEMU

Отредактируйте файл настроек:

/etc/libvirt/qemu.conf

# Позволит vnc слушать на всех адресах
vnc_listen = "0.0.0.0"

# Отключим tls (если виртуальны машины используются не для тестирования, то лучше tls включить и настроить)
vnc_tls = 

# Пароль по умолчанию для vnc - он будет использоваться в том случае, если для виртуальной машины не указан свой пароль
vnc_password = "XYZ12345"

# Пользователь от которого будет запускаться QEMU
user = "root"

# Группа от которой будет запускаться QEMU
group = "root"

# Формат сохранения и дампов, gzip или другое сжатие позволит уменьшить место, занимаемое образами, но притом увеличит время сохранения образов.
save_image_format = "gzip"
dump_image_format = "gzip"

Запустите демон libvirt и добавьте его в автозагрузку:

/etc/init.d/libvirtd start

rc-update add libvirtd

Также для виртуальной сети нам понадобятся модули и . Загрузите модули:

modprobe -a tun vhost_net

и добавьте их в автозагрузку:

/etc/modules-load.d/qemu.conf

tun
vhost_net

Окружение


Высокоуровневый обзор KVM/QEMU виртуального окружения

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

KVM позволяет виртуальным машинам использовать немодифицированные образы дисков QEMU, VMware и других, содержащие операционные системы. Каждая виртуальная машина имеет своё собственное виртуальное аппаратное обеспечение: сетевые карты, диск, видеокарту и другие устройства.

Импорт из сервера с VDSmanager-KVM

Для импорта нажмите Импорт → Импорт VDS → Добавить.

Укажите:

  • Есть пароль для root — опция авторизации с помощью пароля пользователя root;

  • Пароль — пароль пользователя root. Поле доступно только при включении опции Есть пароль для root;

  • IP — адрес сервера;
  • Наименование.

При успешном подключении к серверу и получении информации о виртуальных машинах сервер добавляется в список в Импорт → Импорт VDS.

Нажмите Импорт → Импорт VDS → Список VDS для просмотра виртуальных машин, которые можно импортировать. Для запуска импорта выбранных виртуальных машин нажмите Импорт.

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

  1. Наличие достаточного количества свободных ресурсов на узлах кластера.
  2. Если VDSmanager настроен на интеграцию с IPmanager, то VMmanager так же должен быть настроен на интеграцию с тем же IPmanager.
  3. VDSmanager должен работать с виртуализацией KVM.

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

Прежде чем начать установку гипервизора KVM в Ubuntu, проверим, поддерживает ли наш процессор виртуализацию. Для этого существует утилита kvm-ok. Если у вас нет ее в системе, установите пакет, который ее содержит.

sudo apt install cpu-checker
sudo kmv-ok

Если ваш процессор не поддерживает виртуализацию, то получите сообщение:

INFO: Your CPU does not support KVM extensionsKVM acceleration can NOT be used

Если же все ОК, то информация будет следующая.

В этом случае можно приступать к установке виртуализации kvm.

sudo apt install qemu qemu-kvm libvirt-daemon-system virtinst libosinfo-bin

Я устанавливаю следующие компоненты kvm:

  1. qemu и qemu-kvm — сам гипервизор
  2. libvirt-daemon-system и virtinst — утилиты для управления гипервизором и виртуальными машинами
  3. libosinfo-bin — пакет с информацией о поддержки гипервизорами различных операционных систем.

Запустим и добавим в автозагрузку сервис управления kvm:

sudo systemctl enable --now libvirtd

В целом, все. Установка KVM на Ubuntu на этом и заканчивается. Можно проверить, загрузились ли у вас модули ядра kvm.

sudo lsmod | grep -i kvm
kvm_intel 282624 0
kvm 663552 1 kvm_intel

Все в порядке, гипервизор kvm готов к работе.

Скачивание и установка KVM

Для работы KVM необходимо установить следующие пакеты (для дистрибутивов с apt):

$ apt-get install qemu-kvm libvirt-bin 

Кроме того, я настоятельно рекомендую установить дополнительно следующие пакеты:

$ apt-get install bridge-utils virt-manager python-virtinst

P.S. В различных дистрибутивах пакеты могут называться по разному. Например, virt-install может называться python-virt-install или python-virtinst. Зависимости для virt-clone, virt-image и virt-viewer должны установиться автоматически.
В отличие от того, что пишется в большинстве руководств, утилиты bridge устанавливать необязательно. Они нужны только в том случае, если вы собираетесь создавать сетевой мост между виртуальными и физическими сетевыми картами.
В большинстве руководств также указывается, что большинство беспроводных сетевых интерфейсов не работают с мостами. Может быть это верно для какого-либо частного случая, однако у меня мост прекрасно работает с беспроводными адаптерами, поэтому будем надеяться, что и вас все заработает.
Я настоятельно рекомендую VMM (virt-manager). Более того, лучше установить и все утилиты поддержки, включая virt-viewer, virt-install, virt-image и virt-clone.
И последнее. Вы можете предпочесть ubuntu-vm-builder:

$ apt-get install ubuntu-vm-builder

Кроме этого, скорее всего будет установлено большое количество зависимостей, поэтому загрузка может занять значительное время.
P.S. На RedHat используйте yum install, на SUSE — zypper install.

Виртуализация на базе KVM

А теперь о главном. Достаточно молодая разработка под управлением ОС Linux, завоевывающая все большую популярность благодаря широким функциональным возможностям с очень приемлемой стоимостью внедрения и администрирования. Данное решение распространяется бесплатно, а для корпоративных клиентов существует коммерческий вариант, дистрибутив RHEL (Red Hat Enterprise Linux), обеспечивающий официальную техподдержку (на 10 лет) и расширенные возможности управления. 

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

Плюсы и минусы KVM

Гипервизор Kernel-based Virtual Machine представляет собой аппаратную виртуализацию, благодаря которой невозможно понять, виртуальный это сервер или физический. Для пользователей каждый сервер фактически является полноценной виртуальной машиной. К дополнительным преимуществам, в отличие от другой опенсорсной платформы виртуализации OpenVZ, можно отнести:

  1. возможность установки своего ядра Linux;

  2. быстрый доступ ко всем модулям системы iptables\tun\tap;

  3. возможность инсталляции любой операционной системы;

  4. обеспечение прав root-доступа к управлению сервером;

  5. организацию GRE туннелей, IPIP и других;

  6. использование виртуальной сети eth со своими параметрами.

При всех очевидных достоинствах гипервизор KVM обладает и рядом недостатков:

  1. смена ресурсов невозможна без перезагрузки системы, расширение дискового пространства производится вручную;

  2. администрировать KVM сложнее, большинство настроек необходимо производить вручную;

  3. добавление IP-адресов происходит тоже вручную.

Если сравнивать KVM с системой виртуализации VMware, то последнюю чаще выбирают для внедрения облачных решений по модели IaaS. В то же время платформа Kernel удобна для разработчиков, специализирующихся на создании и внедрении «линуксового» ПО.

Обладая высокими функциональными возможностями, низким ресурсопотреблением и доступностью, гипервизор KVM постоянно модернизируется за счет поддержки мирового сообщества разработчиков OpenSource. Это позволяет быстро устранять баги и «слабые места», постоянно совершенствовать программу с учетом практического использования в сложных ситуациях.

Конвертация образа диска qemu-img convert

Для конвертации одного формата образа в другой используется опция convert:

qemu-img convert -c -f fmt -O out_fmt -o options fname out_fname

где:

-c — компрессия (сжатие) целевого диска. Компрессию поддерживают только и форматы.

-f fmt — формат исходного диска, в большинстве случаев хорошо определяется автоматически.

-O out_fmt — формат целевого диска

-o options — куча опций. Чтобы узнать, какие опции допустимы для данной конвертации можно ввести:

$ qemu-img convert -O qcow2 ca.img ca1.img -o ?
Supported options:
size Virtual disk size
compat Compatibility level (0.10 or 1.1)
backing_file File name of a base image
backing_fmt Image format of the base image
encryption Encrypt the image
cluster_size qcow2 cluster size
preallocation Preallocation mode (allowed values: off, metadata)
lazy_refcounts Postpone refcount updates

Установка гостевой Windows 10

Запускаем стандартную установку данной ОС, выбираем редакцию, вводим или пропускаем (для получения 30 дневной пробной версии) серийный номер, принимаем лицензионное соглашение с конечным пользователем, затем Выборочная установка ибо нам требуется создать разделы на диске и установить драйвер VirtIO для ранней стадии загрузки системы.

Когда появится сообщение об ошибке о том, что не удалось загрузить драйверы, нажмём кнопку Загрузить, а затем в появишемся окне разрешим автоматический поиск при помощи нажатия OK.

Ошибка, связанная с отсутствием драйвера VirtIO

Укажем версию драйвера Red Hat VirtIO SCSI controller для Windows 10 и нажмём Далее.

Ручная установка драйвера VirtIO

С этого момента программа установки наконец обнаружит наш виртуальный накопитель и предложит создать разделы, а затем установить на него операционную систему.

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

Скрипт для автоматического бэкапа виртуальных машин KVM

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

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

Лично я бэкаплю только небольшие системные диски. Все, что много весит, предпочитаю архивировать другими способами уже изнутри виртуальной машины. Если это базы данных, то делаю , если это файловый сервер, то использую rsync для создания инкрементных бэкапов. Ну и так далее. Каждый выбирает средства на свой вкус.

#!/bin/bash

# Дата год-месяц-день
data=`date +%Y-%m-%d`
# Папка для бэкапов
backup_dir=/backup-vm
# Список работающих VM
vm_list=`virsh list | grep running | awk '{print $2}'`
# Список VM, заданных вручную, через пробел
#vm_list=(vm-1 vm-2)
# Лог файл
logfile="/var/log/kvmbackup.log"

# Использовать это условие, если список VM задается вручную
#for activevm in "${vm_list}";
# Использовать это условие, если список работающих VM берется автоматически
for activevm in $vm_list
    do
        mkdir -p $backup_dir/$activevm
        # Записываем информацию в лог с секундами
        echo "`date +"%Y-%m-%d_%H-%M-%S"` Start backup $activevm" >> $logfile
        # Бэкапим конфигурацию
        virsh dumpxml $activevm > $backup_dir/$activevm/$activevm-$data.xml
        echo "`date +"%Y-%m-%d_%H-%M-%S"` Create snapshots $activevm" >> $logfile
        # Список дисков VM
        disk_list=`virsh domblklist $activevm | grep vd | awk '{print $1}'`
        # Адрес дисков VM
        disk_path=`virsh domblklist $activevm | grep vd | awk '{print $2}'`
        # Делаем снепшот диcков
        virsh snapshot-create-as --domain $activevm snapshot --disk-only --atomic --quiesce --no-metadata
        sleep 2
        for path in $disk_path
            do
                echo "`date +"%Y-%m-%d_%H-%M-%S"` Create backup $activevm $path" >> $logfile
                # Вычленяем имя файла из пути
                filename=`basename $path`
                # Бэкапим диск
                pigz -c $path > $backup_dir/$activevm/$filename.gz
                sleep 2
            done
        for disk in $disk_list
            do
                # Определяем путь до снепшота
                snap_path=`virsh domblklist $activevm | grep $disk | awk '{print $2}'`
                echo "`date +"%Y-%m-%d_%H-%M-%S"` Commit snapshot $activevm $snap_path" >> $logfile
                # Объединяем снепшот
                virsh blockcommit $activevm $disk --active --verbose --pivot
                sleep 2
                echo "`date +"%Y-%m-%d_%H-%M-%S"` Delete snapshot $activevm $snap_path" >> $logfile
                # Удаляем снепшот
                rm $snap_path
            done
        echo "`date +"%Y-%m-%d_%H-%M-%S"` End backup $activevm" >> $logfile
    done

Обращаю внимание на несколько моментов:

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

Снепшоты будут создаваться в той же папке, где хранится основной файл данных. На время отладки советую для начала закомментировать строку с удалением снепшота, на всякий случай. Рекомендую этот крипт прогнать сначала на тестовом сервере. Я его написал на примере одного гипервизора, больше нигде не проверял. Но работает он однозначно, я проверил несколько раз с разными списками VM. В итоге оставил его у себя на сервере в работе.

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

/usr/bin/find /backup-vm/*/ -type f -mtime +90 -exec rm -rf {} \;

Данная команда удалит все файлы старше 90 дней в папках с названиями виртуальных машин, расположенных в /backup-vm.

Запуск виртуальной машины

А теперь самое интересное. Ниже несколько красивых скриншотов…
Начинаем с загрузочного меню 32-битной версии Ubuntu 10.10 Maverick:

Рабочий стол Puppy Linux как всегда великолепен:

Теперь Ubuntu, запущенная под NAT

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

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

Обратите внимание на небольшую загрузку системы. С этим режимом эмуляции можно запускать одновременно несколько виртуальных машин

При необходимости можно удалить виртуальную машину вместе со всеми ее файлами:

Заключение

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

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

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

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: