Linux Containers (LXC) je metoda virtualizace na úrovni operačního systému, která umožňuje provozovat více izolovaných systémů Linux (tzv. kontejnerů) na jednom řídicím hostitelském počítači (host) s využitím jediného sdíleného jádra Linuxu.
Na rozdíl od hypervizorů jako jsou KVM, VMware nebo Xen, které vytvářejí plnohodnotné virtuální stroje s vlastním jádrem a emulovaným hardwarem, LXC využívá funkce jádra Linuxu, jako jsou cgroups a namespaces, k zajištění izolace procesů a prostředků. Z toho důvodu kontejnery dosahují téměř nativního výkonu s minimální režií, jsou však omezeny na spouštění operačních systémů založených na stejném jádře jako hostitel.
Historie a vývoj V roce 2008 byly do hlavní větve linuxového jádra integrovány funkce cgroups. To umožnilo vznik LXC jako první kompletní implementace kontejnerového manažeru, který nevyžadoval externí patche jádra.
V roce 2014 byla vydána verze LXC 1.0, kterou hlavní vývojáři (Stéphane Graber a Serge Hallyn ze společnosti Canonical) označili za první verzi vhodnou pro produkční nasazení s dlouhodobou podporou (LTS). V té době technologie LXC sloužila jako základ pro rané verze nástroje Docker, než přešel na vlastní knihovnu libcontainer.
V současnosti je projekt spravován organizací LinuxContainers.org.
Architektura a technické principy LXC není samostatný virtualizační software, ale spíše uživatelské rozhraní pro nízkoúrovňové mechanismy jádra Linuxu. Spoléhá na tyto komponenty:
Namespaces (jmenné prostory) Namespaces představují v rámci operačního systému Linux základní mechanismus pro izolaci procesů, který definuje rozsah viditelnosti systémových zdrojů pro danou skupinu procesů. Tato technologie umožňuje, aby proces uvnitř kontejneru vnímal systém jako zcela oddělené prostředí, přičemž jsou mu zpřístupněny pouze jeho vlastní zdroje, zatímco zdroje hostitelského systému nebo jiných souběžně běžících kontejnerů zůstávají skryty.
Základním prvkem je PID namespace, který zajišťuje izolaci číselných identifikátorů procesů. Díky tomu může být hlavnímu procesu v rámci kontejneru přiřazen PID 1, ačkoliv v rámci globálního pohledu hostitelského systému vystupuje pod zcela jiným identifikátorem.
Síťovou nezávislost definuje Network Namespace, který každému celku poskytuje dedikovaný síťový zásobník zahrnující vlastní IP adresy, směrovací tabulky a pravidla firewallu.
Bezpečnost systému podporuje User Namespace, který provádí mapování uživatelských identifikátorů UID a identifikátorů skupin GID. Tento mechanismus umožňuje provoz neprivilegovaných kontejnerů, kdy uživatel s právy správce (root) unvnitř kontejneru disponuje pouze s právy běžného uživatele na úrovni hostitelského systému.
Cgroups (kontrolní skupiny) LXC využívá mechanismus cgroups (zkratka control groups) jako nástroj pro striktní řízení a limitování přístupu kontejnerů k hardwarovým prostředkům hostitelského systému. Tato technologie umožňuje jemnou granulaci přidělování výkonu procesoru, a to buď formou vyhrazení konkrétních jader, nebo definováním podílu procesorového času. V oblasti operační paměti zajišťuje cgroups dodržování stanovených limitů RAM.
Mechanismus se vztahuje i na vstupně-výstupní operace diskového subsystému, kde reguluje datový tok a prioritu přístupu k blokovým zařízením. Dalším bezpečnostním prvkem je pak integrace s ovladačem pro seznam povolených zařízení (device whitelist controller), který přesně definuje, ke kterým fyzickým či virtuálním uzlům zařízení má kontejner oprávnění přistupovat, čímž efektivně izoluje hardware hostitele před neautorizovanou manipulací.
Srovnání s dalšími technologiemi
LXC vs. KVM Rozdílem mezi technologií LXC a KVM je přístup k virtualizaci, který přímo ovlivňuje efektivitu a bezpečnost obou řešení.
Z hlediska výkonu dosahuje LXC v operacích s procesorem a pamětí hodnot téměř shodných s nativním systémem (tzv. bare-metal). Efektivita vyplývá ze sdílení jádra hostitelského systému, díky čemuž LXC netrpí režií spojenou s emulací hardwaru a překladem instrukcí, která je použitá pro KVM. Ve srovnávacích testech HPC (High Performance Computing), vykazuje kontejnerizace výrazně lepší propustnost než plná virtualizace.
Virtuální stroje v KVM jsou od hostitele odděleny silnější bariérou, neboť každý z nich disponuje vlastním jádrem operačního systému. U kontejnerů představuje sdílené jádro potenciální riziko.
Dalším rozdílem je rychlost spouštění, kdy je LXC díky své architektuře řádově rychlejší. Kontejnery nevyžadují zavádění vlastního jádra ani inicializaci virtuálního hardwaru, proces startu systému probíhá v řádu milisekund až sekund. V prostředí KVM je start výrazně pomalejší (v řádu jednotek až desítek sekund), protože musí proběhnout kompletní bootovací sekvence od emulovaného BIOSu až po zavedení operačního systému.
LXC vs. Docker Technologie LXC a Docker sdílejí základní mechanismy (namespaces, cgroups), liší se ale ve své provozní filosofii a způsobu nasazení.
LXC se zaměřuje na úroveň systémových kontejnerů, které se v praxi chovají jako odlehčené virtuální stroje. Je primárně určeno pro dlouhodobý běh a správu, přičemž procesy údržby, konfigurace a aktualizací se v tomto prostředí provádějí obdobným způsobem jako u virtuálních privátních serverů.
Docker reprezentuje model aplikačních kontejnerů, jejichž primárním účelem je izolace a spuštění jediné konkrétní aplikace nebo procesu. Architektura Dockeru je navržena jako efemérní a bezstavová, což znamená, že kontejnery jsou chápány jako dočasné instance vytvořené z neměnných obrazů. Namísto aktualizace běžícího kontejneru se v ekosystému zpravidla nahrazuje celý obraz novou verzí.
Ekosystém a nástroje K LXC se váže řada nástrojů. Samostatně LXC poskytuje nízkoúrovňové příkazy jako lxc-create, lxc-start či lxc-attach. Pro jednodušší správu vznikl projekt LXD (nyní pod správou Canonicalu) a jeho komunitní fork Incus. Tyto nástroje fungují jako „hypervizor kontejnerů“ a poskytují REST API pro správu celých clusterů kontejnerů.
Odkazy Reference
Související články Virtualizace Docker OpenVZ Proxmox Virtual Environment cgroups
Externí odkazy Oficiální stránky projektu LinuxContainers (anglicky)
Kategorie:Virtualizační software Kategorie:Linux Kategorie:Svobodný software Kategorie:Software v C Kategorie:Software pod licencí LGPL Kategorie:Software pod licencí GPL