Hlavní navigace

Ubuntu-vm-builder: virtualizace snadno a rychle

8. 6. 2009
Doba čtení: 6 minut

Sdílet

Ubuntu server je variantou Ubuntu, kterou již nelze tak jednoduše přehlédnout. Nastavení serveru je s ní rychlé a jednoduché a stává se čím dál více oblíbené. Jedna z aplikací, kterou zde najdeme, je také ubuntu-vm-builder. Ve spojení s libvirt je to opravdu silný nástroj vhodný na provozní nasazení.

Virtualizace si za poslední tři roky našla velmi široké uplatnění. Díky ní má i běžný smrtelník k dispozici plnohodnotný server za pár korun. Vzniklo také hodně řešení, které virtualizaci nějakým způsobem umožňují. My se budeme zabývat implementací, která využívá hardwarovou podporu virtualizace v novějších procesorech Intel a AMD.

Najdeme ji v modulech kvm.ko a kvm-intel.ko resp. kvm-amd.ko. Podíváme se blíže na ubuntu-vm-builder a na správu virtuálních strojů na našem počítači. Není podmínkou mít nainstalováno Ubuntu server, postačí jakákoli novější verze Ubuntu.

Používáte virtualizaci?

KVM

KVM je zástupce tzv. plné virtualizace. To znamená, že virtuálnímu počítači je k dispozici virtuální procesor, grafická karta, síťová karta a další periferie. Ty se poté spojují s reálným hardwarem pomocí nějakého rozhraní. Plná virtualizace nám umožní spouštět třeba na architektuře x86 programy zkompilované pro SPARC. Virtualizované systémy jsou od hostujícího systému plně odděleny a u některých virtualizačních nástrojů je veškerý hardware emulován dokonce softwarově. To vede k  rapidnímu zpomalení.

Dnes pravděpodobně nejvíce užívanou virtualizací je tzv. paravirtualizace. Není zde potřeba žádná zvláštní hardwarová podpora, ale třeba musíme upravit jak hostující, tak hostovaný systém. V linuxovém světě je nejpoužívanější XEN, takže si princip osvětlíme na něm. Když si stáhneme, nainstalujeme a zkompilujeme XEN, dostaneme dvě jádra. Jedno použijeme pro hostitelský systém a druhé budeme dávat do hostů. Hostitelské jádro se nazývá VMM, neboli virtual machine monitor. Ten zpracovává přístupy k hardwaru hostovaných systémů. Virtualizovaný systém běží víceméně nativně na fyzickém hardware. Více informací o XENu najdete v článku Úvod do virtualizace pomocí XENu.

KVM, resp. implementace virtualizace v linuxovém jádře, na to jde jinak. Samotné KVM dává programům v userspace rozhraní pro alokování paměti, přístupu k procesoru atd. Přitom využívá hardwarovou podporu virtualizace a ve výsledku je zpomalení oproti nativnímu běhu v řádku jednotek procent. Druhou stranou mince je ostatní hardware. Virtuální stroj potřebuje nějakou grafickou kartu, síťovou kartu a řadič disku. O to se již stará samotný virtualizační nástroj v userspace, v Linuxu např. oblíbený Qemu. Ten je ve virtualizaci těchto kousků hardwaru poněkud pomalý, a proto přišla na řadu knihovna virtio. Na rychlost sítě a disku jsou kladeny velké nároky a knihovna virtio řeší i tento problém. Je to takové doplnění paravirtualizace do plné virtualizace. Virtio je standard pro ovladače disku a sítě v Linuxu. Když svůj virtuální stroj zapnete s ovladači virtio, zvedne se výkon I/O operací skoro na úroveň nativního hardwaru.

Ubuntu-vm-builder

Pro další práci budeme potřebovat následující balíčky:

$ sudo aptitude install xtightvncviewer ubuntu-vm-builder 

Vysvětlili jsme si základní principy KVM a můžeme se věnovat hlavnímu tématu článku, kterým je správa virtuální strojů v Ubuntu. Nástroj ubuntu-vm-builder je frontend pro vmbuilder, což je skript napsaný v Pythonu, který usnadňuje vytváření obrazů s virtuálními systémy. Jelikož se jedná o Pythoní skript, tak s jeho instalací se do Pythonu dostávají i knihovny, které můžeme použít v našich skriptech a udělat tak vytváření obrazů ještě snazší a automatizovanější. Rozhraní v Pythonu má také knihovna libvirt, se kterou můžeme virtuální stroje dále ovlivňovat.

Ubuntu-vm-builder má několik voleb, které bychom neměli přehlédnout.

-m      Množství paměťi v MB
--cpus      Počet přidělených jader/procesorů
--rootsize  Velikost root filesystému v MB
--swapsize  Velikost swapu v MB
--raw       Kam se má obraz disku uložit, dá se použít i fyzická oblast
-d      Nastavení cílového umístění adresáře se systémem
-t      Změní místo, kde se bude vytvářet obraz
--domain    Doména
--ip        IP adresa
--gw        Brána
--dns       DNS server
--libvirt   Přidání systému do libvirt domény
--hostname  Nastaví jméno stroje
        Pod tímto jménem se se strojem také dále pracuje 

Většina z nastavení má svou výchozí hodnotu. Pokud nenastavíme IP adresu, použije se DHCP. Root, swap a paměť mají svou výchozí velikost, která pravděpodobně nebude vyhovovat. Počet procesorů je standardně jeden. Pokud použijeme parametr –libvirt, můžeme další operace se systémem provádět právě přes něj a jeho nástroje.

Je čas si vytvořit první virtuální stroj za pomocí ubuntu-vm-builder.

$ ubuntu-vm-builder kvm jaunty --hostname ubuntu1 --mem 1024 --cpus 2 --rootsize 10000 --swapsize 1024 --addpkg vim --addpkg screen --libvirt qemu:///system 

První parametr je stejně jako druhý povinný. V tom prvním řekneme builderu, že chceme vytvořit obraz pro kvm. Z dalších možností to jsou esxi, xen, vmw6 a vmserver. Druhý parametr označuje verzi Ubuntu, kterou chceme nainstalovat. Můžeme si vybrat z dapper, gutsy, hardy, intrepid a jaunty. Pomocí parametrů –addpkg, přidat balíky, které nejsou součástí standardní instalace a budeme je potřebovat. Se správným skriptem je pak vytvoření obrazu systému otázkou chvilky. Instalace systému trvá na mém AMD X2 2.1 GHz přibližně 10 minut, je plně automatická a nepotřebuje asistenci. Po jejím skončení se v aktuálním adresáři, který můžeme změnit parametrem -d, vytvoří adresář ubuntu-kvm a v najdeme samotný obraz. Další práce s obrazem je čistě v režii libvirt a jeho virsh.

Každý si teď bude chtít zkusit nový systém nastartovat a kouknout, jak šlape. K tomu použijeme již zmíněný virsh.

$ virsh
Connecting to uri: qemu:///system
Vítejte na virsh, interaktivním virtualizačním terminálu.

Napište: 'help' pro nápovědu k příkazům
       'quit' pro skončení

virsh # start ubuntu1
Doména ubuntu1 spuštěna

virsh # list
 Id Jméno               Stav
----------------------------------
  2 ubuntu1              běží

virsh # vncdisplay ubuntu1
127.0.0.1:0 

Abychom se nějak dostali k příkazovému řádku našeho systému, vytvořili jsme si VNC server, ke kterému se například pomocí vncvieweru připojíme.

$ vncviewer 127.0.0.1:0 

Standardní heslo a jméno v distribucích Ubuntu je ubuntu/ubuntu.

ubuntu-vm-builder: screen

Síť

Síť je tou nejdůležitější částí u podobně řešených virtuálních strojů. Pokud už se rozhodneme pro nějaké nasazení v praxi, můžeme zapomenout na NAT, který libvirt používá ve výchozím stavu, a podíváme se na tzv. bridgování. Naštěstí to s libvirt není moc složité a jediné co potřebujeme, je vytvoření bridge. V tom nám pomůže konfigurační soubor /etc/network/in­terfaces. Do něj dáme následující řádky:

auto lo
iface lo inet loopback

auto br0
iface br0 inet static
        address 90.182.30.20
        netmask 255.255.255.240
        gateway 90.182.30.17
        bridge_ports eth0
        bridge_fd 9
        bridge_hello 2
        bridge_maxage 12
        bridge_stp off 

Pokud se o něco takového pokoušíte na desktopovém Ubuntu, tak nezapomeňte vypnout NetworkManager. Jenom by celý proces komplikoval. IP adresy si samozřejmě nastavte podle vaší sítě. Sice vytvoření bridge není jediné řešení jak připojit virtuální systém do sítě bez omezení, ale je nejjednodušší. Po změně konfigurace restartujeme síť:

$ /etc/init.d/networking restart 

A upravíme také xml soubor s konfigurací našeho virtuálního systému. Ten najdeme v /etc/libvirt/qe­mu/ubuntu1.xml. V něm vymažeme sekci <interface> a nahradíme ji:

<interface type='bridge'>
    <source bridge='br0'/>
</interface> 

Po nastartování virtuálního systému budeme mít k dispozici plnohodnotnou síť. Pokud ještě do <interface> přidáme:

CS24_early

<model type='virtio'/> 

Bude se i rychlost přibližovat nativní síťové kartě.

Závěr

Nakousli jsme základní práci s virtuálními systémy pod Ubuntu a jeden takový jsme si vytvořili i s funkční sítí. Pokud si ve virsh zadáte příkaz help, zjistíte, že zde možnosti libvirt zdaleka nekončí. Libvirt a jeho další možnosti budou tématem na příští díl našeho seriálu.

Odkazy

Byl pro vás článek přínosný?

Autor článku

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.