openvz_to_lxc

V tomto článku najdete postup k provedení snadné migrace virtuálního serveru původní služby 4smart.cz (virtualizační technologie OpenVZ) na cloud.4smart.cz. Portaci virtuálního serveru lze realizovat také včetně IP adres a to ve spolupráci s naší technickou podporu (zcela bezplatně).

Pro ty z Vás, kteří mají zájem o provedení portace virtuálních serverů mezi službami tzv. na klíč, jsme připraveni vyhovět formou placené technické podpory za jednorázový poplatek 550 Kč za každý VPS.

Prezentované řešení vytváří LXC kontejner(y) v prostředí KVM virtuálního serveru. Tyto kontejnery mají vlastní vyhrazené síťové nastavení (IP adresy) a oddělený kontext. Rovněž lze omezit paměťové zdroje a zabránit DoS celého virtuálního serveru a dalších LXC kontejnerů při vzniku anomálií v některém LXC kontejneru. Výsledné řešení nepředstavuje další overhead a zachovává si svoji efektivitu. Přináší navíc lepší oddělení kontextu a vyšší bezpečnost.

OpenVZ VPS do LXC kontejneru

Nejjednodušším způsobem migrace je konverze OpenVZ virtuálního serveru do LXC kontejneru. Virtuální server tímto krokem získá funkce, které poskytuje moderní Linuxové jádro a současně toto Linuxové jádro nebude v LXC kontejneru přítomno, jako tomu je u OpenVZ.

LXC kontejner lze zprovoznit v libovolné Linuxové distribuci. V našem případě budeme LXC kontejner vytvářet ve virtuálním stroji služby cloud.4smart.cz v prostředí Linuxové distribuce Debian 10. V jednom virtuálním serveru služby cloud lze provozovat více jak jeden LXC kontejner. Provozovat více LXC kontejnerů v jednom virtuálním serveru služby cloud.4smart.cz je efektivní z pohledu výkonu jak fyzického tak i virtuálního stroje, proto tento přístup doporučujeme.

LXC kontejner může být provozován jako tzv. privilegovaný nebo neprivilegovaný. Privilegovaný kontejner běží pod právy uživatele root virtuálního stroje cloud.4smart.cz. Výhodou privilegovaného kontejneru je snadná a rychlá příprava prostředí virtuálního stroje a tedy i rychlá migrace. Nevýhodou je vyšší riziko při kompromitaci LXC kontejneru hackerem a následné riziko eskalace útoku opuštěním kontextu LXC kontejneru útočníkem až do prostředí KVM virtuálního serveru. Neprivilegovaný kontejner naopak běží pod právy uživatele např. nobody. Díky mechanizmům namespaces, apparmor, selinux a cgroups je zajištěna větší bezpečnost oddělením hostující vrstvy od hostitelské.

V tomto článku použijeme výhradně privilegovaný LXC kontejner. Řešení v podání neprivilegovaného kontejneru jsme schopni realizovat formou již zmíněné technické podpory na klíč.

Možné problémy s migrací starých instalací a Linuxových distribucí

Současné Linuxové jádro prošlo za poslední léta mnoha změnami, které se týkají také různých systémových volání. Některé funkce jádra zanikly, jiné změnily svoje chování a další přibyly. GNU software starých instalací proto nemusí být použitelný (spustitelný) v kombinaci s moderním Linuxovým kernelem. Typickým příkladem jsou OpenVZ Virtuální servery postavené na šablonách CentoOS 5, 6, jde o instalace telefonních ústředen Elastix (s www rozhraním). Zde lze narazit na nekompatibilitu initrd a Linuxového jádra.

V případě telefonních ústředen Asterisk může naopak vyvstat problém s rozdílnou instrukční sadou obou virtualizačních prostředí. V tomto případě stačí rekompilovat telefonní ústřednu Asterisk ze zdrojových kódů a tím problém vyřešit.

Pokud ve svém virtuálním serveru původní služby 4smart.cz (OpenVZ) máte například instalaci Debian 7 + Apache + MySQL, tyto problémy se Vás nejspíše nedotknou a lze předpokládat hladký proces migrace.

Příprava virtuálního serveru cloud.4smart.cz

Migraci zahájíme vytvořením virtuálního serveru služby cloud.4smart.cz. Zde vytvoříme virtuální server buď formou instalace z ISO obrazu distribuce Debian 10 nebo s využitím již hotové instalace, která poskytuje fixní diskový prostor kolem 13 GiB. diskový prostor by měl poskytovat rezervu k provozu migrovaných služeb. Více místa je tedy lépe. Pozdější úpravy jeho velikosti lze provádět pouze v offline režimu.

Virtuálnímu serveru služby cloud.4smart.cz rozšíříme síťové nastavení o další IPv6 a případně IPv4 adresu, která bude přidělena LXC kontejneru. Nastavení s příznakem gateway=yes bude použito pro výhradně pro virtuální server a nelze se bez něj obejít. Tuto úpravu můžeme provést jak na veřejném (ens1) tak privátním (ens2) síťovém rozhraní virtuálního serveru cloud.4smart.cz.

Nastavení sítě uvnitř virtuálního serveru

Ke zprovoznění síťové konektivity pro LXC kontejnery musíme upravit síťové nastavení virtuálního serveru a využít síťových mostů. Zde odkážeme na článek: https://4smart.cz/konfigurace-site-ve-virtualnim-serveru/

Instalace potřebného software

aptitude install lxc

Instalací balíku lxc a splněním potřebných závislostí získáme potřebný software umožňující provoz privilegovaných kontejnerů.

Vytváříme LXC kontejner

lxc-create -t download -n 101

Uvedeným příkazem zajistíme vytvoření LXC kontejneru s číselným názvem 101 ve virtuálním serveru služby cloud. Po zadání příkazu budeme dotázání na jméno distribuce, verzi a architekturu. Platí, že volíme vždy nejbližší nebo ideálně stejné prostředí jako v případě migrované instalace virtuálního serveru OpenVZ. Jako architekturu zvolte amd64.

V adresáři /var/lib/lxc najdete adresářovou struktutu spojenou s LXC kontejnerem 101, který v tuto chvíli neběží.

Nastavení sítě LXC kontejneru

Abychom mohli LXC kontejner přímo adresovat na síti s použitím jemu vyhrazené IPv6, případně IPv4 adresy, musíme jej softwarově připojit k síťovému mostu virtuálního serveru. To provedeme doplněním konfigurace LXC kontejneru 101 o potřebné síťové nastavení včetně MAC adresy, která musí odpovídat nastavení dle webové administrace cloud.4smart.cz. Jde zejména o MAC adresu, viz obrázek výše. LXC kontejner v tomto případě nastavím s MAC 56:54:00:00:00:01 (příznak gateway=no), která je jemu vyhrazena. Pokud bychom uvažovali další LXC kontejnery, bylo by v takovém případě nutné rozšířit nastavení sítě virtuálního serveru o další MAC adresu.

vim /var/lib/lxc/101/config
# Network configuration
lxc.net.0.type = veth
lxc.net.0.hwaddr = 56:54:00:00:00:01
lxc.net.0.flags = up
lxc.net.0.link = br0
lxc.net.0.name = eth0

Portace OpenVZ VPS do LXC kontejneru

K portaci původní instalace OpenVZ virtuálního serveru použijeme soubor zálohy .tar.gz. Tento uploadujeme do prostředí virtuálního serveru služby cloud.4smart.cz, následně rozbalíme do /var/lib/lxc/101/rootfs/. Obsah adresáře rootfs před tímto krokem smažeme.

Management LXC kontejneru

Pro ovládání LXC kontejneru je k dispozici množina jednoduchých a snadno zapamatovatelných příkazů.

Seznam dostupných LXC kontejnerů

lxc-ls -f

Start LXC kontejneru

lxc-start -n nazev_kontejneru

Zastavení LXC kontejneru

lxc-stop -n nazev_kontejneru

Vstoupení do kontextu kontejneru

lxc-attach -n nazev_kontejneru

Odstranění kontejneru

lxc-destroy -n nazev_kontejneru

Omezení paměťových zdrojů pro kontejner

Situace kdy LXC kontejner alokuje veškerou RAM virtuálního serveru je potenciálně nebezpečná a vede k DoS ostatních LXC kontejnerů i celého virtuálního serveru služby cloud.4smart.cz. Je tedy žádoucí provozovat LXC kontejner s omezeným paměťovým prostorem operační paměti a také s omezeným prostorem pro swapování. V případě zde uváděného kontejneru s názvem 101 lze tohoto docílit rozšířením jeho konfigurace

vim /var/lib/lxc/101/config

lxc.cgroup.memory.limit_in_bytes = 2G
lxc.cgroup.memory.memsw.limit_in_bytes = 4G

Kontejner spuštěný s tímto nastavením má k dispozici pouze 2 GB RAM a 4GB na swapovacím oddílu.

Závěr

V tomto článku jsme v prostředí KVM virtuálního stroje služby cloud.4smart.cz vytvořili prostředí k provozu jednoho a více LXC kontejnerů s vlastním síťovým nastavením. Provoz více LXC kontejnerů v jednom KVM VPS je výkonově efektivní a přitom flexibilní. Zachovává maximální jednoduchost z pohledu síťování i provozního managementu. LXC kontejnery lze uživatelsky zálohovat a obnovovat dle potřeby jejich provozovatele. Kombinaci KVM a LXC lze chápat také jako zahnízdění. To lze navíc dále prohlubovat provozováním LXC kontejnerů v LXC kontejnerech. Uvedené technologie KVM a LXC lze také kombinovat s Docker.