Co je bhyve a jak využít ZFS
Co se dozvíte v článku
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.
- 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ě.