Kako koristiti Linux spremnike s LXC i LXD

U dobra stara vremena instaliranje operativnog sustava značilo je spajanje svih hardverskih komponenata, puštanje novog računala s instalacijskim diskom u periferni pogon i labav postupak instalacije učini svoje. Ukupno proteklo vrijeme moglo bi trajati između sati i tjedana.

Ovih dana mogu si reći "ne bih imao ništa protiv da to testiram na poslužitelju koji pokreće određenu verziju CentOS-a" i - ovisno o velikom broju varijabli i pod pretpostavkom da je izvorna slika već preuzeta - mogu imati potpuno funkcionalno virtualni sustav spreman u roku od 30 sekundi. Točni se rezultati mogu razlikovati, ali ne toliko.

Kako sve ovo funkcionira možete vidjeti na mom novom tečaju Pluralsight "Optimizacija sustava Linux" - na kojem se temelji ovaj članak.

Što je pokretalo sve ove promjene? Virtualizacija. I, posebno, virtualizacija spremnika.

Virtualizirani OS je datotečni sustav koji sadrži sve softverske knjižnice, binarne datoteke i konfiguracijske datoteke koje su vam potrebne za pokretanje tradicionalnog stroja. Samo što se ovaj sustav datoteka ne pohranjuje u root ili particiju za pokretanje koje bi vaše računalo čitalo dok se uključuje, već u neki drugi dio vašeg prostora za pohranu.

A "napajanje" vašeg virtualnog računala događa se kada neki softver pametno zavara datoteke misleći da ih sami pokreću na vlastitom hardveru, kada stvarno dijele prostor i resurse s operativnim sustavom domaćina i, možda, nekim drugim virtualna računala.

Široko govoreći, postoje dvije vrste softverskih sustava koji se koriste za administraciju virtualizacije poslužitelja: hipervizor i spremnik.

Hipervizori pružaju sloj apstrakcije koji gostujućim VM-ovima omogućuje stvaranje izoliranog okruženja s pristupom hardveru sustava koji oponaša goli metalni poslužitelj. To znači da se VM hipervizora mogu graditi iz bilo kojeg operativnog sustava kompatibilnog s vašim temeljnim hardverom. Ali to također znači da će potrošiti više prostora i više memorije i računarskih resursa.

Virtualizacija spremnika

S druge strane, spremnici dijele OS jezgru glavnog računala i postoje u pažljivo osiguranim i izoliranim prostorima kojima upravljaju sistemski alati poput cgroups. Budući da dijele jezgru, memorija i sistemski resursi koje kontejneri troše mogu biti uistinu minimalni, uz apsolutno ništa izgubljeno. I, kao što ćete vidjeti, brzine koje ćete pokrenuti s aplikacijama spremnika oduzimaju dah.

Puno pozornosti povezane s kontejnerima tijekom posljednjih nekoliko godina bilo je usmjereno na Docker i, u novije vrijeme, Googleov alat za orkestraciju spremnika, Kubernetes. Zapravo, Kubernetes je vrlo pogodan za arhitekture mikroservisa poduzeća.

No, postoji starija i, vjerojatno, zrelija implementacija modela spremnika koja nigdje nije otišla. Projekt Linux Container Project, LXC, i njegov noviji set alata, LXD, imaju snage za koje bi mnogi tvrdili da su bolji kandidat za neke slučajeve korištenja od Kubernetesa. LXC se posebno ističe u gradnji laganih i brzih okruženja u zaštićenom okruženju za testiranje i razvoj aplikacija.

U ovom članku pokazat ću vam kako instalirati LXD, kako pripremiti i pokrenuti jednostavni spremnik koji pokreće ultra mali Alpine Linux, a zatim kako otvoriti sesiju ljuske u vašem novom spremniku. Također ću objasniti kako pronaći i pokrenuti više verzija drugih distribucija.

Jedno vam mogu odmah reći da kad god predajem LXC, studenti sa zaprepaštenjem reagiraju koliko moćna i učinkovita upotreba spremnika može biti.

Kad završimo sa svime ovim, moći ćete pokrenuti strojeve kako biste u roku od nekoliko sekundi testirali sve ono što učite ili radite. Kada se eksperiment pokvari, možete odmah isključiti i ukloniti spremnik i sagraditi drugi koji će ga zamijeniti. Jednostavno više nema izgovora da se ne nauči.

Izgradnja LXD spremnika

Pokrenut ćemo LXC koji radi na svježoj instalaciji Ubuntu 18.04 stroja. U ovoj demonstraciji instalirat ćemo i inicijalizirati LXD okruženje, a zatim upotrijebiti LXD verziju sučelja LXC naredbenog retka za preuzimanje i pokretanje Alpine Linux spremnika. Potvrdit ćemo da je sve uspjelo, a zatim malo razgledati oko sebe kako bismo vidjeli kako je okoliš naseljen.

Koristit ću snap manager za instaliranje LXD-a jer je to sada službena preporuka. I ne samo za LXD, imajte na umu: sve vrste aplikacija prelaze na zamjenske upravitelje poput snap ili AppImmage i Flatpak. I dalje volim svoju sposobnost za Debian, ali ne možete se boriti protiv cijelog svijeta.

$ sudo snap install lxd 

LXD - koji je, opet, ažurirani skup alata dizajniran za upravljanje LXC API-jem - dolazi u paketu koji uključuje sve redovite ovisnosti o LXC-u. Jedna naredba za instalaciju i gotovi smo.

Važno je inicijalizirati LXC okruženje pomoću naredbe lxd init. Stvari biste mogli sami postaviti ručno, ali vjerojatnije je da ćete sve ispraviti na ovaj način. Postupak pokretanja postavit će vam hrpu pitanja i, barem zasad, svi zadani odgovori će raditi.

$ sudo lxd init 

Nakon što završimo, spremni smo za izgradnju vašeg prvog spremnika. Koju god Linux distribuciju i verziju željeli, morat ćemo pronaći i preuzeti sliku. LXC projekt održava spremište velikog broja slika na images.linuxcontainers.org. Možete primijetiti da obično postoji više verzija svakog distro-a, što vam omogućuje izradu spremnika koji će raditi sa gotovo bilo kojim softverom koji na njega možete baciti.

Koristit ću najnoviju verziju Alpine Linuxa jer je stvarno mala. Slobodno koristite bilo koju sliku koja vam se sviđa - uključujući velike dečke poput Ubuntu-a i CentoOS-a. Alpine će se, naravno, preuzeti vrlo brzo.

Ali prije nego što to učinimo, trebao bih vam reći kako shvatiti sintaksu naredbenog retka potrebnu za dobivanje vaše slike.

Kao što možete vidjeti na ovom snimku zaslona s web stranice LXD, tri stranice potrebne su vam sa same stranice: naziv distroa - Alpine, u ovom slučaju - broj izdanja - 3.10 - i arhitektura . Tražimo amd64.

Sada smo spremni pokrenuti preuzimanje pokretanjem launchnaredbe:

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

Primijetite kako je sintaksa "lxc", iako je ovo tehnički LXD sučelje. "images" govori LXC-u da naša slika živi u javnom repo-u koji smo ranije vidjeli. Naša tri bita podataka - naziv distroa, broj izdanja i arhitektura, unose se odvojeno kosim crtama. Upotrijebit ću "demo" kao naziv svog spremnika. To bi trebalo biti sve što trebamo.

Koliko je Alpine mala, možete vidjeti po tome kako se brzo preuzima. Moja internetska veza nije tako brza i nisam igrao nijednu igricu sa snimkom. Da bih potvrdio da je uspjelo, pokrenut ću "lxc ls" da bih nabrojao sve trenutno instalirane spremnike. Postoji samo jedan. A njegov trenutni status je "pokrenut".

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

Možete otvoriti root prijavu u prijavu u spremniku pomoću naredbe "lxc exec". Samo navedite ime spremnika, a zatim recite LXC-u da želite pokrenuti ljusku pomoću tumača sh (možda biste radije /bin/bashako radite s Ubuntu ili CentOS spremnikom - vaš poziv u svakom slučaju). Kao što ćete se i sami moći uvjeriti pratite li kod kuće, imamo uobičajeni Linux naredbeni redak i sve što je Linux-y sada moguće.

$ sudo lxc exec demo sh ~ # 

Mogli biste pokrenuti i jednu naredbu bez otvaranja pune ljuske tako da upišete naredbu umjesto ove sh.

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

Možete se osloboditi ljuske u bilo kojem trenutku exiti vratite se svom hostu. Ovdje, osim popisa tekućih spremnika, mogu navesti i sve spremišta za pohranu. Tamo je zadani bazen koji je stvoren tijekom inicijalizacije i možemo vidjeti gdje je pohranjena slika diska. / var / lib / lxd je, prema zadanim postavkama, mjesto gdje se čuvaju svi LXC resursi.

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

Na sličan način mogu navesti sve svoje mreže. Slučajno postoji nekoliko mrežnih mostova na ovom sustavu (malo sam se poigrao, kao što vidite). Tu je i fizički most enp0s3 koji koristi host Ubuntu poslužitelj. Iako između vas i mene, ni taj nije fizički, jer je ovo zapravo VM koji radi u Oracleovom virtualnom okviru.

$ 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 | +---------+----------+---------+-------------+---------+ 

If we needed to, we could easily add a new virtual interface to our container using the "lxc network attach" command. Here, I'll specify the physical network and then the name of our container.

$ lxc network attach enp0s3 demo 

With that done, you could open a new shell in the container to see what's changed. There should now be an eth1 interface listed. You may need to reboot for all the changes to take full effect. By doing that you can also marvel at just how fast this thing can reboot itself - for all intents and purposes, it'll happen faster than you can type your exec command to open a new shell.

Enjoy your new environment!

This article is based on content in my Pluralsight course, "Linux System Optimization." There's much more administration goodness in the form of books, courses, and articles available at bootstrap-it.com.