Na konci prvního dílu jsem vás nechal si samostatně prozkoumat nově vytvořený virtuální server. Asi jste se podívali na běžící procesy:
root@ve0:~# vzctl enter 1000 entered into CT 1000 root@deb6:/# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 8352 800 ? Ss 13:59 0:00 init [2] root 211 0.0 0.5 52020 1392 ? Sl 13:59 0:00 /usr/sbin/rsyslogd -c4 root 237 0.0 0.3 20900 848 ? Ss 13:59 0:00 /usr/sbin/cron root 257 0.0 0.2 18632 632 ? Ss 13:59 0:00 vzctl: pts/0 root 258 0.0 0.7 17708 1916 pts/0 Ss 13:59 0:00 -bash root 263 0.0 0.3 14812 1028 pts/0 R+ 13:59 0:00 ps aux
A nejspíš také na síťová rozhraní:
root@deb6:/# ifconfig -a lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen: RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:127.0.0.1 P-t-P:127.0.0.1 Bcast:0.0.0.0 Mask:255.255.255.255 UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen: RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) venet0:0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:172.16.206.105 P-t-P:172.16.206.105 Bcast:0.0.0.0 Mask:255.255.255.255 UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
Asi vás zaujalo neobvyklé označení síťových rozhraní, jedná se o virtual network device - defaultní síťové rozhraní uvnitř CT. Před tím, než se dostaneme k síťování, bych se ještě zdržel u přípravy template.
OpenVZ Templates
Template není nic než zatarovaná distribuce. Proces vytvoření nového CT se sestává především z rozbalení template na to správné místo (/vz/private/<CTID>. Vhodně připravený template může ušetřit nudnou rutinní práci před předáním CT uživateli. Každý administrátor bude mít vlastní představu, co by uživateli chtěl nabídnout. Já obvykle se staženým template dělám následující:
Změním adresy serverů s aktualizačními balíčky na ftp.cz.debian.org hostované u nás na CESNETu, následně aktualizuji seznam balíčků a provedu upgrade na aktuální verze. Doinstaluji ssh, postfix a debsums. Nainstaluji syslog-ng, který nahradí rsyslog, a následně odstraním konfigurační soubory rsyslogu.
root@deb6:~# cat > /etc/apt/sources.list deb http://ftp.cz.debian.org/debian/ squeeze main non-free contrib debports deb-src http://ftp.cz.debian.org/debian/ squeeze main non-free contrib deb http://security.debian.org/ squeeze/updates main non-free contrib deb-src http://security.debian.org/ squeeze/updates main non-free contrib # squeeze-updates, previously known as 'volatile' deb http://ftp.cz.debian.org/debian/ squeeze-updates main non-free contrib deb-src http://ftp.cz.debian.org/debian/ squeeze-updates main non-free contrib ^D root@deb6:~# apt-get update && apt-get upgrade root@deb6:~# apt-get install ssh postfix syslog-ng debsums root@deb6:~# apt-get purge rsyslog
Přesvědčím se, že všechny md5sums nainstalovaných souborů sedí. Doplním chybějící md5sums u balíčků mawk a netbase, zopakuji kontrolu a odstraním stažené deb balíčky z diskové cache apt. Je zbytečné, aby template byl o ně větší.
root@deb6:~# debsums |grep -v OK$ debsums: no md5sums for mawk debsums: no md5sums for netbase root@deb6:~# apt-get --reinstall install mawk netbase root@deb6:~# debsums |grep -v OK$ root@deb6:~# apt-get clean
Určitě se vyplatí zkontrolovat časovou zónu. Autoři template rádi nechávají tu svoji a moskevským časem uživatele nenadchnete.
root@deb6:~# dpkg-reconfigure tzdata
Výše uvedené je pouze příklad. Dost možná budou vaše požadavky odlišné, podstatné je, abyste si template připravili tak, aby byl co nejpodobnější prostředí, které chcete poskytovat uživatelům.
Když jsem s template hotový, opustím prostředí containeru. Zastavím container a vytvořím gzipovaný tar s tímto containerem (ano, přepíšu původní stažený template, už mi k ničemu není). Tím mám připravený template s Debianem a můžu očekávat prvního uživatele.
root@deb6:~# exit root@ve0:~# vzctl stop 1000 Stopping container ... Container was stopped Container is unmounted root@ve0:~# cd /vz/private/1000 root@ve0:/vz/private/1000# tar zcf /vz/template/cache/debian-6-amd64.tar.gz .
CT s číslem 1000 si nechávám připravený pro situace, kdy Debian vydá novou subverzi distribuce. Pak ho spustím, aktualizuji balíčky a znovu zataruji do template. V případě vydání nové verze distribuce obvykle začínám s čistým template z OpenVZ repositáře.
Vytvoření virtuálního serveru pro uživatele
Vytvoření virtuálního serveru pro uživatele je s použitím předpřipraveného template velice snadné. Příkazem vzctl create … virtuální server vytvořím. Pomocí vzctl set … mu nastavím jmenný server. A virtuální server spustím příkazem vzctl start …. Přidám uživatelův SSH klíč do seznamu autorizovaných klíčů, aby se mohl do virtuálního serveru dostat. Ještě aktualizuji instalovaný software na poslední verze a vymažu nainstalované deb balíčky z disku.
root@ve0:~# export CTID=1200 root@ve0:~# vzctl create $CTID --ostemplate debian-6-amd64 --ipadd 172.16.206.200 --hostname ve$CTID Creating container private area (debian-6-amd64) Performing postcreate actions Container private area was created root@ve0:~# vzctl set $CTID --nameserver 192.168.1.1 --save File resolv.conf was modified Saved parameters for CT 1200 root@ve0:~# vzctl start $CTID Starting container ... Container is mounted Adding IP address(es): 172.16.206.200 Setting CPU units: 1000 Set hostname: ve1200 File resolv.conf was modified Container start in progress... cat >> /vz/private/$CTID/.ssh/authorized_keys ssh-dss AAA.... ^D root@ve0:~# vzctl exec $CTID 'apt-get update && apt-get upgrade' root@ve0:~# vzctl exec $CTID 'apt-get clean'
A předávám uživateli!
Migrace fyzického stroje do VE
Předpřipravené template redukují potřebu přípravy zcela vlastního. Pokud se ale do této situace dostanete, hledejte tipy na OpenVZ wiki pod heslem creating template.
Při zavádění OpenVZ se pravděpodobněji než s přípravou vlastních template setkáte s potřebou migrace stávajícího fyzického serveru do OpenVZ kontejneru. Záleží na tom, jakou distribuci provozujete. Mé zkušenosti jsou spojeny s Debian Sarge a Etch, což je už značná historie, a tak nebudu zabíhat do detailů. Postup je ale relativně jednoduchý:
- připravte adresáře /vz/private/<CTID> a /vz/root/<CTID>
- připravte konfigurační soubor /etc/vz/<CTID>.conf (zkopírováním konfiguračního souboru nějakého jiného virtuálního serveru a následnou editací)
- fyzický stroj nabootujte v single mode a pomocí rsync –numeric-ids -ravH … překopírujte disk do /vz/private/<CTID>. Použijete-li ke kopírování něco jiného, dbejte na zachování vlastnictví souborů tím správným uuid. Nekopírujte /proc, /sys, a pokud systém používá udev, hal a dbus, tak ani /dev
- spusťte virtuální server
- odstraňte všechny balíky, které manipulují s HW, počínaje ntpdate, přes hdparm, lm-sensors a konče kernelem
U současných distribucí pravděpodobně narazíte na problémy s udev, hal a dbus. Pokud to závislosti dovolí, pokuste se je odstranit a používejte statický /dev.
Na OpenVZ wiki máte k dispozici dokument Physical to container obsahující řadu tipů, jak v tomto případě postupovat. Užitečné pro vás budou také následující dva díly miniseriálu, které budou detailněji rozebírat operace s VE a omezování zdrojů VE.
Kde je co na OpenVZ
Z přečteného textu jste už získali hrubou představu, kde jsou jaké soubory na souborovém systému hostitele. Nyní se pokusím to popsat trochu systematičtěji.
/etc/vz/vz.conf
Základní konfigurační soubor OpenVZ /etc/vz/vz.conf se při běžném provozu vůbec nemění a případné změny obvykle vyžadují restart všech virtuálních serverů. Jedinou změnu, kterou pravděpodobně budete chtít proti distribučnímu nastavení provést, je přidání modulů pro iptables, o tom se zmíním v sekci o síťování.
/etc/vz/conf
Adresář /etc/vz/conf obsahuje konfigurační soubory jednotlivých virtuálních serverů. Jméno souboru vždy odpovídá číslu CTID a má příponu .conf. Krom konfiguračních souborů tam můžete nalézt několik příkladů konfigurace dle užití virtuálního serveru.
root@ve0:~# ls -l /etc/vz/conf total 24 -rw-r--r-- 1 root root 252 Jan 27 2011 0.conf -rw-r--r-- 1 root root 1749 May 6 17:44 1000.conf -rw-r--r-- 1 root root 1550 Jan 27 2011 ve-basic.conf-sample -rw-r--r-- 1 root root 1585 Jan 27 2011 ve-light.conf-sample -rw-r--r-- 1 root root 1606 Jan 27 2011 ve-unlimited.conf-sample
Konfigurační soubory lze editovat přímo a nebo utilitou k tomu určenou (vzctl set …). K jejich obsahu se vrátím v článku o nastavování zdrojů, které jsou k dispozici jednotlivým virtuálním serverům.
/vz/template/cache
Adresář /vz/template/cache obsahuje komprimované template jednotlivých distribucí, v tomto případě si vypomáhám výpisem z našeho produkčního serveru:
# ls -l /vz/template/cache/ total 1559796 -rw-r--r-- 1 root root 205013149 Feb 26 2010 centos-5.4-x86_64.tar.gz -rw-r--r-- 1 root root 107130998 Aug 10 2009 debian-4.0-i386-default.tar.gz -rw-r--r-- 1 root root 124480195 Feb 17 2010 debian-5-x86_64-semik-minimal.tar.gz -rw-r--r-- 1 root root 139817545 Sep 22 2009 debian-5-x86_64.tar.gz -rw-r--r-- 1 root root 114388806 Apr 20 15:15 debian-6-amd64.tar.gz ...
/vz/private
Adresář /vz/private obsahuje podadresáře:
root@ve0:~# ls -l /vz/private total 8 drwxr-xr-x 20 root root 4096 May 13 16:11 1000 ...
Každý z nich je vyhrazen jednomu VE. Obsahem podadresářů je souborový systém virtuálního serveru:
root@ve0:~# ls -l /vz/private/1000/ total 108 drwxr-xr-x 2 root root 4096 Aug 6 2009 bin drwxr-xr-x 2 root root 4096 Dec 15 2004 boot drwxr-xr-x 11 root root 36864 May 20 16:12 dev drwxr-xr-x 50 root root 4096 May 20 16:12 etc ...
/vz/root
Tento adresář obsahuje podadresáře stejně jako předchozí adresář private, jedná se o provozní instance souborových systémů virtuálních serverů. Obsah adresáře private je na to místo připojen pomocí mount -o bind … společně s několika dalšími souborovými systémy potřebnými pro běh CT:
root@ve0:/etc/vz# cat /proc/mounts ... /var/lib/vz/private/1000 /var/lib/vz/root/1000 simfs rw,relatime 0 0 proc /var/lib/vz/root/1000/proc proc rw,relatime 0 0 sysfs /var/lib/vz/root/1000/sys sysfs rw,relatime 0 0 tmpfs /var/lib/vz/root/1000/lib/init/rw tmpfs rw,nosuid,relatime,size=131072k,nr_inodes=32768,mode=755 0 0 tmpfs /var/lib/vz/root/1000/dev/shm tmpfs rw,nosuid,nodev,relatime,size=131072k,nr_inodes=32768 0 0 devpts /var/lib/vz/root/1000/dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620 0 0 ...
Z prostředí CT je pak připojený souborový systém vidět takto:
root@deb6:~# df -h Filesystem Size Used Avail Use% Mounted on /dev/simfs 1.0G 369M 656M 36% / tmpfs 128M 0 128M 0% /lib/init/rw tmpfs 128M 0 128M 0% /dev/shm
Kromě výše uvedených souborů a adresářů se je na souborovém systému hostitele k dispozici ještě několik speciálních souborů, prostřednictvím kterých lze OpenVZ monitorovat. Na monitorování a na nastavování parametrů jednotlivých CT se podíváme v dalším dílu.