Hlavní navigace

OpenVZ: vytvořte si vlastní virtuální server

4. 9. 2012
Doba čtení: 7 minut

Sdílet

Virtualizace je součástí IT prostředí už spoustu let, na trhu je řada produktů, z nichž si lze vybírat. Jednou z možností je OpenVZ, které představuje zástupce virtualizace implementované na úrovni operačního systému. V prvním díle seriálu se s OpenVZ seznámíme a předvedeme si vytvoření virtuálního serveru.

Proč zrovna OpenVZ

Virtualizace je součástí IT prostředí už spoustu let, čtenářům Root.cz určitě nemá cenu znovu opakovat, k čemu by jim mohla být dobrá. Pokusím se ale nastínit, proč byste nasazení právě OpenVZ mohli zvážit. Když zavzpomínám na svoje první setkání s VMware před víc než 10 lety, vybavuje se mi údiv, který vyvolalo pozorování startu virtuálních Windows 98. Obdivoval jsem, že virtuální počítač byl implementován včetně BIOSu! Virtuální počítač implementoval vlastní virtuální grafický adaptér, vlastní virtuální síťový, vlastní virtuální… všechno.

Po dokončení startu pochopitelně přišlo zklamání, jak to bylo pomalé. Aby nebylo, když chyběl HW Hypervizor a vše bylo obsluhováno softwarově. Od té doby se ztráty výkonu kvůli virtualizaci stále snižují, Intel i AMD mají podporu pro HW virtualizaci téměř ve všech procesorech, krom těch nejlevnějších modelů. Pořád ale zůstává overhead emulačních vrstev grafických, síťových a dalších adaptérů.

Pokud je třeba provozovat na jediném HW stroji kombinace různých OS, nezbývá, než nějaký ten výkon na virtualizaci obětovat. Pro vývojáře na jeho pracovní stanici asi neexistuje lepší volba, může si spustit jakýkoliv OS potřebuje. Ovšem při konsolidaci 50 serverů na jediný kus HW se vyplatí pořádně se zamyslet, jestli má smysl provozovat 50× virtuální síťovku, 50× virtuální diskový řadič a všechno to virtuální ostatní. Veliká část serverů je stejně jen nějaký Apache, co zpracovává pár PHP stránek, tam je opravdu zbytečný komfort poskytovat uživateli možnost provozovat vlastní kernel a pozorovat na konzoli jeho boot. Mnohdy není z organizačních důvodů možný klasický virtuální hosting, pak je OpenVZ výborná volba.

Hlavní výhody OpenVZ:

  • téměř nulový overhead díky absenci emulační vrstvy - jediný kernel ovládá veškerý HW a zpřístupňuje jej aplikacím prostřednictvím standardních systémových volání,
  • vysoký špičkový výkon - pokud je to třeba, může virtuální server využít veškerý výkon hostitele, je opravdu rozdíl mezi jedním jádrem a čtyřiašedesáti jádry,
  • dynamická alokace zdrojů a jejich overbooking - požadavky na paměť, CPU a disk jsou uspokojovány, až když jsou skutečně třeba, a tak je možné přidělit víc zdrojů, než je k dispozici v době vytváření virtuálního serveru,
  • snadná instalace - jedná se vlastně o instalaci upraveného kernelu, který je součástí distribucí, a pak několika ovládacích utilit,
  • jednoduchá administrace díky přístupu k souborovému systému a procesům virtuálního serveru z hostitele - administrátor hostitele virtuálních serverů přesně vidí, co se uvnitř serveru děje,
  • strmá učící křivka - OpenVZ nepoužívá žádné znovuobjevené termíny a staví na tom, co linuxový administrátor zná, budete schopni OpenVZ nasadit po přečtení této série článků u ranní kávy.

Při čtení toto článku a dalších dílů seriálu o OpenVZ nepřemýšlejte jen jako o řešení pro konsolidaci desítek serverů. Zkuste si ho představit i v jednoduchých instalacích. Např. velmi dobře může posloužit, pokud chcete hostovat vlastní server, ale náklady na hosting fyzického serveru jsou pro vás příliš vysoké. Když se s někým dohodnete, můžete si pomocí OpenVZ server snadno rozdělit. Výkonový, ale i administrativní overhead je opravdu minimální.

Instalace OpenVZ

Na následujících řádcích vám názorně předvedu instalaci OpenVZ na Debian Squeeze. Upravený kernel OpenVZ je součástí Debianu už od roku 2006, viz archivní zprávičku na Root.cz. Tehdy bylo OpenVZ relativně mladé, probíhal jeho vývoj, a to ve spojení s konzervativností Debianu znamenalo, že bylo nutné provozovat ručně překládaný kernel. OpenVZ má prudký vývoj dávno za sebou, dnes je to stabilní produkt a bez problémů je možné provozovat kernel distribuovaný přímo v distribuci.

Budete-li chtít zkoušet instalaci společně se čtením článku, připravte si čistou instalaci Debian GNU/Linuxu ve verzi Squeeze. Chcete-li, můžete i ve VMWare, OpenVZ nepoužívá žádné vizualizační instrukce, takže vám to bude bez problémů fungovat.

Počítači, na který se instaluje OpenVZ kernel, se v terminologii OpenVZ říká Hardware Node a označuje se CT0, postaru VE0. Server, na kterém budu instalaci předvádět, se jmenuje ve0. Instalace OpenVZ sestává z instalace kernelu rozšířeného o OpenVZ patch a z instalace obslužných utilit. Provedu ji příkazem:

root@ve0:~# apt-get install linux-image-2.6-openvz-amd64 vzctl vzquota

V případě, že by instalace probíhala na HW se speciálními ovladači (např. ovladači iSCSI pole), by teď bylo nutné se přesvědčit, že jsou nainstalovány do nového kernelu. Pak rebotuji do OpenVZ kernelu.

root@ve0:~# shutdown -r now

Pokud se vše povedlo, tak během startu systému uvidím:

Starting OpenVZ: ..done
- Warning: IP forwarding is not enabled

Varování mě upozorňuje, že se virtuální servery nedostanou na síť. Lze to řešit editací /etc/sysctl.conf a nastavením net.ipv4.ip_forward=1. Obvykle je ale třeba nastavovat i další síťové parametry, proto doporučuji vytvořit si soubor /etc/firewall a do něj zapsat zapnutí forwardingu a také zapnutí NATu. Prozatím je zadám na příkazové řádce. Pro tento článek používám síť 172.16.206.0/24, ve které je umístěn jak ve0, tak tam budou umístěny všechny virtuální servery. Zadám:

root@ve0:~# modprobe ip_conntrack_ftp
root@ve0:~# modprobe ipt_MASQUERADE
root@ve0:~# iptables -F; iptables -t nat -F; iptables -t mangle -F
root@ve0:~# iptables -t nat -A POSTROUTING -s 172.16.206.0/24 -o eth0 -j MASQUERADE
root@ve0:~# echo 1 > /proc/sys/net/ipv4/ip_forward

Tím je ve0 připravený, ale ještě než předvedu vytvoření prvního virtuálního serveru, musím se zmínit o programu vzctl a také trochu zabrousit do terminologie.

Virtuální servery jsou nazývány container a označovány jako CT, VE (Virtual Environment), případně VPS (Virtual Private Server). Dalším a prozatím posledním termínem je template - nejedná se o nic jiného než zatarovanou instalaci linuxové distribuce.

Template lze připravit instalací na fyzický HW a následným zatarováním disku, ale pro většinu použití postačí template z oficiálního repozitáře OpenVZ na adrese download.openvz.org/contrib/tem­plate/precreated. Doporučuji vybrat co nejmenší template zvolené distribuce (často označovaný jako minimal) a oblíbené aplikace si doinstalovat ručně. Do přípravy template se vyplatí investovat nějaké úsilí, vrátí se v budoucnu v podobě rychlejšího vytváření virtuálních serverů a také konzistentnějším prostředím.

Asi nejdůležitějším nástrojem správce OpenVZ serveru je příkaz vzctl. Pomocí tohoto příkazu se provádí většina operací s containery. Má srozumitelnou manuálovou stránku, ale většinou stačí jen nápověda, kterou zobrazí, když se spustí bez parametrů. Použití vzctl:

vzctl [options] <command> <ctid> [parameters]

Parametr command může nabývat řady hodnot, z nichž se nejčastěji používají:

create
Slouží k vytvoření virtuálního serveru.
destroy
Smaže virtuální server. Pozor, odstraní ho včetně souborového systému!
start anebo stop
Spustí, respektive zastaví, virtuální server.
mount resp. umount
Připojí souborový systém virtuálního serveru, ale nespustí ho. Případně souborový systém odpojí, pokud virtuální server neběží.
set
Slouží k nastavení jednoho nebo několika parametrů virtuálního serveru. Důležitý je také přepínač –save, bez něj jsou nastavené parametry platné jen po dobu běhu virtuálního serveru.

Parametr ctid (ConTainer ID) je číslo containeru, tedy virtuálního serveru. Tímto číslem je container označován ve všech výpisech, je tak označena i jeho disková quota. Pro účely tohoto seriálu budu používat vzestupné číslování od 1000. Při své vlastní implementaci OpenVZ si zvolte vlastní schéma, jen se vyhněte číslům pod 100 (včetně), ta jsou vyhrazena pro interní potřebu OpenVZ.

Vytvoření prvního virtuálního serveru

Nejprve vytvořím link /vz odkazující na /var/lib/vz, ušetří mi to trochu psaní. Potom stáhnu template debian-6.0-amd64-minimal do lokálního repositáře. Ukládám ho pod jiným jménem, protože ho v příštím dílu seriálu budu upravovat, tak ať se to neplete s originálním template.

root@ve0:~# ln -s /var/lib/vz /vz
root@ve0:~# wget http://download.openvz.org/contrib/template/precreated/debian-6.0-amd64-minimal.tar.gz -O /vz/template/cache/debian-6-amd64.tar.gz

Před vytvořením virtuálního serveru se musím rozhodnout, jaké CTID mu přidělím (dostane číslo 1000). Dále mu přidělím IP adresu 172.16.206.100, jméno deb6 a jmenný server 192.168.1.1. Tyto parametry lze měnit v konfiguračním souboru mimo CT. Pokud si je uživatel containeru změní sám uvnitř, budou při dalším restartu přepsány. Container vytvořím těmito dvěma příkazy:

root@ve0:~# vzctl create 1000 --ostemplate debian-6-amd64 --ipadd 172.16.206.100 --hostname deb6
Creating container private area (debian-6-amd64)
Performing postcreate actions
Container private area was created

root@ve0:~# vzctl set 1000 --nameserver 192.168.1.1 --save
File resolv.conf was modified
Saved parameters for CT 1000

Další příkaz, který musí administrátor OpenVZ znát, je vzlist. Pomocí něj si lze vypsat, jaké CT jsou na VE0 přítomny. V prvním výstupu vidíte, že nově vytvořený CT neběží. Spustím ho tedy příkazem vzctl start 1000, a když vyvolám vzlist znovu, uvidím, že CT už běží a že v něm běží pět procesů. Na manuálové stránce se dozvíte o dalších parametrech, ale v drtivé většině vystačíte právě s parametrem -a, který zajistí výpis všech (i neběžících CT).

root@ve0:~# vzlist -a
      CTID      NPROC STATUS    IP_ADDR         HOSTNAME
      1000 - stopped   172.16.206.100  deb6

root@ve0:~# vzctl start 1000
root@ve0:~# vzlist -a
      CTID      NPROC STATUS    IP_ADDR         HOSTNAME
      1000          5 running   172.16.206.100  deb6

Posledním příkazem, který vám tomto dílu seriálu ukážu, je vzctl enter. Když ho zadáte, vstoupíte do virtuálního serveru a můžete si ho sami prozkoumat:

root@ve0:~# vzctl enter 1000
entered into CT 1000
root@deb6:/#

Autor článku

Jan Tomášek v současnosti pracuje pro CESNET, z. s . p. o. jako vývojář v oblasti PKI a správy uživatelských identit. Ve volném čase se věnuje krajinné fotografii a geocachingu.