Mikroslužby získávají stálou popularitu od povstání v cloudu. Společnosti jako Amazon a Netflix využívají cloudové platformy k poskytování svých nejžádanějších služeb. Jádrem takových cloudových nativních aplikací jsou kontejnery. Kontejner je izolované prostředí, které usnadňuje mikroslužby a nabízí výhody, jako je vynikající škálování a rychlé nasazení. Mezi tradičními virtuálními stroji založenými na hypervizoru, jako je VMware, a virtualizačními službami na úrovni OS, jako jsou Docker a Linux Containers (LXC), je obrovský rozdíl. V této příručce poskytneme našim čtenářům pracovní znalosti LXC, robustního virtualizačního nástroje na systémové úrovni pro Linux.
Příručka vše v jednom pro ovládání linuxových kontejnerů
Pokud jste správce Linuxu a chcete se dozvědět o LXC podrobně, pak je to pro vás perfektní průvodce. V tomto příspěvku popisujeme různé funkce a výhody LXC a také to, kdy je zvolit oproti jiným kontejnerizačním službám. Také vám ukážeme, jak nainstalovat a začít s LXC.
Linuxové kontejnery:Funkce a základy
Takže, co je LXC? Jak jsme již řekli, je to virtualizační služba, která nám umožňuje točit clustery izolovaných prostředí Linuxu. Poskytuje velké množství výhod oproti monolitickým virtuálním strojům tím, že snižuje zatížení zdrojů na hostitelském počítači. Díky tomu je ideální pro vytváření, testování a nasazování cloudového nativního softwaru. LXC, na rozdíl od jiných virtualizačních nástrojů na úrovni OS, poskytuje mnohem lepší prostředí Linuxu.
LXC nepoužívá žádné efektní mechanismy řízení zdrojů, jako jsou hypervizory. Spíše využívá funkce hostitelského omezení poskytované přímo linuxovým jádrem. Primární komponenty, na které se spoléhá, jsou jmenné prostory a cgroups . Poprvé byly přidány do jádra od verze 2.6.24. Hlavní princip návrhu cgroups aka ‚Ovládací skupiny‘ je poskytnout omezení zdrojů, stanovení priorit, účetnictví a kontrolu. Jmenné prostory jsou zodpovědné za skrytí procesního prostoru a informací o zdrojích jednoho kontejneru před ostatními.
Kromě toho má LXC také vestavěnou podporu pro různé zásady zpevnění Linuxu, jako jsou profily Apparmor a SELinux a také Chroots. Běží na téměř každé architektuře a v cloudu bez námahy. Navíc můžete spustit jakoukoli distribuci Linuxu bez ohledu na hostitele. Řekněme tedy, že na vašem hostitelském počítači běží Ubuntu. Na tomto počítači můžete snadno spustit Red Hat nebo CentOS pomocí kontejnerů LXC.
LXC, na rozdíl od některých jiných kontejnerizačních služeb, nemůže provozovat Mac OS nebo Windows. Je to proto, že kontejnery LXC spoléhají přímo na hostitelské jádro. Pokud tedy chcete spouštět aplikace, které vyžadují jeden z těchto systémů, měli byste zvážit jinou platformu, jako je Docker. Celkově je LXC nejvhodnější pro lidi, kteří potřebují provozovat izolovaná prostředí Linuxu s minimální režií na zdroje.
Linuxové kontejnery vs. Docker
--Pokud pracujete v týmu DevOps nebo jako profesionál na spolehlivost webu, měli byste již znát Docker. V současné době je to nejoblíbenější platforma kontejnerizace pro cloudové aplikace. Můžete si tedy položit otázku, jak se LXC liší od Dockeru nebo který z nich je lepší. Stejně jako u jiných technologií závisí odpověď pouze na vašich případech použití. Nicméně vrhneme nějaký pohled na rozdíly mezi těmito dvěma populárními virtualizačními platformami.
Docker je relativně novější technologie ve srovnání s LXC. Ve svých počátcích totiž pod kapotou používal LXC. Docker však od té doby ušel dlouhou cestu a implementoval vlastní řešení. Nyní je hlavním rozdílem mezi Dockerem a LXC jejich výběr designu. Docker klade větší důraz na vytváření aplikací. LXC je na druhé straně navrženo pro poskytování samostatných virtuálních prostředí Linuxu.
Vývojáři obvykle používají Docker k vytváření aplikací, které lze zahodit, jakmile dorazí nová verze. Aplikace, které používají LXC, však mají být trvalé. Ssh můžete do kontejneru LXC stejně jako do vzdáleného hostitele Linuxu a spravovat prostředí. Docker to neumožňuje a ke správě nasazení a testování budete používat specializované nástroje. Nakonec můžete použít kterýkoli z nich pro vytváření cloudových aplikací. Lidé obvykle volí LXC před Dockerem při vytváření aplikací, které je třeba udržovat po dlouhou dobu.
LXC:Komponenty
Runtime LXC se skládá ze spousty jednotlivých komponent. To zahrnuje základní liblxc knihovna, sada standardních nástrojů pro ovládání kontejnerů, různé distribuční šablony a několik jazykových vazeb pro hlavní API. Jazyková podpora zahrnuje Python, Go, Ruby, Lua a Haskell. Kromě toho existují některé pevné závislosti, bez kterých se lxc nenainstaluje, jako je knihovna C jako glibc, uclib nebo bionic. LXC také vyžaduje verzi jádra 2.6.32 nebo více.
LXC:Typ virtualizace
Linuxové kontejnery (LXC) nabízí nominální prostředí operačního systému, které lze použít ke spouštění specifických linuxových aplikací nebo síťových služeb. Používá přímo jádro hostitelského systému a v důsledku toho jej nelze spustit na počítačích bez Linuxu. Uživatelé si mohou vybrat z velkého množství distribučních šablon pro svůj kontejner, včetně, ale bez omezení na Ubuntu, Fedora, Debian, Red Hat a CentOS.
Primární výhodou tohoto typu kontejneru je, že nám umožňují izolovat citlivé služby. Tento typ virtualizace můžete použít k vytváření prostředí pro analýzu malwaru, etické hackování nebo úkoly, které vyžadují samostatného hostitele. To jsou však pouze zamýšlené účely. Můžete tedy také spouštět libovolné služby, které obvykle spouštíte na svém počítači se systémem Linux. To je ostrý kontrast s přístupem Docker zaměřeným na aplikace.
LXC:Podpora nástrojů
Robustní podpora nástrojů je zásadní pro správu cloudových aplikací i samostatných služeb. LXC nabízí bohatou sadu nástrojů, které jsou téměř totožné s vaším tradičním linuxovým strojem. Nemusíte tedy instalovat luxusní nástroje pro správu, abyste mohli spravovat své kontejnery LXC. Můžete použít jakékoli standardní linuxové balíčky, jako jsou úlohy ssh, htop, iptables a Linux Cron. Díky tomu mohou správci snadno spravovat a automatizovat kontejnerové služby.
Kromě toho nabízí lxc cli komplexní sadu nástrojů pro vytváření, spouštění a správu kontejnerů LXC za běhu. V této příručce se dozvíte, jak jej nainstalovat a jak používat základní funkce. Navíc můžete také použít další nástroje pomocí LXD toolchain. O LXD budeme hovořit podrobně v následujících částech. Celkově LXC neomezuje možnost uživatele používat standardní linuxové balíčky a přitom stále nabízí specializované nástroje.
LXC:Ekosystém
Ekosystém LXC je prakticky totožný s ekosystémem Linuxu. Díky tomu je snazší začít s linuxovými kontejnery než s Dockerem nebo rkt. Vzhledem k tomu, že v těchto kontejnerech můžeme nainstalovat a spustit všechny standardní balíčky Linuxu, je snadné je konfigurovat a udržovat. Nenechte se tedy zaskočit, když zjistíte, že nejsou potřeba další nástroje, jako jsou Kubernetes a Swarm pro LXC.
LXC:Snadné použití
Jedním z klíčových důvodů pro přechod na kontejnerové platformy z virtuálních strojů Linux je snadnější použití. LXC to udělalo o krok vpřed tím, že zcela odstranilo nutnost instalovat monolitické balíčky. To nejen zvyšuje produktivitu, ale také usnadňuje manipulaci s pracovním postupem. Kontejnery LXC se dodávají s individuálními iniciačními systémy, které se postarají o konfiguraci systému a zároveň zachovávají nenáročnou stopu zdrojů.
Navíc díky hladkému uživatelskému prostředí a vyspělému ekosystému je LXC mnohem lepší volbou než tradiční virtuální stroje. Během několika minut můžete roztočit kontejner LXC a spustit v něm své oblíbené linuxové distro. Instalace a správa linuxových aplikací je stejně jednoduchá jako zadání několika každodenních příkazů. Pokud se tedy nechcete učit úplně novou sadu nástrojů a přesto být schopni provozovat izolované služby, kontejnery LXC nabízejí vynikající možnost.
LXC:Popularita
Není pochyb o tom, že linuxové kontejnery postrádají popularitu, které se těší Docker. Vyplývá to z některých stručných návrhových voleb, mezi které patří mimo jiné nemožnost spouštět prostředí Windows nebo Mac OS. Docker je lehčí než LXC a je tedy škálovatelnější. LXC je však mnohem starší než Docker a jeho kontejnery jsou výrazně samostatnější než Docker.
Kromě toho je LXC velmi vhodný pro vytváření testovacích prostředí, jako jsou laboratoře pro analýzu malwaru a tak dále. Díky tomu je mnohem populárnější mezi staršími IT profesionály, kteří pravidelně pracují s citlivými projekty. LXC se také těší větší oblibě v odvětvích, která vyvíjejí a udržují aplikace s dlouhou životností. Celkově, ačkoli LXC postrádá popularitu ve srovnání s Dockerem nebo rkt, nabízí zvýšenou bezpečnost a snadnou údržbu.
LXC:Výkon
Jak jsme již uvedli, jedním z hlavních důvodů, proč lidé používají kontejnerové platformy před virtuálními stroji, je snížení zátěže zdrojů. To zase vede k mnohem lepšímu výkonu. LXC nabízí více než desetinásobnou hustotu než tradiční virtuální stroje, jako je KVM (kernel-based Virtual Machine). To znamená, že můžete spustit až 10krát více kontejnerů na jednom hostiteli Linuxu ve srovnání s hostovanými počítači KVM.
Kromě toho jsou hypervizory také náchylné k nežádoucím problémům s latencí. Ve srovnání s KVM snižuje LXC latenci na 57 %. Kromě toho se kontejnery LXC načítají mnohem rychleji než virtuální emulátory podporované hypervizory. Například instance LXC se spouštějí o 94 % rychleji ve srovnání s KVM. Jak tedy vidíte, LXC poskytuje výrazné zvýšení výkonu snížením zátěže zdrojů a latence. A rychlejší načítání nabízí hladký uživatelský zážitek.
LXC:Integrace
Jednou z klíčových výhod linuxových kontejnerů je, že se opravdu dobře integrují se stávajícím softwarem. Nejste omezeni na používání pouze tradičních linuxových aplikací s LXC. Můžeme například použít LXC i Docker jako vzájemný doplněk. To znamená, že své mikroslužby Docker můžete jednoduše hostovat v instanci LXC, abyste jim poskytli lepší izolaci a vlastnosti podobné virtuálním počítačům. Díky tomu je mimořádně pohodlné spouštět a spravovat aplikace Docker.
Navíc to také odstraňuje omezení spouštění pouze aplikací nativních pro Linux. Můžeme tedy snadno vytvořit mikroslužbu Docker na Windows nebo Mac a spustit ji z kontejneru Linuxu. Toto je opravdu chytrá metoda. LXC je také vhodný pro OpenStack, populární platformu cloud computingu. Používá jej velké množství předních společností v oboru a obvykle se nasazuje jako IaaS (Infrastructure-as-a-Service). Díky tomu je nasazení a správa cloudových aplikací snazší než kdy dříve.
LXC:Migrace
Migrace je pro mnoho administrátorů klíčová a LXC v tomto ohledu poskytuje adekvátní podporu. Existuje více než jeden způsob migrace kontejneru Linux z jednoho hostitele na druhého. Můžete také provádět živou migraci, i když s určitými omezeními. Nejjednodušší způsob, jak migrovat kontejner na jinou platformu, je vytvořit zálohu a obnovit ji na cílovém počítači, buď fyzicky, nebo vzdáleně přes ssh.
Můžete také migrovat kontejner pomocí LXD API a protokolu Simplestreams. O LXD budeme hovořit v následující části. Takže se nebojte, pokud o tom ještě nevíte. Nezacházíme do přílišných podrobností o každém kroku procesu migrace. Možná to pokryjeme v jiném průvodci. Prozatím můžete na webu Ubuntu najít nějaké další informace týkající se živé migrace. Stéphane Graber, hlavní vývojář LXC, se na svém webu také zabýval migrací LXC.
LXC:Podpora
Stejně jako u každé nové platformy je podpora podniků velmi důležitá. Naštěstí LXC poskytuje v tomto ohledu špičkové služby. Bez ohledu na to, zda kontejnery Linux používáte pro osobní nebo obchodní účely, máte zaručeno, že získáte další podporu, kdykoli ji budete potřebovat. Navíc, protože LXC vyvíjí Canonical, společnost stojící za Ubuntu a dalším populárním open-source softwarem. Kvalita služeb je tedy co nejlepší.
Canonical také nabízí komerční podporu pro společnosti, které chtějí používat LXC pro své cloudové nativní aplikace. Je však také poskytován pro vydání Ubuntu LTS. LXC verze 2.0 a 3.0 jsou verze s dlouhodobou podporou. Pokud tedy chcete mít stabilní kontejnery na všech vašich platformách, měli byste se držet těchto verzí. Podpora dalších šablon distribuce obvykle závisí na konkrétní distribuci.
LXD:Začínáme
LXC začalo jako rozhraní uživatelského prostoru, které poskytuje přístup k vestavěným funkcím linuxového jádra. Je více než schopný plnit své úkoly. Se vznikem Dockeru a jeho výkonného ekosystému se však vývojáři zaměřili na vývoj vyspělejší platformy. Výsledkem je LXD, robustní systém pro správu kontejnerů, který může poskytnout zkušenosti podobné virtuálnímu stroji, ale využívající kontejnery LXC.
LXD je založen na obrázcích, podobně jako obrázky Docker. Implementuje také jednoduché, ale výkonné REST API pro snadnou interakci se službami. Toto API se připojuje k místnímu systému pomocí Unix socketu a lze jej také vzdáleně připojit přes standardní síťové protokoly.
Některé z funkcí LXD zahrnují zvýšenou bezpečnost, škálovatelnost, uživatelskou zkušenost, živou migraci, pokročilé řízení zdrojů, správu sítě a správu úložiště. Celkově vzato, LXD doplněk k LXC, nikoli náhrada. Používá LXC pod kapotou a jednoduše odstraňuje nízké detaily.
Instalace a používání LXC
O výhodách linuxových kontejnerů jsme diskutovali do velkých podrobností. Nyní je čas zašpinit si ruce a začít používat tuto úžasnou technologii. Nejprve však musíte na svůj počítač nainstalovat LXC.
Ukazujeme, jak nainstalovat LXC na standardní počítač se systémem Linux. Naučíte se, jak nainstalovat LXC v Linuxu a vytvářet kontejnery pomocí CLI. Jednoduše otevřete svůj oblíbený emulátor terminálu Linux a zadejte následující příkaz.
$ sudo apt-get install lxc
Tím se nainstaluje lxc CLI na váš místní počítač. Jakmile to uděláte, budete mít přístup ke všem příkazům lxc a také distribučním šablonám, které jsou nezbytné k sestavení a spuštění kontejnerů. Nyní můžete vytvořit základní kontejner pomocí následujícího jednoduchého příkazu.
$ lxc-create -t <template> -n <container name>
-t příznak určuje název šablony a -n příznak určuje název kontejneru. Tento příkaz vytvoří kontejner na základě dané distribuční šablony. Pomocí níže uvedeného příkazu zobrazte seznam všech dostupných šablon.
$ ls /usr/share/lxc/templates/
Níže uvedený příkaz tedy vytvoří kontejner s názvem test-container pomocí šablony Alpine.
$ lxc-create -t alpine -n test-container
Toto bude pokračovat a stáhne se soubory potřebné pro instalaci Alpine. To by mělo chvíli trvat a po dokončení se zobrazí výchozí uživatel a heslo. Nyní můžete kontejner spustit pomocí níže uvedeného příkazu.
$ sudo lxc-start -n test-container
Pomocí následujícího příkazu se připojte k tomuto kontejneru pomocí výchozího uživatelského jména a hesla.
$ sudo lxc-console -n test-container
Tím se připojíte k běžícímu kontejneru. K odpojení od tohoto kontejneru použijte kombinaci kláves Ctrl+a+q. Ke kontejneru se můžete také připojit přímo jako root pomocí následujícího.
$ sudo lxc-attach -n test-container
Pomocí níže uvedeného příkazu se můžete podívat na některé informace o tomto kontejneru.
$ sudo lxc-info -n test-container
Zobrazí název kontejneru spolu s jeho stavem, PID, IP adresou, využitím paměti, CPU a dalšími. Pokud jste spustili více kontejnerů, můžete si jejich seznam zobrazit pomocí následujícího.
$ sudo lxc-ls
Chcete-li zastavit konkrétní kontejner, použijte následující příkaz.
$ sudo lxc-stop -n test-container
Můžete také odstranit kontejner ze systému, pokud jej již nepotřebujete. Pro tento účel použijte níže uvedený příkaz.
$ sudo lxc-destroy -n test-container
Tím vymažete testovací kontejner spolu se všemi jeho konfiguracemi z vašeho hostitelského prostředí. Další podrobnosti o každém dostupném příkazu naleznete na stránce dokumentace LXC.
Instalace a používání LXD
Jak jsme již probrali, LXD je obal pro LXC se seznamem přidaných funkcí. Je to v podstatě systém správy založený na obrazech pro kontejnery Linux. Lxd můžete nainstalovat pomocí následujícího příkazu.
$ sudo snap install lxd
Pokud instalujete LXD, nemusíte LXC instalovat samostatně. Kromě balíčku snap je LXD k dispozici také jako balíčky pro Debian. Můžete jej také nainstalovat ze zdroje. Nyní musíte udělat nějaké konfigurační věci. První je přidat /snap/bin/lxd do $PATH vašeho systému.
$ echo 'export PATH="/snap/bin/lxd:$PATH"' >> ~/.bashrc $ source ~/.bashrc
Nyní musíte inicializovat konfiguraci lxd. Jednoduše spusťte následující příkaz terminálu Linux.
$ sudo lxd init
Zeptá se vás na spoustu možností. Nyní si můžete vybrat výchozí. Jakmile je konfigurace hotová, můžete nyní vytvořit svůj první kontejner. LXD vytváří instance kontejnerů pomocí obrázků. Níže uvedený příkaz zobrazuje seznam dostupných úložišť obrázků. Můžete přidávat nové zdroje obrázků a také je lokálně vytvářet. Prozatím zůstaneme u oficiálních dálkových ovladačů.
$ sudo lxc launch images:alpine
Tento příkaz vytvoří instanci pomocí alpského obrázku. Je to poměrně lehký obrázek, který velmi dobře vyhovuje našemu účelu. Pokud chcete, můžete použít jiné obrázky. Nyní můžete použít níže uvedený příkaz k získání shellu do tohoto nově vytvořeného kontejneru.
$ sudo lxc exec test-container /bin/sh
Pokud jste kontejner vytvořili na základě obrazu Ubuntu, nahraďte /bin/sh pomocí /bin/bash pro vyvolání bash shellu. Můžete také použít jakýkoli standardní linuxový shell, pokud to obrázek kontejneru podporuje. Můžete také spustit příkaz uvnitř kontejneru bez připojení k shellu.
$ sudo lxc exec test-container -- ip a
Tím se vytiskne IP adresa rozhraní kontejneru pomocí příkazu Linux ip. Nakonec můžete testovací kontejner zastavit pomocí příkazu níže.
$ sudo lxc stop test-container
LXD podporuje mnoho dalších příkazů pro kontejnery Linuxu. Přejděte na stránku dokumentace LXD, kde najdete další podrobnosti.
Konec myšlenek
Linuxové kontejnery jsou skvělým způsobem, jak implementovat lehké virtuální počítače bez jakýchkoli hypervizorů. Díky tomu jsou vysoce škálovatelné a šetrné ke zdrojům. Navíc LXC také nabízí životaschopný přístup k vývoji cloudových nativních aplikací. Primární rozdíl mezi kontejnery LXC a kontejnery Docker je ten, že LXC je zaměřený na OS, zatímco kontejnery Docker jsou zaměřené na aplikace.
Pokud tedy hledáte vytvoření osobního laboratorního prostředí nebo robustní cloudové služby, považujte LXC za lepší možnost než Docker nebo rkt. Přesto je Docker stále výbornou volbou pro virtualizaci aplikací. Pokud si tedy chcete Docker vyzkoušet, podívejte se na našeho průvodce každodenními příkazy Dockeru.