Skoči na vsebino

Navidezni stroji in vsebniki

Prve poskuse abstrakcije strojne opreme je predstavil IBM pred več kot petdeset leti, ko so poskusili več skupinam uporabnikov omogočiti sočasno rabo računalniških virov. Zaradi podobnih razlogov se navidezni stroji ali navidezni računalniki intenzivno razvijajo tudi danes: sodobni računalniški strežniki ponuja toliko virov, da jih ena sama aplikacija težko učinkovito izkoristi. Za bolj učinkovito rabo in lažje vzdrževanje sistema zato na strežnike namestimo posebno programsko opremo - nadzornika navideznih strojev (angl. hypervisor). Danes so med najbolj uporabljanimi platformami za virtualizacijo VMware ESXi, Microsoft Hyper-V in KVM.

Nadzornik navideznih strojev upravlja z navideznimi stroji, ponuja jim abstrakcijo strojne opreme fizičnega računalnika tako, da se uporabniška programska oprema v navideznih strojih izvaja enako, kot bi se izvajala na fizičnem računalniku. Nadzornik navideznih strojev poskrbi, da so navidezni stroji med seboj izolirani. To doseže z učinkovitim upravljanjem strojne opreme, med drugim procesorjev, pomnilnika, datotečnega sistema, omrežij. V navidezne stroje zato najpogosteje namestimo celoten operacijski sistem z gonilniki, potrebnimi knjižnicami in uporabniško programsko opremo. Shemo sistema z navideznimi stroji prikazuje spodnja slika.

Navidezni stroji

Prednosti navideznih strojev

  • Navidezni stroj vključuje operacijski sistem z gonilniki, knjižnice, orodja in uporabniško programsko opremo v popolnoma izoliranem okolju, ki lahko teče na najrazličnejših računalniških sistemih. Ta operacijski sistem je lahko popolnoma drugačen od gostiteljevega (Linux na Windows in obratno).
  • Virtualizacija strojne opreme pripomore k večji robustnosti celotnega sistema; tudi če se nek navidezni stroj zaradi napake ustavi, se bodo ostali navidezni stroji lahko nemoteno izvajali naprej.
  • Skrbniki sistemov lahko navideznim strojem zelo natančno odmerjajo računalniške vire.

Slabosti navideznih strojev

  • V vsakem navideznem stroju teče svoj operacijski sistem, kar prinese precej režije in s tem nekoliko počasnejše delovanje sistema.
  • Čas zaganjanja in ustavljanja navideznega stroja ni zanemarljiv, saj se mora vsakič zagnati oziroma ustaviti tudi operacijski sistem.
  • Zaradi izolacije med fizičnim računalnikom in navideznim strojem lahko slednji kakšne posebne strojne opreme nima na voljo.

Vsebniki

Za superračunalniške gruče je bolj primerna virtualizacija z vsebniki12. Vsebniki ne vključujejo operacijskega sistema, zato so manjši in nadzornik lažje preklaplja med njimi. Jedro operacijskega sistema Linux dovoljuje izolacijo procesov od ostalega sistema. Že jedro operacijskega sistema poskrbi, da so vsebniki med seboj izolirani, vsakemu vsebniku pa omogoča dostop do skupnega operacijskega sistema in osnovnih knjižnic. V vsakem vsebniku tako ločeno namestimo samo potrebno uporabniško programsko opremo in dodatne knjižnice. Vsebnike uporabljamo z nadzornikom vsebnikov (angl. container engine). Virtualizacijo z vsebniki prikazuje spodnja slika.

Virtualizacija z vsebniki

Pomnilnik v operacijskem sistemu Linux je razdeljen na jedrni prostor (angl. kernel space) in uporabniški prostor (angl. user space). Jedro upravlja s strojno opremo in skrbi za osnovo delovanje sistema, med drugim tudi za upravljanje procesov v uporabniških prostorih. V uporabniškem prostoru tečejo servisi, knjižnice in aplikacije, ki smo jih zagnali uporabniki. Procesi v uporabniškem prostoru imajo omejen dostop do pomnilnika, medtem ko ima jedro dostop do celotnega pomnilnika.

Zaradi razlik v operacijskih sistemih se programska oprema, pripravljena za eno distribucijo operacijskega sistema Linux, velikokrat ne more izvajati na drugi distribuciji operacijskega sistemu. Na primer, mnogo programov, pripravljenih za Ubuntu, se ne more izvajati na distribuciji CentOS. Kljub razlikam pa lahko procesi v uporabniškem prostoru dostopajo do jedra preko standardnih sistemskih klicev. Programe v uporabniškem prostoru lahko torej uporabimo z različnimi jedri in distribucijami Linuxa, na primer CentOS, Debian, Fedora, Ubuntu. To pomeni, da vsebnik lahko zgradimo na operacijskem sistemu, ki nam najbolj ustreza, ogrodje za vsebnike pa bo poskrbelo, da se bodo aplikacije v vsebniku pravilno izvajale tudi na drugih operacijskih sistemih.

Prednosti vsebnikov

  • Manj režije med delovanjem, saj vsi vsebniki uporabljajo skupni operacijski sistem.
  • Krajši časi zagona in ustavljanja, saj vsebnik poskrbi samo za zaganjanje in ustavljanje uporabniške programske opreme.
  • Strojne opreme ni potrebno vnaprej razdeliti med vsebnike.
  • Celotno izvajalno okolje je zapakirano v sliko, shranjeno v eno datoteko.
  • Vsebniki so prenosljivi in zagotavljajo konsistentnost. Prenos iz razvojnega v produkcijsko okolje običajno poteka brez kakršnihkoli stranskih učinkov.
  • Primerni so za raztegljive (angl. scalable) aplikacije - raztegljivost enostavno zagotavljamo s hitrim dodajanjem novih slik.
  • Zagotavljajo ponovljivost izračunov.

Slabosti vsebnikov

  • Jedro operacijskega sistema si delita gostitelj in vsebnik, na gostitelju mora teči jedro, ki podpira delo z vsebniki. Obstaja manjša možnost za nezdružljivost vsebnika in operacijskega sistema gostitelja.
  • Napaka v vsebniku lahko za sabo potegne tudi nezanesljivo delovanje gostitelja.
  • Vsebnike lahko večinoma zaganjamo le na gostitelju z enakim tipom operacijskega sistema.

Zgodovinski razvoj vsebnikov

Operacijski sistemi so skozi čas dobivali vedno več funkcionalnosti, pomembnih za razvoj vsebnikov3:

  • 1979: V operacijski sistem Unix V7 dodajo koncept chroot (angl. change root), ki izbranim procesom navidezno spremeni osnovno mapo datotečnega sistema (angl. root directory).
  • 2000: V operacijskem sistemu FreeBSD koncept chroot nadgradijo v ječe (angl. jails), ki jim dodajo lastne mrežne vmesnike z lastnimi omrežnimi naslovi.
  • 2002: V operacijski sistemi Linux uvedejo imenske prostore (angl. namespaces), s katerimi lahko vire jedra operacijskega sistema (na primer oznake procesov, oznake uporabnikov, imena datotek, komunikacijski sklad) nadzorujejo in ustrezno izolirajo, na primer, da procesi v enem imenskem prostoru ne vidijo virov v drugem imenskem prostoru.
  • 2007: V jedro operacijskega sistema Linux dodajo koncept cgroups (angl. control groups), ki omogoča omejevanje, obračunavanje in izolacijo računalniških virov, na primer procesorja, pomnilnika, diska, omrežja. Koncept cgroups predstavlja enoten vmesnik za izolacijo procesov.
  • 2008: Predstavijo ogrodje LXC (LinuX Container) za delo z vsebniki, zasnovano na konceptih imenskih prostorov in cgroups, ki na gostiteljskem operacijskem sistemu omogoča vzpostavitev dodatnega, navideznega (angl. virtual) operacijskega sistema. Gre za prvo tovrstno orodje, ki dela s standardnim jedrom in je na voljo v mnogih distribucijah operacijskega sistema Linux.
  • 2013: Podjetje DotCloud predstavi ogrodje Docker, danes najpopularnejše ogrodje za delo z vsebniki. Določijo format za zapis receptov za gradnjo vsebnikov in format za zapis slik vsebnikov. Vzpostavijo tudi spletni portal, na katerega lahko vsak objavlja recepte. Tako danes lahko vsak zgradi vsebnik, ki ga lahko kdorkoli z nekaj enostavnimi ukazi zažene na svojem računalniku.
  • 2014: Pojavi se množica orodij, ki olajša upravljanje z vsebniki, eno najbolj znanih je Kubernetes.
  • 2016: Lawrence Berkley National Laboratory začne odprtokodni projekt Singularity, katerega cilj je razvoj ogrodja za delo z vsebniki, prilagojenega za superračunalniške sisteme.
  • 2018: Vsebniki se vedno bolj uveljavljajo, danes predstavljajo temeljna ogrodje za izvajanje sodobne programske opreme v obliki raztegljivih oblačnih mikrostoritev na eni strani in za izvajanje računsko intenzivnih znanstvenih aplikacij na drugi strani.
  • 2021: Projekt Singularity se loči na dve veji: vejo, ki se razvija pod okriljem podjetja Sylabs in vejo, ki gre pod okrilje Fundacije Linux in se preimenuje v Apptainer.

Vsebniki na superračunalnikih

Superračunalnik je sestavljen iz množice računskih vozlišč, vsako računsko vozlišče pa vključuje veliko procesorskih jeder, pomnilnika, grafičnih in drugih pospeševalnikov. Vozlišča so povezana v nizkolatenčna širokopasovna omrežja in imajo dostop do porazdeljenega datotečnega sistema. Gre za večuporabniški sistem, namenjen izvajanju obsežnih računskih nalog na več vozliščih hkrati. V superračunalniškem sistemu je nameščena vmesna programska oprema, na primer Slurm, preko katere uporabniki upravljamo s svojimi posli: pošiljamo jih v izvajanje, spremljamo njihovo izvajanje, zaključujemo in podobno. Uporabniki lahko delajo samo v svojem uporabniškem prostoru in nimajo skrbniških pravic.

Delo brez vsebnikov

Uporabniki superračunalnika za izvajanje nalog uporabljajo zelo različno programsko opremo. Da pri izvajanju programske opreme ne prihaja do težav z združljivostjo, na primer zaradi različnih verzij knjižnic, skrbniki ob nameščanju programske opreme pripravijo okoljske module. Okoljski moduli vsebujejo informacije, potrebne za nastavitev ukazne lupine za izbrano programsko opremo. Ko naložimo okoljski modul, spremenljivke okolja prilagodimo za izvajanje izbrane uporabniške programske opreme. Okoljske module lahko uporabnik naloži in odstrani med delom. Sprememba bo vidna tako na prijavnem kot tudi na računskih vozliščih.

Primer nastavitev ukazne lupine, ki se zgodi ob nalaganju modula, je prilagoditev okoljskih spremenljivk kot sta PATH in LD_LIBRARY_PATH, v katerih so navedene mape, kjer operacijski sistem išče programe oziroma knjižnice.

Delo z vsebniki

V superračunalniškem sistemu so vozlišča bolj tesno povezana kot recimo v oblaku in temu morajo biti prilagojena tudi ogrodja za delo z vsebniki. Vsebniki nam v superračunalniškem okolju močno olajšajo nameščanje programske opreme in zagotavljajo ponovljivost izračunov. Seveda pa morajo za učinkovito delo znati izkoriščati vso strojno opremo, na primer grafične procesne enote in druge pospeševalnike, porazdeljene datotečne sisteme in nizkolatenčna širokopasovna omrežja.

Prednosti vsebnikov v superračunalniškem okolju:

  • Vsebnike lahko pripravimo sami (v vsebnikih imamo pravico za nameščanje programske opreme).
  • Vsebniki nam ponujajo veliko možnosti prilagajanja operacijskega sistema, orodij in uporabniške programske opreme.
  • Vsebniki nam zagotavljajo ponovljivost izvajanja poslov (enaki rezultati po nadgradnji operacijskega sistema).

Vsebniki ne rešijo vseh problemov:

  • Težave imamo lahko z nezdružljivostjo strojne opreme in jedra operacijskega sistema.
  • Nezdružljivost knjižnic na operacijskem sistemu gostitelja in v vsebniku, na primer pri MPI.
  • Ponujajo omejene možnosti za interaktivno delo, še posebej če uporabljamo grafični uporabniški vmesnik.

Uporabniki vsebnike običajno pripravljamo na osebnem računalniku in jih nato prenesemo v porazdeljeni datotečni sistem superračunalnika neposredno ali preko javnega repozitorija. Posel, ki vključuje vsebnik, pripravimo na enak način kot pri uporabi okoljskih modulov. Nato pa razvrščevalnik poslov na superračunalniku poslu dodeli računske vire in aplikacijo v vsebniku izvede na njih.


  1. Sylabs, Singularity User Guide, 2021. 

  2. A. Kashev, Working with Containers, ISPDC 2018 Tutorial, University of Bern 2018. 

  3. R. Osnat, A Brief History of Containers: From the 1970s Till Now, Blog, 2020.