Xen v NetBSD
Pokud některý operační systém má svou cestu spojenou s Xenem, je to právě NetBSD. Xen se dal provozovat na NetBSD o několik let dříve, než na Linuxu, a zatímco Linux se postupně do velké míry přeorientoval na KVM (virtualizace) a LXC (izolace procesů), NetBSD se drží Xenu. A mohu říci, že za 8 let, co provozuji servery s Xenem na NetBSD, jsem s ním neměl nejmenší problém.
V malém seriálu bych rád načrtl, jak to po praktické stránce funguje a ukázal, jak rozběhnout různé systémy v Xenu na NetBSD. Dnes půjde o nastavení NetBSD hypervizoru a spuštění paravirtualizovaného NetBSD pod tímto hypervizorem.
Koncept Xenu
Izolace procesů a maximální využitý systémových nákladů pomocí virtualizace je dnes cílem mnoha projektů, od VMWare a VirtualBoxu přex LXC až třeba po Docker. Xen už od začátku dokázal řídit paralelní běh více kernelů na jednom hardware s minimálním overheadem.
Stačí jen upravit kernel, aby měl podporu pro Xen, a to většina open-source operačních systémů dnes nabízí. Řídicí kernel pro operační systém, který bude hostitelem se nazývá dom0, upravený kernel pro podřízený běh nazýváme domU. To se bavíme o paravirtualizaci. Co ovšem se systémy, jako Windows, které neotevřely kód, ani samy upravený kernel nevydaly?
Mimochodem, při pokusu na jedné anglické univerzitě studenti legálně kernel Windows upravili pro paravirtualizaci, ale pak jim hoši z Microsoftu dočasnou licenci pro úpravu zdrojového kódu neprodloužili.
Systémy s neupraveným kernelem lze spouštět v Xenu v režimu tzv. plné virtualizace. Ten přináší velkou spotřebu a je trochu méně efektivní než Virtualbox nebo VMWare.
Xen Project vs. Xen Server
Ještě malé upřesnění, když se mluví o Xenu, nemluví vždy všichni o tomtéž. Existuje multiplatformní open-source Xen Project, který má poslední stable verzi 4.11 a běží na Solarisu, FreeBSD, NetBSD a Linuxu.
Potom existuje komerční verze s nadstavbami, která se jmenuje XenServer, je upravena primárně pro Linux a disponuje grafickými utilitami pro Linux a Windows, má tři vydání (Free, Standard a Enterprise) a poslední stable verze je 7.5.
Když budu v tomto článku psát o Xenu, ať už to nazvu Xen nebo Xen server, vždycky tím myslím Xen Project.
Instalace hypervizoru – NetBSD v roli dom0
Pro spuštění hostitelského stroje pro Xen je třeba několika kroků, ale je to poměrně jednoduchá rutina. Je třeba nainstalovat základní systém bez jakýchkoliv změn. Doporučuji udělat si velkou partici /var/xen
, kam budeme ukládat image, dále je třeba stáhnout dom0 kernel, nainstalovat balíček Xenu a připravit síťové prostředí pro konektivitu. Jen připomínám, že je v BIOSu třeba mít zapnutou podporu virtualizace a hypervizor je třeba instalovat na skutečné železo.
Takže jak na to? Nainstalujeme Xen (v PKGSRC, hlavním repozitáři balíčků NetBSD, je několik verzí, i ta nejnovější – 4.11, ale v tuto chvíli doporučuji instalovat 4.6.)
# pkgin in xenkernel46 xentools46
Rozbalíme si xen do /
# cp /usr/pkg/xen46-kernel/xen/xen.gz / # cd / && gunzip xen.gz
Stáhneme modifikovaný kernel NetBSD pro hypervizor a umístíme ho do /
# ftp ftp.netbsd.org:/pub/NetBSD/NetBSD-8.0/amd64/binary/kernel/netbsd-XEN3_DOM0.gz # gunzip netbsd-XEN3_DOM0.gz # mv netbsd-XEN3_DOM0 /netbsd.dom0
Upravíme bootovací tabulku přidáním zvýrazněného řádku s Xenem
# vi /boot.cfg menu=Boot Xen:load /netbsd.dom0 console=pc;multiboot /xen dom0_mem=1024M noreboot menu=Boot normally:rndseed /var/db/entropy-file;boot netbsd menu=Boot single user:rndseed /var/db/entropy-file;boot netbsd -s menu=Disable ACPI:rndseed /var/db/entropy-file;boot netbsd -2 menu=Disable ACPI and SMP:rndseed /var/db/entropy-file;boot netbsd -12 menu=Drop to boot prompt:prompt default=1 timeout=5 clear=1
Nakopírujeme startovací skripty a zapneme jejich spouštění v /etc/rc.conf
# cp /usr/pkg/share/examples/rc.d/xencommons /etc/rc.d/ # cp /usr/pkg/share/examples/rc.d/xendomains /etc/rc.d/ # echo "xencommons=YES">>/etc/rc.conf # echo "xendomains=YES">>/etc/rc.conf
Nyní nám ještě zbývá konfigurace sítě. Za předpokladu, že vaše síťová karta se jmenuje re0, nastavíte si bridge následujícím způsobem:
# vi /etc/ifconfig.bridge0 create !brconfig $int add re0 up
V tuto chvíli máte nakonfigurovaný stroj komplet a můžeme restartovat, aby se zavedl hypervizor Xen a spustily požadované služby, včetně těch síťových.
Ovládání Xenu
Pro management Xenu existují různé nástroje, my si ukážeme alespoň ty základní, určené pro příkazovou řádku, které patří do výbavy Xen Projectu. Všechny níže uvedené příkazy je nutno spouštět s oprávněním roota.
xl info
– info o paměti, cpu, verzi hypervizoruxl list
– vypíše běžící strojexl vcpu-list
– ukáže vytížení skutečných i virtuálních procesorů jednotlivými strojixl top
– vypíše běžící stroje a zátěž systému, včetně výpisu pamětixl create /cesta/ke/konfiguraku/vm.conf
– spustí virtuální strojxl console nazev_vm
– připojí nás virtuální sériovou konzolí do daného stroje (pouze u PV)xl shutdown nazev_vm
– pošle signál ACPI vypnutí virtuálnímu stroji daného jménaxl destroy nazev_vm
– vynutí vypnutí „natvrdo“
Pro ty, kdo mají rádi grafická rozhraní existuje OpenXenManager, který je alternativou placenému XenCenteru a lze ho snadno nainstalovat. Já s ním nemám zkušenosti, ale podle recenzí na internetu, např. této na serveru Dedoimedo, se jedná od velmi dobré GUI, napsané v pythonu. Kdo chce, tak je k dispozici i pro NetBSD, nainstalujete takto:
# pkgin in openxenmanager
NetBSD 8 ve virtuálu – domU
Běh paravirualizovaného hosta NetBSD na xenovém hostiteli s NetBSD je skutečně perfektní izolace procesů, ztráty na výkonu systému jsou běžným okem neměřitelné. Instalace je poměrně jednoduchá. Ke startu paravirtualizovaného systému se nepoužije běžné CD, ale speciálně upravený instalační kernel a potom se instaluje podle volby z webu/CD či jiného zdroje.
Z webu si stáhneme dva upravené kernely NetBSD pro Xen domU (guest). Jeden poslouží pro instalaci a druhý pak pro vlastní běh
# mkdir -p /var/xen/boot # cd /var/xen/boot # ftp ftp.netbsd.org:/pub/NetBSD/NetBSD-8.0/amd64/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz # gunzip netbsd-INSTALL_XEN3_DOMU.gz # ftp ftp.netbsd.org:/pub/NetBSD/NetBSD-8.0/amd64/binary/kernel/netbsd-XEN3_DOMU.gz # gunzip netbsd-INSTALL_XEN3_DOMU.gz
Vytvoříme image disku o velikosti 20G pomocí dd. Xen zná více možností, jak pracovat s disky, toto je jedna možnost jako příklad. Image samozřejmě nemusíte umisťovat do /var/xen
, to je na vás, dejte si ji kam je libo (a kde máte dost místa), ale je třeba to správně zadat do konfiguračního souboru.
# cd /var/xen # dd if=/dev/zero of=netbsd80.img bs=1m count=20480
Ve výchozím adresáři si vytvoříme konfigurační soubor stroje, tento jsem opatřil nezbytnými komentáři, určitě doporučuji si je důkladně prostudovat
# vi /usr/pkg/etc/xen/netbsd80.cfg ### zvolte si jméno vašeho stroje name = "netbsd80" ### kolik paměti v MB přidělíte virtuálu memory = "1024" ### cesta k instalačnímu kernelu, kterou zakomentujete po instalaci kernel = "/var/xen/boot/netbsd-INSTALL_XEN3_DOMU" ### cesta k normálnímu kernelu, který odkomentujete po instalaci # kernel = "/var/xen/boot/netbsd-XEN3_DOMU" xen_platform_pci=1 ### počet virtuálních CPU pro váš stroj vcpus=1 ### následující dvě volby jsou jasné acpi=1 apic=1 ### nastavení síťové karty včetně MAC a modelu a hlavně spojení na bridge vif = [ "mac=00:01:5a:04:9c:22,bridge=bridge0,model=e1000" ] ### cesta k disku, který virtuálu přidělíte disk = [ "file:/var/xen/netbsd80.img,0x0,w"] ### velmi důležité nastavení, bez kterého virtuál nenastartuje, ### říká, na kterém disku má hledat root systému ### NetBSD vidí běžné pevné disky ve virtuálu jako xbd0, xbd1, xbd2 atd... root="xbd0" ### uvádí, co má dělat při pokynu "reboot" on_reboot = "restart" ### nastaví, aby při havárii neopakoval nekonečně restart on_crash = "destroy"
Tím jsme připravili disk i konfigurační soubory a můžeme instalovat.
# xl create /usr/pkg/etc/xen/netbsd80.cfg Parsing config from /usr/pkg/etc/xen/test-netbsd.cfg # xl console test-netbsd
Poslední pokyn spustí emulovanou sériovou konzoli a uvidíte startovat instalační kernel a následně se spustí instalátor. Kdykoli se můžete odpojit kombinací kláves CTRL+], anebo zase připojit zopakováním posledního příkazu.
V našem případě je nejrozumnější při instalaci zvolit FTP nebo HTTP jako zdroj, instalátor zná cestu, ale je třeba při tom v instalačním menu vybrat, aby si nakonfiguroval síť. Jiná alternativa by byla stáhnout např. iso cd a připojit ho v konfiguračním souboru, jako CD-ROM disk.
Když je instalace hotová, vypneme virtuál a musíme změnit konfigurační soubor. Zakomentujeme instalační kernel a odkomentujeme běžný domU. Potom opět spustíme a připojíme se do konzole.
# xl create /usr/pkg/etc/xen/netbsd80.cfg Parsing config from /usr/pkg/etc/xen/test-netbsd.cfg # xl console test-netbsd
Tentokrát už vidíme bootovat domU kernel do čerstvě nainstalovaného systému. Můžeme si uznale poklepat na rameno, cíl splněn. Teď už můžeme instalovat třeba webové služby nebo cokoli dalšího potřebujeme a zapojit virtuál do veškeré činnosti naší infrastruktury.
Pochopitelně, jakmile nastavíme síť, už nepotřebujeme konzoli a můžeme se připojovat přes SSH. Při nastavení sítě přes bridge bude náš nový domU mít adresu ve stejné síti jako hypervizor dom0.
Omezení
Přestože v NetBSD funguje Xen velmi spolehlivě, existuje jedno omezení, na které je třeba upozornit. Xen 4.x nemá podporu „passthrough“, což je funkce, kdy lze virtuálnímu stroji vyhradit přístup k hardware přímo, bez virtualizační vrstvy. Není tedy například možné připojit za běhu USB a vidět ho jakožto USB ve virtuálu. Pravděpodobně to není vůbec podstatné pro běh serverů, ale při nějakém specifickém zapojení to může vadit, například kdyby nějaký software vyžadoval hardwarový klíč.
Co bude příště?
Ukázali jsme si jak nainstalovat a nakonfigurovat Xen hypervizor na NetBSD 8.0 a jak na něm nastavit a spustit paravirtualizovaný systém NetBSD 8.0. Čeká nás klasická paravirtualizace CentOS, trochu jiná paravirtualizace Debianu a OpenBSD a plná virtualizace Windows.