LXC
LXC je jedna od tehnologija virtualizacije na razini operativnog sustava (tzv. Linux kontejnerizacije)
Virtualizacija na razini operativnog sustava koristi metode izolacije resursa na razini operativnog sustava, poput Linux kontejnera, gdje sve instance (obično zvane kontejneri) moraju dijeliti kernel (jezgru) operativnog sustava instaliranog na fizičko računalo. Iako se operativni sustavi za goste (Linux kontejnere [LXC]) mogu razlikovati u korisničkom prostoru, kao što su različite distribucije Linuxa, koje koriste isti kernel (od fizičkog računala), u njih (kontejnere) se ne mogu instalirati drugačiji operativni sustavi.
To znači da, ako na fizičkom računalu imamo instaliran Linux (pr. Debian distribucija), da kao gostujući Linux kontejner možemo imati bilo koju drugu distribuciju Linuxa (pr. Ubuntu, Rocky Linux, ... ), ali ne i primjerice Windows ili macOS.
To je tako jer Linux na fizičkom računalu, prema Linux kontejneru prosljeđuje sve svoje resurse, preko mehanizama izolacije i ograničavanja resursa (tzv. cgroups ) te dodatno preko imeničnih izolacijskih prostora Linuxa (Linux namespace). Dok aplikacije unutar Linux kontejnera s fizičkim računalom (Linuxom) komuniciraju preko izoliranih imeničnih prostora, pomoću sistemskih poziva Linuxa.
Linux Containers (LXC)[1] je jedna od virtualizacijskih metoda na razini operativnog sustava za pokretanje više izoliranih Linux sustava (kontejnera) na fizičkom računalu (hostu) koristeći njegov Linux kernel.
Linux kernel pruža funkcionalnost cgroups koja omogućuje ograničavanje i prioritizaciju resursa linux kontejnera, kao što su:
- CPU
- RAM memorija.
- Diskovni sustav (I/O).
- Mrežni sustav i dugo
Kako bi sve prethodno navedeno radilo, odnosno da bi Linux kontejner bio u izoliranom okruženju odnosno izoliranom od Linuxa na fizičkom računalu, koristi se metoda izolacije upotrebom takozvanih imeničnih prostora (Linux namespaces[2]). Njih postoji nekoliko kategorija[3]:
- Mount (mnt) - imenični prostor montiranja koji kontrolira točke montiranja. Nakon stvaranja, montiranja iz trenutnog izoliranog prostora, kopiraju se u novi imenični prostor, ali točke montiranja stvorene nakon toga ne šire se između imeničnih prostora. (Upotrebom zajedničkih podstabala, moguće je širiti točke montiranja između imeničnih prostora).
- Process ID (pid) - PID imenični prostor pruža procesima (pokrenutim programima) nezavisan skup ID-ova procesa (PID-ova) od drugih imeničnih prostora. PID prostori imena su ugniježđeni, što znači da će, kada se kreira novi proces, on imati PID za svaki imenični prostor od trenutnog imeničnog prostora, do početnog imeničnog prostora ( PID-a). Stoga početni PID imenični prostor može vidjeti sve procese, iako s drugačijim PID-ovima s kojima će drugi imenični prostori vidjeti procese. Prvom procesu kreiranom u imeničnom prostoru PID-a dodjeljuje se ID broj 1 procesa i prima većinu istog posebnog tretmana kao i normalni init proces, ponajviše da su pod procesi unutar imeničnog prostora pridruženi njemu. To također znači da će prekid ovog PID 1 procesa odmah prekinuti sve procese u njegovom PID imeničnom prostoru i sve njegove pod procese (sve pokrenute programe).
- Network (net) - Mrežni imenični prostori virtualiziraju mrežni stog. Prilikom stvaranja mrežnog imeničnog prostora postoji samo sučelje povratne petlje (loopback). Svako mrežno sučelje (fizičko ili virtualno) prisutno je u točno 1 imeničnom prostoru i može se premještati između imeničnih prostora. Svaki imenični prostor imat će privatni skup IP adresa, vlastitu tablicu usmjeravanja, popis socketa, tablicu praćenja veze, vatrozid i druge resurse povezane s mrežom. Uništavanje mrežnog imeničnog prostora uništava sva virtualna sučelja unutar njega i premješta sva fizička sučelja unutar njega natrag u početni mrežni imenični prostor.
- Interprocess Communication (ipc) - IPC imenični prostori izoliraju procese od međuprocesne komunikacije u stilu SysV. Ovo sprječava procese u različitim imeničnim prostorima IPC-a da koriste, na primjer, SHM obitelj funkcija za uspostavljanje raspona zajedničke dijeljene memorije između dva procesa. Umjesto toga, svaki će proces moći koristiti iste identifikatore za dijeljenu memorijsku regiju i proizvesti dvije takve različite regije.
- UTS - UTS (UNIX Time-Sharing) imenični prostori omogućuju da jedan sustav izgleda kao da ima različita imena hostova i domena za različite procese (pokrenute programe). Kada proces kreira novi UTS imenični prostor... ime hosta i domena novog UTS imeničnog prostora kopiraju se iz odgovarajućih vrijednosti u UTS imeničnom prostoru pozivatelja.
- User ID (user) [UID] - Korisnički imenični prostori su značajka za pružanje izolacije privilegija i segregacije identifikacije korisnika u više skupova procesa dostupnih od kernela 3.8. Uz administrativnu pomoć moguće je izgraditi spremnik s prividnim administrativnim pravima bez stvarnog davanja povišenih privilegija korisničkim procesima. Poput imeničnog PID prostora, imenični prostori korisnika (UID) su ugniježđeni i svaki novi imenični prostor korisnika, smatra se podređenim imeničnim prostorom korisnika koji ga je stvorio. Korisnički imenični prostor sadrži tablicu mapiranja koja pretvara korisničke ID-ove sa gledišta kontejnera u gledište sustava. To omogućava, na primjer, root korisniku da ima korisnički ID 0 u kontejneru, ali ga sustav za provjere vlasništva zapravo tretira kao korisnički ID 1.400.000. Slična se tablica koristi za preslikavanje grupnih ID-ova i provjere vlasništva.
- Control group (cgroup) Namespace - imenični prostor cgroup skriva identitet kontrolne grupe čiji je proces član. Proces u takvom imeničnom prostoru, provjeravajući dio koje je kontrolne grupe koji proces, vidio bi putanju koja je zapravo relativna u odnosu na kontrolnu grupu postavljenu u vrijeme stvaranja, skrivajući svoju pravu poziciju i identitet kontrolne grupe. Ova vrsta imeničnog prostora postoji od ožujka 2016. od Linux kernela 4.6.
- Time Namespace - imenični prostor vremena omogućuje procesima da vide različita sistemska vremena na način sličan UTS imeničnom prostoru. Predložen je 2018. i postoji od Linux kernela 5.6, koji je objavljen u ožujku 2020.
Dakle Linux kontejneri, poput LXC rade bez potrebe za pokretanjem unutar virtualnog računala odnosno bez upotrebe potpune virtualizacije, što donosi značajno manje zauzeće sistemskih resursa.[4]
Osim LXC linux kontejnera, postoje i druge vrste kontejnera, poput:
- Linux kontejnerske tehnologije, poput: OpenVZ, LXC, Docker, Podman, ...
- Solaris (Unix) containers
- FreeBSD jails i mnogi drugi.
- ↑ Linux Containers - LXC - Introduction. linuxcontainers.org. Pristupljeno 29. studenoga 2022.
- ↑ cgroup_namespaces(7) - Linux manual page. man7.org. Pristupljeno 29. studenoga 2022.
- ↑ Huỳnh, Quân. 10. kolovoza 2022. Kubernetes Story — Linux namespaces and cgroups: What are containers made from?. Medium (engleski). Pristupljeno 29. studenoga 2022.
- ↑ Horvat, Hrvoje. 6. srpnja 2023. Operativni sustavi i računalne mreže - Linux u primjeni. Hrvoje Horvat. Osijek. str. 1100–1109. doi:10.5281/zenodo.8119310. ISBN 978-953-59438-9-1CS1 održavanje: datum i godina (link)