Linux konténerek használata LXC és LXD használatával

A régi szép időkben az operációs rendszer telepítése azt jelentette, hogy összeszedte az összes hardverelemet, az új számítógépet egy perifériás meghajtóban lévő telepítőlemezzel feltüzelte, és a telepítési folyamat laza volt. A teljes eltelt idő órák és hetek között tarthat.

Manapság azt mondhatom magamnak: "Nem bánnám, ha ezt tesztelném egy olyan szerveren, amely a CentOS egy adott verzióját futtatja", és - számos változótól függően, és feltételezve, hogy az eredeti kép már le van töltve - egy teljesen működő eszközöm lehet a virtuális rendszer 30 másodpercen belül készen áll. Pontos eredményei változhatnak, de nem annyira.

Láthatja, hogy mindez hogyan működik az új Pluralsight "Linux rendszeroptimalizálás" tanfolyamon - amelyen ez a cikk alapul.

Mi hajtotta ezt a változást? Virtualizáció. És különösen a konténer virtualizáció.

A virtualizált operációs rendszer egy fájlrendszer, amely tartalmazza az összes szoftverkönyvtárat, bináris fájlokat és konfigurációs fájlokat, amelyekre a hagyományos gép elindításához szükség lenne. Csak annyit, hogy ezt a fájlrendszert nem a gyökér vagy indító partíció tárolja, amelyet a számítógép bekapcsoláskor olvasna, hanem a tárolókötet más részén.

A virtuális számítógép "bekapcsolása" akkor történik, amikor egyes szoftverek okosan becsapják a fájlokat, és azt gondolják, hogy önmagukban futnak a saját hardverükön, amikor valóban megosztják a helyet és az erőforrásokat a gazdagép operációs rendszerével, és talán másokkal virtuális számítógépek.

Általánosságban elmondható, hogy kétféle szoftverrendszert használnak a szerver virtualizáció adminisztrációjához: hipervizor és tároló.

A hipervizorok olyan absztrakciós réteget biztosítanak, amely lehetővé teszi a vendég virtuális gépek számára, hogy elszigetelt környezetet hozzanak létre a csupasz fém kiszolgálót utánzó rendszer hardveréhez való hozzáféréssel. Ez azt jelenti, hogy a hipervizoros virtuális gépek bármilyen operációs rendszerből felépíthetők, amelyek kompatibilisek az alapul szolgáló hardverrel. De ez azt is jelenti, hogy több helyet és memóriát használnak fel, és erőforrásokat számolnak.

Konténer virtualizáció

A konténerek viszont megosztják a gazdaszámítógép operációs rendszermagját, és gondosan biztonságos és elkülönített terekben vannak, amelyeket olyan rendszereszközök kezelnek, mint a csoportok. Mivel megosztják a kernelt, a tárolók által felhasznált memória és rendszererőforrások valóban minimálisak lehetnek, abszolút semmit sem pazarolva. És amint látni fogja, a konténeralkalmazások futtatásának sebessége lélegzetelállító lesz.

Az elmúlt évek során a konténerekkel kapcsolatos figyelem nagy hangsúlyt fektetett a Dockerre és újabban a Google konténer-hangszerelő eszközére, a Kubernetes-re. Valójában a Kubernetes jól alkalmazható vállalati szintű mikroszolgáltatások architektúráihoz.

De van egy régebbi és vitathatatlanul kiforrottabb implementációja a konténer modellnek, amely még sehova sem ment. A Linux Container Project, az LXC és a legújabb eszközkészlet, az LXD erősségei olyanok, hogy sokak szerint jobb jelöltté válna egyes használati esetekben, mint a Kubernetes. Az LXC különösen könnyű és gyors homokozós környezetek kiépítésében tevékenykedik tesztelés és alkalmazásfejlesztés céljából.

Ebben a cikkben bemutatom, hogyan kell telepíteni az LXD-t, hogyan lehet elkészíteni és elindítani az ultrakicsi Alpine Linuxot futtató egyszerű konténert, majd hogyan kell megnyitni egy shell-munkamenetet az új tárolóban. Azt is elmagyarázom, hogyan lehet más disztribúciók több verzióját megtalálni és elindítani.

Egy dolgot azonnal elmondhatok, hogy valahányszor tanítom az LXC-t, a hallgatók csodálkozva válaszolnak arra, hogy milyen hatékony és hatékony lehet a konténerek használata.

Ha mindezzel készen állunk, másodpercek alatt képesek lesznek gépeket felgyújtani, hogy gyakorlati tesztelést végezzenek. Ha egy kísérlet elromlik, azonnal leállíthatja, eltávolíthatja a tárolót, és létrehozhat egy újabbat annak helyettesítésére. Egyszerűen már nincs mentség arra, hogy ne tanuljunk.

LXD konténerek építése

Az LXC futását az Ubuntu 18.04 gép friss telepítésén fogjuk elvégezni. Ebben a bemutatóban telepítünk és inicializálunk egy LXD környezetet, majd az LXC parancssori felület LXD változatát használjuk egy Alpine Linux konténer letöltésére és elindítására. Megerősítjük, hogy minden működött, majd egy kicsit körülnézünk, hogy lássuk, milyen a környezet.

A snap csomagkezelőt fogom használni az LXD telepítéséhez, mert ez most a hivatalos ajánlás. És nem csak az LXD esetében, ne feledje: mindenféle alkalmazás olyan alternatív vezetők felé sodródik, mint a snap vagy az AppImmage és a Flatpak. Még mindig szeretem a Debian képességeit, de nem lehet harcolni az egész világgal.

$ sudo snap install lxd 

Az LXD - amely ismét egy frissített eszközkészlet az LXC API kezelésére - egy olyan csomagban található, amely tartalmazza az összes szokásos LXC-függőséget. Egy telepítési parancs és kész.

Fontos az LXC környezet inicializálása az lxd init paranccsal. Manuálisan beállíthatja a dolgokat, de valószínűbb, hogy így minden rendben lesz. Az init folyamat egy csomó kérdést tesz fel neked, és legalább most az alapértelmezett válaszok működni fognak.

$ sudo lxd init 

Miután ez megtörtént, készen állunk az első konténer elkészítésére. Bármelyik Linux disztribúciót és verziót is szeretnénk, meg kell találnunk és le kell töltenünk a képet. Az LXC projekt a képek széles skáláját tárolja a images.linuxcontainers.org címen. Láthatja, hogy az egyes disztróknak általában több verziója van, amely lehetővé teszi olyan tárolók felépítését, amelyek szinte bármilyen szoftverrel működnek, amelyeket dobhat.

Az Alpine Linux legújabb verzióját fogom használni, mert az valóban kicsi. Használjon bátran tetszőleges képet - beleértve a nagyfiúkat is, mint az Ubuntu és a CentoOS. Az Alpine természetesen nagyon gyorsan letölt.

De mielőtt ezt megtennénk, el kell mondanom, hogyan kell kitalálni a kép megszerzéséhez szükséges parancssori szintaxist.

Amint az LXD webhelyének ezen a felvételén látható, három információra van szüksége, amelyekre szüksége lesz magáról az oldalról: a disztribúció neve - Alpine, ebben az esetben - a kiadás száma - 3,10 - és az architektúra . Az amd64 után járunk.

Most már készen állunk a letöltés elindítására a launchparancs futtatásával :

$ sudo lxc launch images:alpine/3.10/amd64 demo 

Vegye figyelembe, hogy a szintaxis "lxc", annak ellenére, hogy ez technikailag egy LXD interfész. A "képek" azt mondják az LXC-nek, hogy képünk a korábban látott nyilvános repóban él. Három adatunkat - a disztribúció nevét, a kiadás számát és az architektúrát - előre perjelekkel elválasztva adjuk meg. A "demo" -t fogom használni a tárolóm neveként. Ennyi kellene.

Láthatja, hogy az Alpine milyen kicsi, ha gyorsan letöltődik. Az internetkapcsolatom nem olyan gyors, és a játékkal még nem játszottam játékot. Annak megerősítésére, hogy működött, az "lxc ls" futtatásával listázom az összes telepített tárolót. Csak egy van. És a jelenlegi állapota "fut".

sudo lxc ls +------+---------+----------------------+------------+-----------+ | NAME | STATE | IPV4 | TYPE | SNAPSHOTS | +------+---------+----------------------+------------+-----------+ | demo | RUNNING | 10.125.45.119 (eth0) | PERSISTENT | 0 | +------+---------+----------------------+------------+-----------+ 

Megnyithat egy nem bejelentkezési root munkamenetet egy tárolóban az "lxc exec" paranccsal. Csak adja meg a tároló nevét, majd mondja el az LXC-nek, hogy egy shellet akar futtatni az sh tolmács segítségével (érdemes lehet, /bin/bashha Ubuntu vagy CentOS tárolóval dolgozik - a hívása mindkét irányban). Mint saját maga is meggyőződhet arról, hogy otthon követi-e, van egy normál Linux parancssorunk, és most már bármi lehetséges a Linux-y.

$ sudo lxc exec demo sh ~ # 

Futtathat egyetlen parancsot a teljes héj megnyitása nélkül is, ha e helyett beírja a parancsot sh.

$ sudo lxc exec demo ls / bin etc lib mnt proc run srv tmp var dev home media opt root sbin sys usr 

A héjból bármikor menthet, és bármikor exitvisszatérhet a gazdájához. A futó tárolók felsorolása mellett itt felsorolhatok minden tárolót is. Az inicializálás során létrehozott alapértelmezett készlet ott van, és láthatjuk, hol van tárolva a lemezkép. A / var / lib / lxd alapértelmezés szerint az összes LXC erőforrást megőrzi.

$ sudo lxc storage ls +---------+-------------+--------+--------------------------------+---------+ | NAME | DESCRIPTION | DRIVER | SOURCE | USED BY | +---------+-------------+--------+--------------------------------+---------+ | default | | btrfs | /var/lib/lxd/disks/default.img | 3 | +---------+-------------+--------+--------------------------------+---------+ 

Hasonlóképpen fel tudom sorolni az összes hálózatomat. Véletlenül van néhány hálózati híd ezen a rendszeren (játszottam egy kicsit, amint láthatja). Van még egy fizikai enp0s3 híd, amelyet a gazdagép Ubuntu szervere használ. Bár köztetek és köztem ez sem fizikai, mivel ez valójában egy virtuális gép, amely az Oracle virtuális dobozában fut.

$ lxc network ls +---------+----------+---------+-------------+---------+ | NAME | TYPE | MANAGED | DESCRIPTION | USED BY | +---------+----------+---------+-------------+---------+ | enp0s3 | physical | NO | | 1 | +---------+----------+---------+-------------+---------+ | lxdbr0 | bridge | YES | | 1 | +---------+----------+---------+-------------+---------+ | mynet | bridge | YES | | 0 | +---------+----------+---------+-------------+---------+ | testbr0 | bridge | YES | | 1 | +---------+----------+---------+-------------+---------+ 

Ha szükséges, könnyen hozzáadhatunk egy új virtuális felületet a tárolónkhoz az "lxc network attach" paranccsal. Itt megadom a fizikai hálózatot, majd a tárolónk nevét.

$ lxc network attach enp0s3 demo 

Ha ezzel megtörtént, új héjat nyithat meg a tárolóban, hogy lássa, mi változott. Most fel kell tüntetni egy eth1 interfészt. Előfordulhat, hogy újra kell indítania, hogy az összes módosítás teljes mértékben érvényesüljön. Ezzel meg is csodálkozhat, hogy ez a dolog milyen gyorsan képes újraindulni - minden célból gyorsabban fog megtörténni, mint ahogy beírja a execparancsot egy új shell megnyitásához.

Élvezze új környezetét!

Ez a cikk a Pluralsight tanfolyamom "Linux rendszeroptimalizálás" tartalmán alapul. Sokkal több adminisztrációs jóság érhető el könyvek, tanfolyamok és cikkek formájában, amelyek elérhetőek a bootstrap-it.com oldalon.