Virtualizace pomocí bhyve s využitím ZFS na FreeBSD 13

12. 10. 2023
Doba čtení: 7 minut

Sdílet

 Autor: Depositphotos
Virtualizace je klíčovou technologií pro izolaci a oddělení různých virtuálních prostředí na jednom fyzickém serveru. Ukážeme si, jak využít hypervizor bhyve na FreeBSD 13 s podporou souborového systému ZFS.

Co je bhyve a jak využít ZFS

Co se dozvíte v článku
  1. Co je bhyve a jak využít ZFS
  2. Instalace a konfigurace FreeBSD 13 s podporou ZFS
  3. Web GUI v podobě bhyve-webadmin
  4. Přednosti a výhody tohoto řešení
  5. Další alternativy

Podrobně se zaměříme na bhyve a jeho integraci souborovým systémem ZFS. Vysvětlíme, jak využít výhody ZFS pro ukládání virtuálních strojů.

Bhyve (vyslovuje se „včelí úl“, dříve se psal jako BHyVe pro „BSD hypervisor“) je hypervizor napsaný pro FreeBSD. Lze jej také použít v řadě systémů založených na systému Illumos, včetně SmartOS, OpenIndiana a OmniOS. K dispozici je také port bhyve pro macOS s názvem xhyve.

V nejnovějším vydání FreeBSD 13.2 byla podpora souborového systému ZFS aktualizována na OpenZFS release 2.1.9. Výrazné usnadnění vytváření a konfigurace virtuálních serverů zajišťuje aplikace vm z balíčku vm-bhyve, která má mnoho funkcí včetně podpory ZFS. Zjednodušeně řečeno: spuštěním jednoho příkazu se vytvoří virtuální server s možností použití šablony a tím se vytvoří vše potřebné pro nový virtuální server včetně zvol nebo virtual switches.

Podrobné schéma bhyve

bhyve je tedy hypervizor vestavěný do operačního systému FreeBSD, dá se říci, že se jedná o obdobu kombinace KVM a QEMU, kterou známe z Linuxu.

                                                    Linux
           I/O        VM control       FreeBSD        NetBSD
                                                      OpenBSD
         |     A        |     A           |              |
         V     |        V     |           V              V
     +-------------++-------------++-------------++-------------+
     |             ||             ||             ||             |
     |    bhyve    ||  bhyvectl   ||  bhyveload  || grub2-bhyve |
     |             ||             ||             ||             |
     |             ||             ||             ||             |
     +-------------++-------------++-------------++-------------+
     +----------------------------------------------------------+
     |                        libvmmapi                         |
     +----------------------------------------------------------+
                                   A
                                   |                         user
     ------------------------------┼------------------------------
                                   | ioctl         FreeBSD kernel
                                   V
                     +----------------------------+
                     |        VMX/SVM host        |
                     |       VMX/SVM guest        |
                     |   VMX/SVM nested paging    |
                     |           Timers           |
                     |         Interrupts         |
                     +----------------------------+
                      vmm.ko

vmm.ko

Pro fungování virtualizace je klíčový modul bhyve pro jádro FreeBSD. Spravuje objekty VM a vCPU, fyzický adresový prostor hostitele a zajišťuje interakci hosta s PIC, PIT, HPET, PM Timer, x(2)APIC a I/O-APIC.

Obsahuje minimální emulátor x86 pro dekódování MMIO hosta. Provádí dva vnitřní runloopy vCPU (VMX/SVM a přerušení/časovače/paging). Má backendy pro Intel VMX a AMD SVM. Poskytuje API ioctl a mmap do uživatelského prostoru.

libvmmapi

Tenká abstrakční vrstva mezi rozhraním ioctl vmm.ko a API uživatelského prostoru jazyka C.

bhyve

Komponenta uživatelského prostoru bhyve (něco jako velmi odlehčené QEMU), která spouští virtuální stroje. Spouští běhové smyčky I/O vCPU hosta. Spravuje ACPI, PCI a všechna zařízení, která nejsou v jádře. Spolupracuje s modulem vmm.ko prostřednictvím libvmmapi.

bhyvectl

Utilita pro správu životního cyklu virtuálních strojů. Virtuální stroje a vCPU mohou existovat jako objekty jádra nezávisle na hostitelském procesu bhyve. Obvykle se používá k odstranění objektů virtuálních počítačů po jejich použití.

bhyveload

Port zavaděče FreeBSD v uživatelském prostoru. Jedná se o řešení, které umožňuje zavést hostovaný operační systém FreeBSD bez použití firmwaru. Vytvoří objekt virtuálního počítače, nahraje jádro FreeBSD do paměti hosta, nastaví počáteční stav vCPU a pak se ukončí. Teprve poté může být virtuální počítač spuštěn pomocí bhyve.

grub2-bhyve

Provádí stejnou funkci jako bhyveload, ale je portem GRUB2 v uživatelském prostoru. Používá se k zavádění hostovaných operačních systémů jiných než FreeBSD, tj. Linuxu, OpenBSD a NetBSD.

Instalace a konfigurace FreeBSD 13 s podporou ZFS

Postup instalace bhyve ve FreeBSD 13 je popsán v dokumentaci. Následnou konfigurací zajistíme podporu v kernelu.

# vi /boot/loader.conf

if_bridge_load="YES"
if_tap_load="YES"
nmdm_load="YES"
vmm_load="YES"

Balíček vm-bhyve pro správu virtuálních strojů

Pro snadnější a rychlejší práci s bhyve doporučuji používat vm-bhyve. Přehled základní příkazů potřebných k instalaci vm-bhyve a spuštění prvního hosta FreeBSD.

1. pkg install vm-bhyve grub2-bhyve
2. zfs create -o mountpoint=/vms zroot/vms
3. sysrc vm_enable="YES"
4. sysrc vm_dir="zfs:pool/vms"
5. vm init
6. cp /usr/local/share/examples/vm-bhyve/* /vms/.templates/
7. vm switch create public
8. vm switch add public em0
9. vm iso https://download.freebsd.org/ftp/releases/ISO-IMAGES/13.2/FreeBSD-13.2-RELEASE-amd64-bootonly.iso
10. vm create fbsd13
11. vm install [-f] fbsd13 FreeBSD-13.2-RELEASE-amd64-bootonly.iso
12. vm console fbsd13

Podrobné informace o instalovaných balíčcích.

grub2-bhyve-0.40_10            Grub-emu loader for bhyve
vm-bhyve-1.5.0                 Management system for bhyve virtual machines

Poslední tři příkazy zajisti vytvoření a instalaci OS FreeBSD ze staženého ISO souboru. Máte k dispozici sériovou konzoli, ve které je možné projít instalačním procesem. Vytvoření hosta se provede pomocí výchozí šablony.

# cat /vms/.templates/default.conf
loader="bhyveload"
cpu=1
memory=256M
network0_type="virtio-net"
network0_switch="public"
disk0_type="virtio-blk"
disk0_name="disk0"
disk0_dev="sparse-zvol"

Po instalaci již můžete virtuální server spustit. Průběh startu je možné sledovat v logu.

# vm start fbsd13
Starting fbsd13
  * found guest in /vms/fbsd13
  * booting...

# tail -f /vms/fbsd13/vm-bhyve.log
Oct 07 07:57:28: bhyveload -c /dev/nmdm-fbsd13.1A -m 256M -e autoboot_delay=3 -d /dev/zvol/zroot/vms/fbsd13/disk0 fbsd13
Oct 07 07:57:31:  [bhyve options: -c 1 -m 256M -AHP -U 76cb3664-2c4d-11ee-9c8a-a08cfdf259ea -u]
Oct 07 07:57:31:  [bhyve devices: -s 0,hostbridge -s 31,lpc -s 4:0,virtio-blk,/dev/zvol/zroot/vms/fbsd13/disk0 -s 5:0,virtio-net,tap13,mac=58:9c:fc:0d:4b:5d]
Oct 07 07:57:31:  [bhyve console: -l com1,/dev/nmdm-fbsd13.1A]
Oct 07 07:57:31: starting bhyve (run 2)

Takto vypadá výpis existujících VM, kde jsou v jednotlivých sloupcích základní informace.

# vm list
NAME              DATASTORE  LOADER     CPU  MEMORY  VNC  AUTO  STATE
fbsd13            default    bhyveload  1    256M    -    No    Running (25670)

Dále je možné si vypsat podrobné informace o VM.

# vm info fbsd13
------------------------
Virtual Machine: fbsd13
------------------------
  state: running (25670)
  datastore: default
  loader: bhyveload
  uuid: 76cb3664-2c4d-11ee-9c8a-a08cfdf259ea
  cpu: 1
  memory: 256M
  memory-resident: 97271808 (92.765M)

  console-ports
    com1: /dev/nmdm-fbsd13.1B

  network-interface
    number: 0
    emulation: virtio-net
    virtual-switch: public
    fixed-mac-address: 58:9c:fc:0d:4b:5d
    fixed-device: -
    active-device: -
    desc: -
    mtu:
    bridge: vm-public

  virtual-disk
    number: 0
    device-type: sparse-zvol
    emulation: virtio-blk
    options: -
    system-path: /dev/zvol/zroot/vms/fbsd13/disk0
    bytes-size: 17179869184 (16.000G)
    bytes-used: 7209193472 (6.714G)

  snapshots
    zroot/vms/fbsd13@2023080401 76K     Fri Aug  4 16:43 2023
    zroot/vms/fbsd13/disk0@2023080401   2.97M   Fri Aug  4 16:43 2023

Pokud si po instalaci nakonfigurujete nově instalovaný VM server, máte možnost si z něj udělat image, ze které je dále možné vytvářet další nové servery. Není tedy nutné provádět úvodní instalaci systému FreeBSD.

# vm image create -d FreeBSD13.2-p4-base-install fbsd13
Creating a compressed image, this may take some time...
Image of fbsd13 created with UUID fef33c6a-64db-11ee-98f2-a08cfdf259ea

# vm image list
UUID                                  NAME                CREATED                        DESCRIPTION
78d9a3e4-2c58-11ee-9c8a-a08cfdf259ea  fbsd13              Thu Jul 27 10:34:59 CEST 2023  FreeBSD13-base-install
034233e1-32d1-11ee-9bad-a08cfdf259ea  fbsd13              Fri Aug  4 16:12:57 CEST 2023  FreeBSD13.2-p2-base-install
fef33c6a-64db-11ee-98f2-a08cfdf259ea  fbsd13              Sat Oct  7 08:37:33 CEST 2023  FreeBSD13.2-p4-base-install


# vm image provision fef33c6a-64db-11ee-98f2-a08cfdf259ea bsd-test
Unpacking guest image, this may take some time...

Další vítanou vlastností vm-bhyve je možnost vytvoření ZFS snapshotu. Tato velmi užitečná funkcionalita umožňuje vrátit se v čase do stavu filesystému před nějakou zásadní změnou operačního systému, například upgrade nebo reinstalace komponent.

# vm snapshot fbsd13@2023080401
# zfs list -t snapshot
NAME                                        USED  AVAIL     REFER  MOUNTPOINT
zroot/vms/fbsd13@2023080401                  76K      -      112K  -
zroot/vms/fbsd13/disk0@2023080401          2.97M      -     6.71G  -

Web GUI v podobě bhyve-webadmin

Pro usnadnění práce s bhyve virtualizací je možné použít web interface v podobě aplikace BVCP – Native webadmin / control panel for FreeBSD Bhyve. Aplikaci bhyve-webadmin jsem letmo testoval, ale mně osobně vyhovuje jen příkazová řádka. Instalátor doinstaluje SQLite, kam se ukládají stavové i konfigurační volby. Pro uživatele může být tento nástroj velmi užitečný.

Přednosti a výhody tohoto řešení

Virtualizace bhyve má několik předností oproti jiným virtualizačním nástrojům, což ji činí atraktivní volbou pro některé scénáře.

ict ve školství 24

  • Vysoký výkon: Bhyve byl navržen s ohledem na moderní hardware a využívá virtualizační instrukce procesorů, což mu umožňuje dosáhnout vysokého výkonu. To je zejména důležité pro scénáře, kde je požadována nízká režie virtualizace a vysoký výkon virtuálních strojů.
  • Bezpečnost: Bhyve byl vyvinut s důrazem na bezpečnost. Má minimální povrch útoku a byl navržen tak, aby byl odolný vůči různým útokům a zneužití. To je důležité pro provoz v bezpečnostně citlivých prostředích.
  • Podpora pro ZFS: Bhyve je dobře integrován souborovým systémem ZFS, což umožňuje vysokou úroveň flexibility a efektivity při správě virtuálního úložiště. ZFS nabízí pokročilé funkce, jako jsou snapshoty, komprese a deduplikace dat.
  • Podpora pro FreeBSD: Bhyve je přirozeným výběrem pro uživatele a správce FreeBSD, protože je součástí tohoto operačního systému. To usnadňuje integraci a správu virtuálních strojů na FreeBSD serverech.
  • Aktivní komunita: Bhyve má aktivní komunitu uživatelů a vývojářů, což znamená, že existuje dostatek zdrojů, dokumentace a podpory pro uživatele. Komunita pravidelně aktualizuje bhyve a přidává nové funkce.
  • Podpora pro různé operační systémy: Bhyve umožňuje spouštět různé operační systémy v rámci virtuálních strojů, což zahrnuje různé distribuce Linuxu, Windows a další.
  • Možnost využití virtuálního I/O: Bhyve umožňuje efektivní přístup ke virtuálním zařízením s minimální režií, což je důležité pro aplikace, které vyžadují rychlý přenos dat.
  • Open-source a zdarma: Bhyve je open-source projekt, což znamená, že je zdarma k použití a modifikaci, což může být atraktivní pro organizace s omezeným rozpočtem.

Další alternativy

Je třeba poznamenat, že volba virtualizačního nástroje závisí na konkrétních požadavcích a potřebách projektu. Bhyve má své silné stránky, ale existují i další hypervizory, jako je VMware, KVM/QEMU, VirtualBox a Hyper-V, které mohou být vhodné pro jiné scénáře virtualizace.

Využití bhyve, ZFS a aplikace vm-bhyve přináší vysokou efektivitu a flexibilitu pro virtualizaci na FreeBSD. Tato kombinace technologií umožňuje uživatelům dosáhnout optimálního výkonu a snadné správy virtuálních strojů na této platformě.

Autor článku

Pracuje jako systém administrátor – UNIX/Linux systémů. Vystudoval VOŠ Liberec, obor Počítačové systémy. Ve svém oboru prosazuje otevřená řešení IT infrastruktury.