Išsami „Docker“ eko­sis­te­ma suteikia prog­ra­muo­to­jams daugybę galimybių diegti programas, valdyti kon­t­ei­ne­rius ir ne tik. Aptarsime svar­biau­sius „Docker“ įrankius ir pa­teik­si­me apžvalgą po­pu­lia­riau­sių trečiųjų šalių projektų, kuriuose kuriamos atvirojo kodo „Docker“ priemonės.

Kokie yra pag­rin­di­niai „Docker“ įrankiai ir kom­po­nen­tai?

Šiandien „Docker“ yra kur kas daugiau nei tik sudėtinga prog­ra­mi­nės įrangos kon­t­ei­ne­rių valdymo platforma. Kūrėjai sukūrė įvairių „Docker“ įrankių, kad programų diegimas pa­si­tel­kiant pa­skirs­ty­tą­ją inf­rastruk­tū­rą ir debesų aplinką taptų leng­ves­nis, grei­tes­nis ir lanks­tes­nis. Be klas­te­ri­za­vi­mo ir ko­or­di­na­vi­mo įrankių, yra ir centrinė programų par­duo­tu­vė bei įrankis debesų iš­tek­liams valdyti.

„Docker“ variklis

Kai prog­ra­muo­to­jai sako „Docker“, jie paprastai turi omenyje atvirojo kodo klientas-serveris programą, kurisudaro kon­t­ei­ne­rių plat­for­mos pagrindą. Ši programa vadinama „Docker Engine“. Pag­rin­di­niai „Docker Engine“ kom­po­nen­tai yra „Docker“ demonas, REST API ir CLI (ko­man­di­nės eilutės sąsaja), kuri atlieka vartotojo sąsajos funkciją.

Naudodami šią sistemą, galite bendrauti su „Docker Engine“ per ko­man­di­nės eilutės komandas ir patogiai valdyti „Docker“ atvaizdus, „Docker“ failus bei „Docker“ kon­t­ei­ne­rius iš terminalo.

Image: Schematic representation of the Docker engine
The main com­po­nents of the Docker engine: the Docker daemon, REST API and Docker CLI

Išsamų „Docker Engine“ aprašymą rasite mūsų „Docker“ pa­mo­kė­lė­je pra­de­dan­tie­siems „Docker“ pamokėlė: įdiegimas ir pirmieji žingsniai.

„Docker Hub“

„Docker Hub“ var­to­to­jams siūlo debesų tech­no­lo­gi­jo­mis pagrįstą registrą, kuris leidžia at­si­siųs­ti „Docker“ vaizdus, juos cent­ra­li­zuo­tai valdyti ir dalytis su kitais „Docker“ var­to­to­jais. Re­gist­ruo­ti var­to­to­jai gali saugoti „Docker“ vaizdus viešose arba pri­va­čio­se sau­gyk­lo­se. Norint at­si­siųs­ti viešą vaizdą (pagal „Docker“ ter­mi­no­lo­gi­ją vadinamą „pulling“ ), vartotojo paskyros nereikia. In­te­gruo­ta žymių sistema leidžia tvarkyti vaizdų versijas.

Be kitų „Docker“ naudotojų viešųjų saugyklų, ofi­cia­lio­se „Docker Hub“ sau­gyk­lo­se galima rasti ir daugybę išteklių, kuriuos pateikia „Docker“ kūrėjų komanda bei žinomi atvirojo kodo projektai. Tarp po­pu­lia­riau­sių „Docker“ vaizdų yra „NGINX“ ži­nia­tink­lio serveris, atminties duomenų bazė „Redis“, „Unix“ įrankių rinkinys „BusyBox“ ir „Ubuntu“ Linux dist­ri­bu­ci­ja.

Image: Official repositories in the Docker node
You can find more than 100,000 free images in the official Docker rep­o­si­tories.

Or­ga­ni­za­ci­jos yra dar viena svarbi „Docker Hub“ funkcija, lei­džian­ti „Docker“ var­to­to­jams kurti privačius rep­o­zi­to­ri­jus, pri­ei­na­mus tik pa­si­rink­tam žmonių ratui. Prieigos teisės or­ga­ni­za­ci­jo­je valdomos naudojant komandas ir narystę grupėse.

„Docker Swarm“

„Docker Engine“ turi in­te­gruo­tą funkciją, lei­džian­čią var­to­to­jams valdyti „Docker“ šei­mi­nin­kus klas­te­riuo­se, va­di­na­muo­se „swarms“. Į „Docker Engine“ in­te­gruo­tos klasterių valdymo ir ko­or­di­na­vi­mo funkcijos yra pagrįstos „Swarmkit“ įrankių rinkiniu. Jei naudojate senesnę kon­t­ei­ne­rių plat­for­mos versiją, „Docker“ įrankis yra pri­ei­na­mas kaip atskira programa.

„Swarm“ – tai in­te­gruo­ta „Docker“ klas­te­ri­za­vi­mo priemonė, kuri sujungia „Docker“ įrenginių grupę į vieną virtualų įrenginį ir teikia „Docker“ REST API paslaugas. Bet kuri su „Docker“ demonu susieta „Docker“ priemonė gali pri­si­jung­ti prie „Swarm“ ir išplėsti savo veiklą bet kokiam „Docker“ įrenginių skaičiui. Nau­do­da­mie­si „Docker Engine“ ko­man­di­nės eilutės sąsaja, var­to­to­jai gali kurti „Swarm“ klas­te­rius, pa­skirs­ty­ti programas klas­te­ry­je ir valdyti klasterio veikimą be pa­pil­do­mos ko­or­di­na­vi­mo prog­ra­mi­nės įrangos.

Į klas­te­rius sujungti „Docker“ varikliai veikia „Swarm“ režimu. Pa­si­rin­ki­te šią parinktį, jei norite sukurti naują klasterį arba pridėti „Docker“ kom­piu­te­rį prie esamo „Swarm“ klasterio. Atskiri „Docker“ kom­piu­te­riai klas­te­ry­je vadinami „mazgais“. Klasterio mazgai gali veikti kaip virtualūs kom­piu­te­riai toje pačioje vietinėje sistemoje, tačiau dažniau nau­do­ja­mas debesų kom­piu­te­ri­jos modelis, kai atskiri „Docker Swarm“ mazgai yra pa­skirs­ty­ti skir­tin­go­se sistemose ir inf­rastruk­tū­ro­se.

Prog­ra­mi­nė įranga pagrįsta „master-worker“ ar­chi­tek­tū­ra. Kai užduotis reikia pa­skirs­ty­ti „Swarm“ sistemoje, var­to­to­jai perduoda paslaugą valdymo mazgui. Valdymo mazgas tada yra at­sa­kin­gas už kon­t­ei­ne­rių planavimą klas­te­ry­je ir veikia kaip pag­rin­di­nė vartotojo sąsaja, skirta prieigai prie „Swarm“ išteklių.

Valdymo mazgas siunčia atskirus elementus, vadinamus už­duo­ti­mis, į darbo mazgus.

  • Paslaugos: paslaugos yra pag­rin­di­nės „Docker“ klasterių struk­tū­ros. Paslauga apibrėžia užduotį, kuri turi būti įvykdyta „Docker“ klas­te­ry­je. Paslauga apima kon­t­ei­ne­rių, sukurtų remiantis tuo pačiu atvaizdu, grupę. Kurdamas paslaugą, var­to­to­jas nurodo, koks atvaizdas ir kokios komandos bus nau­do­ja­mos. Be to, paslaugos suteikia galimybę mas­te­lin­ti programas. „Docker“ plat­for­mos var­to­to­jai tiesiog nurodo, kiek kon­t­ei­ne­rių turi būti paleista paslaugai.
  • Užduotys: siekiant pa­skirs­ty­ti paslaugas klas­te­ry­je, valdytojo mazgas jas suskirsto į atskiras darbo vienetus (užduotis). Kiekviena užduotis apima „Docker“ kon­t­ei­ne­rį bei jame vykdomas komandas.

Be klasterių valdymo ir kon­t­ei­ne­rių ko­or­di­na­vi­mo, pagal nu­ma­ty­tuo­sius nu­sta­ty­mus valdytojų mazgai taip pat gali atlikti dar­bi­nin­kų mazgų funkcijas – nebent šių mazgų užduotis griežtai ap­ri­bo­tu­mė­te tik valdymo funk­ci­jo­mis.

Kiek­vie­na­me darbo mazge veikia agento programa. Ji priima užduotis ir ati­tin­ka­mam pag­rin­di­niam mazgui teikia ata­skai­tas apie perduotos užduoties vykdymo eigą. Toliau pa­teik­ta­me pa­veiks­lė­ly­je pateiktas „Docker Swarm“ sche­ma­tiš­kas vaizdas:

Image: Schematic representation of a Docker Swarm
The manager-worker ar­chi­tec­tu­re of a Docker Swarm

Diegdami „Docker Swarm“, var­to­to­jai paprastai naudoja „Docker“ kom­piu­te­rį.

„Docker Compose“

„Docker Compose“ leidžia sujungti kelis kon­t­ei­ne­rius ir juos paleisti vienu ko­man­do­mis. Pag­rin­di­nis „Compose“ elementas yra centrinis valdymo failas, sukurtas remiantis ap­do­va­no­ji­mus pelniusia YAML kalba. Šio „Compose“ failo sintaksė yra panaši į atvirojo kodo prog­ra­mi­nės įrangos „Vagrant“ sintaksę, kuri naudojama kuriant ir kon­fi­gū­ruo­jant vir­tu­alias mašinas.

Failo „docker-compose.yml“ galite apibrėžti bet kokį skaičių prog­ra­mi­nės įrangos kon­t­ei­ne­rių, įskaitant visas pri­klau­so­my­bes, taip pat jų tar­pu­sa­vio ryšius. Tokios iš kelių kon­t­ei­ne­rių sudarytos programos valdomos pagal tą patį modelį kaip ir atskiri prog­ra­mi­nės įrangos kon­t­ei­ne­riai. Naudokite komandą„docker-compose“** kartu su norima pakomanda, kad val­dy­tu­mė­te visą programos gyvavimo ciklą.

Šią „Docker“ priemonę galima lengvai in­te­gruo­ti į „Swarm“ pagrįstą klasterį. Tokiu būdu „Compose“ sukurtas dau­gia­kon­t­ei­ne­ri­nes programas galėsite paleisti pa­skirs­ty­to­se sistemose taip pat lengvai, kaip ir viename „Docker“ serveryje.

Dar viena „Docker Compose“ funkcija – in­te­gruo­tas mastelio keitimo me­cha­niz­mas. Nau­do­da­mie­si šiuo ko­or­di­na­vi­mo įrankiu, galite patogiai pa­si­nau­do­ti ko­man­di­nės eilutės programa ir nustatyti, kiek kon­t­ei­ne­rių norite paleisti konk­re­čiai paslaugai.

Kokios yra trečiųjų šalių „Docker“ priemonės?

Be „Docker Inc.“ vidinių kūrinių, yra įvairių išorinių tiekėjų prog­ra­mi­nės įrangos priemonių ir platformų, kurios teikia sąsajas su „Docker Engine“ arba buvo spe­cia­liai sukurtos šiai po­pu­lia­riam kon­t­ei­ne­rių plat­for­mai. „Docker“ eko­sis­te­mo­je po­pu­lia­riau­si atvirojo kodo projektai yra or­kest­ra­vi­mo įrankis „Ku­ber­ne­tes“, klasterių valdymo įrankis „Shipyard“, dau­gia­kon­t­ei­ne­rių siuntimo spren­di­mas „Panamax“, nuo­la­ti­nės in­te­g­ra­ci­jos platforma „Drone“, debesų pagrindu veikianti operacinė sistema „OpenStack“ ir duomenų centrų operacinė sistema „D2iQ DC/OS“, pagrįsta klasterių valdytoju „Mesos“.

Ku­ber­ne­tes

„Docker“ ne visada gali pasiūlyti savo pačios or­kest­ra­vi­mo įrankius, pa­vyz­džiui, „Swarm“ ir „Compose“. Dėl šios prie­žas­ties įvairios įmonės jau daugelį metų in­ves­tuo­ja į savo pačių plėtros darbus, siekdamos sukurti spe­cia­liai pri­tai­ky­tus įrankius, skirtus pa­leng­vin­ti kon­t­ei­ne­rių plat­for­mos veikimą didelėse, pa­skirs­ty­to­se inf­rastruk­tū­ro­se. Vienas iš po­pu­lia­riau­sių tokio tipo sprendimų yra atvirojo kodo projektas „Ku­ber­ne­tes“.

„Ku­ber­ne­tes“ – tai kon­t­ei­ne­rių pagrindu vei­kian­čių programų klasterių valdymo sistema. „Ku­ber­ne­tes“ tikslas – au­to­ma­ti­zuo­ti programų veikimą klas­te­ry­je. Šiam tikslui pasiekti šis ko­or­di­na­vi­mo įrankis naudoja REST API, ko­man­di­nės eilutės programą ir grafinę ži­nia­tink­lio sąsają kaip valdymo sąsajas. Nau­do­jan­tis šiomis sąsajomis galima ini­ci­juo­ti au­to­ma­ti­zuo­tą veiklą ir užklausti būsenos ata­skai­tas. „Ku­ber­ne­tes“ galite naudoti:

  • vykdyti kon­t­ei­ne­rių pagrindu vei­kian­čias programas klas­te­ry­je,
  • įdiegti ir valdyti programas pa­skirs­ty­to­se sistemose,
  • mas­te­lin­ti programas ir
  • kuo geriau išnaudoti aparatinę įrangą.

Šiuo tikslu „Ku­ber­ne­tes“ sujungia kon­t­ei­ne­rius į logines dalis, vadinamas „podais“. „Podai“ yra klasterio valdytojo pag­rin­di­niai vienetai, kuriuos galima pa­skirs­ty­ti klas­te­ry­je naudojant planavimą.

Kaip ir „Docker Swarm“, „Ku­ber­ne­tes“ taip pat grin­džia­mas „master-worker“ ar­chi­tek­tū­ra. Klasterį sudaro „Ku­ber­ne­tes“ pag­rin­di­nis kom­piu­te­ris ir įvairūs pa­gal­bi­niai kom­piu­te­riai, kurie taip pat vadinami „Ku­ber­ne­tes“ mazgais (arba „minionais“). „Ku­ber­ne­tes“ pag­rin­di­nis kom­piu­te­ris veikia kaip centrinė klasterio valdymo plokštė ir susideda iš keturių pag­rin­di­nių kom­po­nen­tų, lei­džian­čių tie­sio­giai bendrauti klas­te­ry­je ir pa­skirs­ty­ti užduotis. „Ku­ber­ne­tes“ pag­rin­di­nį kom­piu­te­rį sudaro API serveris, kon­fi­gū­ra­ci­jos atmintis „etcd“, tvar­ka­raš­čio su­da­ry­to­jas ir valdiklio tvarkyklė.

  • API serveris: visos au­to­ma­ti­zuo­tos ope­ra­ci­jos „Ku­ber­ne­tes“ klas­te­ry­je pra­de­da­mos naudojant REST-API per API serverį. Jis veikia kaip centrinė klasterio ad­mi­nist­ra­vi­mo sąsaja.
  • etcd: atvirojo kodo kon­fi­gū­ra­ci­jos atmintį etcd galima laikyti „Ku­ber­ne­tes“ klasterio atmintimi. „Key Value Store“, kurią „CoreOS“ sukūrė spe­cia­liai pa­skirs­ty­toms sistemoms, saugo kon­fi­gū­ra­ci­jos duomenis ir juos pateikia kiek­vie­nam klasterio mazgui. Klasterio dabartinę būseną galima valdyti bet kuriuo metu per etcd.
  • Planavimo programa: planavimo programa yra atsakinga už kon­t­ei­ne­rių grupių (podų) pa­skirs­ty­mą klas­te­ry­je. Ji nustato podo išteklių poreikius ir tada juos suderina su atskirų klasterio mazgų turimais iš­tek­liais.
  • Valdytojo tvarkyklė: valdytojo tvarkyklė yra „Ku­ber­ne­tes“ pag­rin­di­nio serverio paslauga, kuri kont­ro­liuo­ja ko­or­di­na­vi­mą, re­gu­liuo­da­ma klasterio būseną ir atlikdama įprastas užduotis. Pag­rin­di­nė valdytojo tvar­kyk­lės užduotis yra už­tik­rin­ti, kad klasterio būsena atitiktų nustatytą tikslą.

Visi „Ku­ber­ne­tes“ pag­rin­di­nio serverio kom­po­nen­tai gali būti įdiegti tame pačiame serveryje arba pa­skirs­ty­ti keliuose pag­rin­di­niuo­se ser­ve­riuo­se, su­da­ran­čiuo­se didelio pa­ti­ki­mu­mo klasterį.

Nors „Ku­ber­ne­tes“ pag­rin­di­nis serveris yra at­sa­kin­gas už ko­or­di­na­vi­mą, klas­te­ry­je pa­skirs­ty­ti podai veikia kom­piu­te­riuo­se – „Ku­ber­ne­tes“ mazguose, kurie yra pavaldūs pag­rin­di­niam serveriui. Tam kiek­vie­na­me „Ku­ber­ne­tes“ mazge turi veikti kon­t­ei­ne­rių variklis. Nors „Docker“ yra de facto stan­dar­tas, „Ku­ber­ne­tes“ nebūtinai turi naudoti konkretų kon­t­ei­ne­rių variklį.

Be kon­t­ei­ne­rių variklio, „Ku­ber­ne­tes“ mazgai apima šiuos kom­po­nen­tus:

  • kubelet: kubelet yra agentas, vei­kian­tis kiek­vie­na­me „Ku­ber­ne­tes“ mazge ir nau­do­ja­mas mazgui valdyti bei ad­mi­nist­ruo­ti. Kaip pag­rin­di­nis kiekvieno mazgo ryšio taškas, kubelet yra pri­jung­tas prie „Ku­ber­ne­tes“ pag­rin­di­nio serverio ir užtikrina, kad in­for­ma­ci­ja būtų per­duo­da­ma į valdymo lygmenį bei gaunama iš jo.
  • kube-proxy: be to, kiek­vie­na­me „Ku­ber­ne­tes“ mazge veikia tarpinio serverio paslauga kube-proxy. Ji užtikrina, kad užklausos iš išorės būtų per­siun­čia­mos į ati­tin­ka­mus kon­t­ei­ne­rius, ir teikia paslaugas kon­t­ei­ne­rių pagrindu vei­kian­čių programų nau­do­to­jams. Kube-proxy taip pat siūlo ele­men­ta­rią apkrovos ba­lan­sa­vi­mo funkciją.

Toliau pa­teik­ta­me pa­veiks­lė­ly­je pateiktas pag­rin­di­nio mazgo ar­chi­tek­tū­ros, kuria grin­džia­ma ko­or­di­na­vi­mo platforma „Ku­ber­ne­tes“, sche­ma­tiš­kas vaizdas:

Image: Schematic representation of the Kubernetes architecture
The master-node ar­chi­tec­tu­re of the or­chest­ra­tion platform Ku­ber­ne­tes

Be pag­rin­di­nio „Ku­ber­ne­tes“ projekto, yra ir daugybė įrankių bei plėtinių, lei­džian­čių išplėsti šios or­kest­ra­vi­mo plat­for­mos funk­cio­na­lu­mą. Po­pu­lia­riau­si iš jų – stebėjimo ir gedimų dia­g­nos­ti­kos įrankiai „Pro­met­he­us“, „Weave Scope“ ir „sysdig“, taip pat paketų tvarkyklė „Helm“. Taip pat yra įskiepiai, skirti „Apache Maven“ ir „Gradle“, bei „Java“ API, lei­džian­ti nuo­to­li­niu būdu valdyti „Ku­ber­ne­tes“.

Laivų statykla

„Shipyard“ – tai bend­ruo­me­nės sukurta valdymo sistema, pagrįsta „Swarm“ tech­no­lo­gi­ja, lei­džian­ti var­to­to­jams valdyti „Docker“ išteklius, pa­vyz­džiui, kon­t­ei­ne­rius, atvaizdus, serverius ir privačius registrus, nau­do­da­mie­si grafinė vartotojo sąsaja. Ji prieinama kaip in­ter­ne­ti­nė programa per naršyklę. Be klasterių valdymo funkcijų, prieinamų per centrinę in­ter­ne­ti­nę sąsają, „Shipyard“ taip pat siūlo vartotojų au­ten­ti­fi­ka­vi­mą ir prieigos kontrolę pagal vaidmenis.

Prog­ra­mi­nė įranga yra 100 % su­de­ri­na­ma su „Docker“ nuo­to­li­nio valdymo API ir naudoja atvirojo kodo NoSQL duomenų bazę „RethinkDB“ vartotojų paskyrų, adresų ir įvykių duomenims saugoti. Prog­ra­mi­nė įranga pagrįsta klasterių valdymo įrankių rinkiniu „Citadel“ ir susideda iš trijų pag­rin­di­nių kom­po­nen­tų: valdiklio, API ir vartotojo sąsajos.

  • „Shipyard“ valdiklis: valdiklis yra valdymo įrankio „Shipyard“ pag­rin­di­nis kom­po­nen­tas. „Shipyard“ valdiklis są­vei­kau­ja su „RethinkDB“, kad saugotų duomenis, ir leidžia kreiptis į atskirus „Docker“ klasterio kom­piu­te­rius bei valdyti įvykius.
  • „Shipyard“ API: „Shipyard“ API yra pagrįsta REST. Visos valdymo įrankio funkcijos yra valdomos per „Shipyard“ API.
  • „Shipyard“ vartotojo sąsaja (UI): „Shipyard“ UI yra „AngularJS“ programa, kuri var­to­to­jams pateikia grafinę vartotojo sąsają „Docker“ klasterių valdymui interneto nar­šyk­lė­je. Visi veiksmai vartotojo sąsajoje vyksta per „Shipyard“ API.

Daugiau in­for­ma­ci­jos apie šį atvirojo kodo projektą rasite ofi­cia­lio­je „Shipyard“ sve­tai­nė­je.

„Panamax“

Atvirojo kodo prog­ra­mi­nės įrangos projekto „Panamax“ kūrėjai siekia su­pa­pras­tin­ti dau­gia­kon­t­ei­ne­rių programų diegimą. Šis nemokamas įrankis var­to­to­jams siūlo grafinę vartotojo sąsają, lei­džian­čią patogiai kurti, diegti ir platinti su­dė­tin­gas programas, pagrįstas „Docker“ kon­t­ei­ne­rių tech­no­lo­gi­ja, naudojant „drag-and-drop“ funkciją.

„Panamax“ leidžia su­dė­tin­gas dau­gia­kon­t­ei­ne­ri­nes programas išsaugoti kaip programų šablonus ir vienu pa­spau­di­mu jas platinti klas­te­ri­nė­se ar­chi­tek­tū­ro­se. Nau­do­jan­tis in­te­gruo­ta programų par­duo­tu­ve, vei­kian­čia „GitHub“ plat­for­mo­je, pačių sukurtų programų šablonus galima saugoti „Git“ sau­gyk­lo­se ir padaryti juos pri­ei­na­mus kitiems var­to­to­jams.

Pag­rin­di­nius „Panamax“ ar­chi­tek­tū­ros kom­po­nen­tus galima su­skirs­ty­ti į dvi grupes: „Panamax Local Client“ ir bet kokį skaičių nuo­to­li­nių diegimo tikslų.

„Panamax“ vietinis klientas yra pag­rin­di­nis šio „Docker“ įrankio kom­po­nen­tas. Jis veikia vietinėje sistemoje ir leidžia kurti su­dė­tin­gas kon­t­ei­ne­rių pagrindu vei­kian­čias programas. Vietinis klientas susideda iš šių kom­po­nen­tų:

  • CoreOS: norint įdiegti „Panamax“ vietinį klientą, kaip pag­rin­di­nė sistema rei­ka­lin­ga „Linux“ dist­ri­bu­ci­ja „CoreOS“, kuri buvo spe­cia­liai sukurta prog­ra­mi­nės įrangos kon­t­ei­ne­riams. „Panamax“ klientas „CoreOS“ sistemoje pa­lei­džia­mas kaip „Docker“ kon­t­ei­ne­ris. Be „Docker“ funkcijų, var­to­to­jai gali naudotis įvai­rio­mis „CoreOS“ funk­ci­jo­mis. Tarp jų yra, be kita ko, „Fleet“ ir „Jour­nalctl“:
  • „Fleet“: vietoj tie­sio­gi­nės in­te­g­ra­ci­jos su „Docker“, „Panamax“ klientas naudoja klasterių valdytoją „Fleet“, kad ko­or­di­nuo­tų savo kon­t­ei­ne­rius. „Fleet“ yra klasterių val­dy­to­jas, kuris kont­ro­liuo­ja „Linux“ demoną „systemd“ kom­piu­te­rių klas­te­riuo­se.
  • „Jour­nalctl“: „Panamax“ klientas naudoja „Jour­nalctl“, kad iš žurnalo paprašytų „Linux“ sistemos tvar­kyk­lės „systemd“ žurnalo pranešimų.
  • Vietinio kliento diegimo programa: vietinio kliento diegimo programa apima visus kom­po­nen­tus, rei­ka­lin­gus „Panamax“ kliento įdiegimui vietinėje sistemoje.
  • „Panamax“ vietinis agentas: pag­rin­di­nis vietinio kliento kom­po­nen­tas yra vietinis agentas. Jis yra susietas su įvairiais kitais kom­po­nen­tais ir pri­klau­so­my­bė­mis per „Panamax“ API. Tai apima vietinį „Docker“ šei­mi­nin­ką, „Panamax“ vartotojo sąsają, išorinius registrus ir klasterio diegimo tikslų nuo­to­li­nius agentus. Vietinis agentas są­vei­kau­ja su šiomis programų sąsajomis vietinėje sistemoje per „Panamax“ API, kad keistųsi in­for­ma­ci­ja apie vei­kian­čias programas:
  • „Docker“ nuo­to­li­nis API: „Panamax“ ieško vaizdų vietinėje sistemoje per „Docker“ nuotolinį API ir gauna in­for­ma­ci­ją apie vei­kian­čius kon­t­ei­ne­rius.
  • etcd API: failai per­duo­da­mi į CoreOS Fleet demoną per etcd API.
  • systemd-journal-gatewayd.services: „Panamax“ gauna vei­kian­čių paslaugų žurnalo išvestį per „systemd-journal-gatewayd.services“.

Be to, „Panamax API“ taip pat leidžia są­vei­kau­ti su įvairiais iš­ori­niais API.

  • „Docker“ re­gist­ra­vi­mo API: „Panamax“ gauna atvaizdų žymes iš „Docker“ registro nau­do­da­mas „Docker“ re­gist­ra­vi­mo API.
  • „GitHub“ API: „Panamax“ įkelia šablonus iš „GitHub“ saugyklos nau­do­da­mas „GitHub“ API.
  • „Kiss­Met­rics“ API: „Kiss­Met­rics“ API renka duomenis apie šablonus, kuriuos naudoja var­to­to­jai.
  • „Panamax“ vartotojo sąsaja: „Panamax“ vartotojo sąsaja veikia kaip vartotojo sąsaja vietinėje sistemoje ir leidžia var­to­to­jams valdyti „Docker“ įrankį per grafinę sąsają. Vartotojo įvestys tie­sio­giai per­duo­da­mos vietiniam agentui per „Panamax“ API. „Panamax“ vartotojo sąsaja pagrįsta „CTL Base UI Kit“ – „Cen­tu­ry­Link“ bi­b­lio­te­ka, skirta in­ter­ne­ti­nių projektų vartotojo sąsajos kom­po­nen­tams.

„Panamax“ ter­mi­no­lo­gi­jo­je kiek­vie­nas „Docker“ klasterio mazgas, ne­vyk­dan­tis valdymo užduočių, vadinamas nuo­to­li­niu diegimo tašku. Diegimo taškus sudaro „Docker“ šei­mi­nin­kas, kuris yra su­kon­fi­gū­ruo­tas diegti „Panamax“ šablonus naudojant šiuos kom­po­nen­tus:

  • Diegimo tikslo diegimo programa: diegimo tikslo diegimo programa paleidžia „Docker“ šei­mi­nin­ką, kuriame jau įdiegtas „Panamax“ nuo­to­li­nis agentas ir or­kest­ra­vi­mo adapteris.
  • „Panamax“ nuo­to­li­nis agentas: jei įdiegtas „Panamax“ nuo­to­li­nis agentas, programos gali būti pla­ti­na­mos per vietinį „Panamax“ klientą į bet kurį pa­gei­dau­ja­mą klasterio galinį tašką. „Panamax“ nuo­to­li­nis agentas veikia kaip „Docker“ kon­t­ei­ne­ris kiek­vie­na­me klasterio diegimo tiksle.
  • „Panamax“ ko­or­di­na­vi­mo adapteris: ko­or­di­na­vi­mo adap­te­ry­je programos logika pa­tei­kia­ma kiek­vie­nam „Panamax“ pri­ei­na­mam ko­or­di­na­vi­mo įrankiui ne­pri­klau­so­ma­me adapterio sluoks­ny­je. Dėl to var­to­to­jai visada gali pa­si­rink­ti tikslią ko­or­di­na­vi­mo tech­no­lo­gi­ją, kurią palaiko jų tikslinė aplinka. Iš anksto su­kon­fi­gū­ruo­ti adap­te­riai apima „Ku­ber­ne­tes“ ir „Fleet“:
  • „Panamax“ „Ku­ber­ne­tes“ adapteris: kartu su „Panamax“ nuo­to­li­nio agento pagalba „Panamax“ „Ku­ber­ne­tes“ adapteris leidžia platinti „Panamax“ šablonus „Ku­ber­ne­tes“ klas­te­riuo­se.
  • „Panamax Fleet“ adapteris: kartu su „Panamax“ nuo­to­li­nio valdymo agentu „Panamax Fleet“ adapteris leidžia platinti „Panamax“ šablonus klas­te­riuo­se, val­do­muo­se naudojant „Fleet“ klasterių tvarkyklę.

Šiame pa­veiks­lė­ly­je pa­vaiz­duo­ta atskirų „Panamax“ kom­po­nen­tų sąveika „Docker“ klas­te­ry­je:

Image: Schematic representation of the software architecture for the Panamax container management tool
The software ar­chi­tec­tu­re of the Panamax container ma­na­ge­ment tool

„CoreOS“ pagrindu sukurta kon­t­ei­ne­rių valdymo priemonė „Panamax“ var­to­to­jams per grafinę vartotojo sąsają siūlo įvairias stan­dar­ti­nes kon­t­ei­ne­rių ko­or­di­na­vi­mo tech­no­lo­gi­jas, taip pat galimybę patogiai valdyti su­dė­tin­gas daugelio kon­t­ei­ne­rių programas klasterio ar­chi­tek­tū­ro­se naudojant bet kurią sistemą (pa­vyz­džiui, savo ne­šio­ja­mą­jį kom­piu­te­rį).

Nau­do­da­mie­si „Panamax“ viešąja šablonų saugykla, „Panamax“ var­to­to­jai per „GitHub“ turi prieigą prie viešos šablonų bi­b­lio­te­kos, kurioje yra įvairių išteklių.

Dronas

„Drone“ – tai paprasta nuo­la­ti­nės in­te­g­ra­ci­jos platforma, kuriai keliami minimalūs rei­ka­la­vi­mai. Naudodami šį „Docker“ įrankį, galite au­to­ma­tiš­kai įkelti naujausią savo versiją iš „Git“ saugyklos, pa­vyz­džiui, „GitHub“, ir ją išbandyti izo­liuo­tuo­se „Docker“ kon­t­ei­ne­riuo­se. Galite paleisti bet kokį testų rinkinį ir siųsti ata­skai­tas bei pra­ne­ši­mus apie būseną el. paštu. Kiek­vie­nam prog­ra­mi­nės įrangos testui sukuriama nauja kon­t­ei­ne­ris, pagrįstas vaizdais iš viešojo „Docker“ registro. Tai reiškia, kad bet kuris viešai pri­ei­na­mas „Docker“ vaizdas gali būti nau­do­ja­mas kaip aplinka kodui testuoti.

„Drone“ yra in­te­gruo­ta į „Docker“ ir su­de­ri­na­ma su įvai­rio­mis prog­ra­ma­vi­mo kalbomis, pa­vyz­džiui, PHP, Node.js, Ruby, Go ir Python. Vie­nin­te­lis tikrasis rei­ka­la­vi­mas yra kon­t­ei­ne­rių platforma. Naudodami „Drone“, galite sukurti savo asmeninę nuo­la­ti­nės in­te­g­ra­ci­jos platformą bet kurioje sistemoje, kurioje galima įdiegti „Docker“. „Drone“ palaiko įvairius versijų valdymo saugyklas, o stan­dar­ti­nio įdiegimo su „GitHub“ in­te­g­ra­ci­ja vadovą rasite atvirojo kodo projekto sve­tai­nė­je adresu readme.drone.io.

Nuo­la­ti­nės in­te­g­ra­ci­jos platforma valdoma per ži­nia­tink­lio sąsają. Čia galima įkelti prog­ra­mi­nės įrangos versijas iš bet kurio „Git“ saugyklos, sujungti jas į programas ir paleisti rezultatą iš anksto nu­sta­ty­to­je testavimo aplinkoje. Tam sukuriama .drone.yml failas, kuriame nurodoma, kaip kurti ir paleisti programą kiek­vie­nam prog­ra­mi­nės įrangos testui.

Dronų nau­do­to­jams siūlomas atvirojo kodo CI spren­di­mas, kuris sujungia tokių al­ter­na­ty­vių produktų kaip „Travis“ ir „Jenkins“ pri­va­lu­mus į vieną patogią naudoti programą.

OpenStack

Kalbant apie atvirojo kodo debesų inf­rastruk­tū­rų kūrimą ir valdymą, atvirojo kodo debesų operacinė sistema „OpenStack“ yra ge­riau­sias prog­ra­mi­nės įrangos spren­di­mas.

Naudodami „OpenStack“ galite valdyti kom­piu­te­ri­nius, saugojimo ir tinklo išteklius iš centrinės valdymo konsolės ir suteikti galimybę ga­lu­ti­niams var­to­to­jams jais naudotis per ži­nia­tink­lio sąsają.

Debesų operacinė sistema pagrįsta modulinės ar­chi­tek­tū­ros principu, kurią sudaro keli kom­po­nen­tai:

  • „Zun“ (kon­t­ei­ne­rių paslauga): „Zun“ yra „OpenStack“ kon­t­ei­ne­rių paslauga, lei­džian­ti lengvai diegti ir valdyti kon­t­ei­ne­riuo­se esančias programas „OpenStack“ debesyje. „Zun“ tikslas – leisti var­to­to­jams valdyti kon­t­ei­ne­rius per REST API, ne­rei­ka­lau­jant valdyti serverių ar klasterių. Norint naudoti „Zun“, reikės trijų kitų „OpenStack“ paslaugų: „Keystone“, „Neutron“ ir „kryr-li­bne­twork“. „Zun“ funk­cio­na­lu­mą taip pat galima išplėsti naudojant pa­pil­do­mas „OpenStack“ paslaugas, pvz., „Cinder“ ir „Glance“.
  • Neutron (tinklo kom­po­nen­tas): Neutron (anksčiau vadintas Quantum) yra per­ke­lia­mas, mastelio keitimą pa­lai­kan­tis API pa­lai­ko­mas sistemos kom­po­nen­tas, nau­do­ja­mas tinklo valdymui. Modulis suteikia sąsają su­dė­tin­goms tinklo to­po­lo­gi­joms ir palaiko įvairius pa­pil­di­nius, per kuriuos galima in­te­gruo­ti iš­plės­ti­nes tinklo funkcijas.
  • kuryr-li­bne­twork (Docker tvarkyklė): kuryr-li­bne­twork yra tvarkyklė, veikianti kaip sąsaja tarp Docker ir Neutron.
  • Cinder (blokinė saugykla): Cinder yra OpenStack ar­chi­tek­tū­ros kom­po­nen­to, tei­kian­čio nuolatinę blokinę saugyklą VM veikimui, pa­va­di­ni­mas. Modulis teikia virtualią saugyklą per sa­vi­tar­nos API. Tai leidžia ga­lu­ti­niams var­to­to­jams naudotis saugyklos iš­tek­liais nežinant, kuris įrenginys teikia saugyklą.
  • Keystone (tapatybės paslauga): Keystone teikia OpenStack var­to­to­jams centrinę tapatybės paslaugą. Modulis veikia kaip au­ten­tiš­ku­mo pa­tvir­ti­ni­mo ir leidimų sistema tarp atskirų OpenStack kom­po­nen­tų. Prieigą prie projektų debesyje re­gu­liuo­ja nuo­mi­nin­kai. Kiek­vie­nas nuo­mi­nin­kas at­sto­vau­ja var­to­to­jui, ir galima apibrėžti kelis vartotojų prieigos lygius su skir­tin­go­mis teisėmis.
  • Glance (vaizdų paslauga): su „Glance“ moduliu „OpenStack“ teikia paslaugą, lei­džian­čią saugoti ir gauti virtualių mašinų vaizdus.

Daugiau in­for­ma­ci­jos apie „OpenStack“ kom­po­nen­tus ir paslaugas rasite mūsų straips­ny­je apie „OpenStack“.

Be minėtų kom­po­nen­tų, „OpenStack“ ar­chi­tek­tū­rą galima išplėsti naudojant įvairius modulius. Apie skir­tin­gus pa­pil­do­mus modulius galite paskai­ty­ti „OpenStack“ sve­tai­nė­je.

D2iQ DC/OS

DC/OS (Dist­ri­bu­ted Cloud Operating System) – tai atvirojo kodo prog­ra­mi­nė įranga, skirta pa­skirs­ty­tų­jų sistemų valdymui, kurią sukūrė „D2iQ Inc.“ (buvusi „Me­so­sp­he­re“). Projektas pagrįstas atvirojo kodo klasterių valdytoju „Apache Mesos“ ir yra operacinė sistema, skirta duomenų centrams. Šaltinio kodas var­to­to­jams pri­ei­na­mas pagal „Apache“ li­cen­ci­jos 2 versiją „GitHub“ svetainės DC/OS sau­gyk­lo­se. Įmonėms skirta prog­ra­mi­nės įrangos versija taip pat prieinama sve­tai­nė­je d2iq.com. Išsamią projekto do­ku­men­ta­ci­ją galima rasti sve­tai­nė­je dcos.io.

DC/OS galima laikyti „Mesos“ dist­ri­bu­ci­ja, kuri suteikia visas klasterio tvar­kyk­lės funkcijas (per centrinę vartotojo sąsają) ir žymiai praplečia „Mesos“ galimybes.

DC/OS naudoja „Mesos“ plat­for­mos pa­skirs­ty­to­sios sistemos branduolį. Tai leidžia sujungti viso duomenų centro išteklius ir valdyti juos kaip sujungtą sistemą, panašią į vieną loginį serverį. Tokiu būdu galite valdyti ištisus fizinių ar virtualių mašinų klas­te­rius taip pat lengvai, kaip ir vieną kom­piu­te­rį.

Ši prog­ra­mi­nė įranga su­pa­pras­ti­na pa­skirs­ty­tų­jų programų diegimą ir valdymą bei au­to­ma­ti­zuo­ja tokias užduotis kaip išteklių valdymas, pla­na­vi­mas ir procesų tar­pu­sa­vio ryšys. D2iQ DC/OS pagrindu vei­kian­čio klasterio bei jame esančių paslaugų valdymas at­lie­ka­mas naudojant centrinę ko­man­di­nės eilutės programą (CLI) arba ži­nia­tink­lio sąsają (GUI).

DC/OS izoliuoja klasterio išteklius ir teikia bendras paslaugas, pa­vyz­džiui, paslaugų aptikimą ar paketų valdymą. Pag­rin­di­niai prog­ra­mi­nės įrangos kom­po­nen­tai veikia ap­sau­go­to­je srityje – pag­rin­di­nia­me bran­duo­ly­je. Tai apima „Mesos“ plat­for­mos pag­rin­di­nę ir agentų programas, kurios yra at­sa­kin­gos už išteklių pa­skirs­ty­mą, procesų izo­lia­ci­ją ir saugumo funkcijas.

  • „Mesos“ pag­rin­di­nis serveris: „Mesos“ pag­rin­di­nis serveris yra pag­rin­di­nis procesas, vei­kian­tis pag­rin­di­nia­me mazge. „Mesos“ pag­rin­di­nio serverio paskirtis – valdyti išteklių tvarkymą ir ko­or­di­nuo­ti užduotis (abst­rak­čius darbo vienetus), vykdomas agento mazge. Šiam tikslui „Mesos“ pag­rin­di­nis serveris paskirsto išteklius re­gist­ruo­toms DC/OS pa­slau­goms ir priima išteklių ata­skai­tas iš „Mesos“ agentų.
  • Mesos agentai: Mesos agentai yra procesai, kurie veikia agentų są­skai­to­se ir yra atsakingi už pag­rin­di­nio serverio pa­skirs­ty­tų užduočių vykdymą. Mesos agentai re­gu­lia­riai teikia ata­skai­tas apie klas­te­ry­je esančius išteklius Mesos pag­rin­di­niam serveriui. Mesos pag­rin­di­nis serveris jas per­siun­čia planavimo programai (t. y. Marathon, Chronos arba Cassandra). Ji nu­spren­džia, kuri užduotis turi būti vykdoma kuriame mazge. Tada užduotys yra vykdomos kon­t­ei­ne­riuo­se izo­liuo­tai.

Visi kiti sistemos kom­po­nen­tai, taip pat programos, kurias „Mesos“ agentai paleidžia per vykdytoją, veikia vartotojo erdvėje. Pag­rin­di­niai stan­dar­ti­nės DC/OS diegimo kom­po­nen­tai yra ad­mi­nist­ra­to­riaus marš­ru­ti­za­to­rius, „Mesos“ DNS, pa­skirs­ty­ta­sis DNS tarpinis serveris, apkrovos ba­lan­sa­vi­mo įrenginys „Minuteman“, tvar­ka­raš­čio sudarymo programa „Marathon“, „Apache ZooKeeper“ ir „Exhibitor“.

  • Ad­mi­nist­ra­to­riaus marš­ru­ti­za­to­rius: ad­mi­nist­ra­to­riaus marš­ru­ti­za­to­rius – tai spe­cia­liai su­kon­fi­gū­ruo­tas ži­nia­tink­lio serveris, pagrįstas NGINX, kuris teikia DC/OS paslaugas, taip pat atlieka centrinio au­ten­ti­fi­ka­vi­mo ir tarpinio serverio funkcijas.
  • Mesos DNS: sistemos kom­po­nen­tas Mesos DNS teikia paslaugų aptikimo funkcijas, kurios leidžia atskiroms pa­slau­goms ir prog­ra­moms klas­te­ry­je atpažinti viena kitą per centrinę domenų vardų sistemą (DNS).
  • Iš­skirs­ty­ta­sis DNS proxy: iš­skirs­ty­ta­sis DNS proxy yra vidinis DNS dis­pe­če­ris.
  • Minuteman: sistemos kom­po­nen­tas Minuteman veikia kaip vidinis apkrovos ba­lan­sa­vi­mo įrenginys, kuris dirba OSI re­fe­ren­ci­nio modelio trans­por­to sluoks­ny­je (4 sluoksnis).
  • DC/OS „Marathon“: „Marathon“ yra pag­rin­di­nis „Mesos“ plat­for­mos kom­po­nen­tas, kuris „D2iQ DC/OS“ veikia kaip „init“ sistema (panaši į „systemd“). „Marathon“ paleidžia ir prižiūri DC/OS paslaugas bei programas klasterio aplinkose. Be to, prog­ra­mi­nė įranga teikia aukšto pa­ti­ki­mu­mo funkcijas, paslaugų atradimą, apkrovos ba­lan­sa­vi­mą, būklės pa­tik­ri­ni­mus ir grafinę ži­nia­tink­lio sąsają.
  • Apache ZooKeeper: Apache ZooKeeper yra atvirojo kodo prog­ra­mi­nės įrangos kom­po­nen­tas, tei­kian­tis ko­or­di­na­vi­mo funkcijas, skirtas programų veikimui ir valdymui pa­skirs­ty­to­se sistemose. ZooKeeper nau­do­ja­mas D2iQ DC/OS visų įdiegtų sistemos paslaugų ko­or­di­na­vi­mui.
  • Exhibitor: Exhibitor yra sistemos kom­po­nen­tas, kuris au­to­ma­tiš­kai įdie­gia­mas ir kon­fi­gū­ruo­ja­mas su ZooKeeper kiek­vie­na­me pag­rin­di­nia­me mazge. Exhibitor taip pat teikia grafinę vartotojo sąsają ZooKeeper var­to­to­jams.

Naudojant DC/OS sujungtus klasterio išteklius, galima vienu metu vykdyti įvairias užduotis. Tai, pa­vyz­džiui, leidžia ly­gia­gre­čiai veikti didžiųjų duomenų sistemų, mikro paslaugų ar kon­t­ei­ne­rių platformų, tokių kaip „Hadoop“, „Spark“ ir „Docker“, klasterio ope­ra­ci­nė­je sistemoje.

„D2iQ Universe“ aplinkoje DC/OS sistemai pri­ei­na­mas viešasis programų katalogas. Nau­do­da­mie­si juo, galite įdiegti tokias programas kaip „Spark“, „Cassandra“, „Chronos“, „Jenkins“ ar „Kafka“ pa­pras­čiau­siai spus­te­lė­da­mi grafinėje vartotojo sąsajoje.

Kokios „Docker“ priemonės yra skirtos saugumui už­tik­rin­ti?

Nors kon­t­ei­ne­riuo­se vykdomi izoliuoti procesai naudoja tą patį branduolį, „Docker“ taiko įvairias priemones, kad juos izoliuotų vieną nuo kito. Tam paprastai nau­do­ja­mos pag­rin­di­nės „Linux“ bran­duo­lio funkcijos, pa­vyz­džiui, „Cgroups“ ir „Na­me­spa­ces“.

Tačiau kon­t­ei­ne­riai vis dar ne­už­tik­ri­na tokio paties izo­lia­ci­jos lygio, kokį galima pasiekti naudojant vir­tu­alias mašinas. Nepaisant taikomų izo­lia­ci­jos metodų, per kon­t­ei­ne­rius galima pasiekti svarbias pag­rin­di­nes po­sis­te­mes, pa­vyz­džiui, „Cgroups“, taip pat bran­duo­lio sąsajas, esančias ka­ta­lo­guo­se „/sys“ ir „/proc “.

„Docker“ kūrėjų komanda pripažino, kad šios saugumo problemos trukdo diegti kon­t­ei­ne­rių tech­no­lo­gi­ją ga­my­bi­nė­se sistemose. Be pag­rin­di­nių „Linux“ bran­duo­lio izo­lia­ci­jos metodų, naujesnės „Docker Engine“ versijos taip pat palaiko „AppArmor“, „SELinux“ ir „Seccomp“ sistemas, kurios veikia kaip tam tikros rūšies ug­nia­sie­nė pag­rin­di­niams iš­tek­liams.

  • AppArmor: naudojant „AppArmor“, re­gu­liuo­ja­mos kon­t­ei­ne­rių prieigos teisės prie failų sistemų.
  • SELinux: SELinux suteikia sudėtingą re­gu­lia­vi­mo sistemą, kurioje galima įgy­ven­din­ti prieigos kontrolę prie pag­rin­di­nių išteklių.
  • Seccomp: Seccomp (Secure Computing Mode) prižiūri sistemos iškvietų vykdymą.

Be šių „Docker“ įrankių, „Docker“ taip pat naudoja „Linux“ funkcijas, kad apribotų „root“ teises, kuriomis „Docker Engine“ paleidžia kon­t­ei­ne­rius.

Taip pat kyla ir kitų saugumo problemų, susijusių su prog­ra­mi­nės įrangos pa­žei­džia­mu­mais programų kom­po­nen­tuo­se, pla­ti­na­muo­se per „Docker“ registrą. Kadangi iš esmės bet kas gali kurti „Docker“ atvaizdus ir juos viešai paskelbti bend­ruo­me­nei „Docker Hub“ plat­for­mo­je, at­si­siun­čiant atvaizdą kyla pavojus, kad į jūsų sistemą pateks ken­kė­jiš­kas kodas. Prieš diegdami programą, „Docker“ nau­do­to­jai turėtų įsi­ti­kin­ti, kad visas atvaizde pateiktas kodas, skirtas kon­t­ei­ne­rių vykdymui, yra iš patikimo šaltinio.

„Docker“ siūlo pa­tvir­ti­ni­mo programą, kurią prog­ra­mi­nės įrangos teikėjai gali naudoti savo „Docker“ vaizdams pa­tik­rin­ti ir pa­tvir­tin­ti. Šia pa­tvir­ti­ni­mo programa „Docker“ siekia pa­leng­vin­ti kūrėjams saugių prog­ra­mi­nės įrangos tiekimo grandinių kūrimą jų pro­jek­tams. Be to, kad programa didina saugumą var­to­to­jams, ji taip pat siekia suteikti prog­ra­mi­nės įrangos kūrėjams galimybę išskirti savo projektus iš gausybės kitų prieinamų išteklių. Pa­tik­rin­ti atvaizdai pažymėti ženklu „Verified Publisher“ (Pa­tik­rin­tas leidėjas) ir, be kitų privalumų, Docker Hub paieškos re­zul­ta­tuo­se jiems su­tei­kia­mas aukš­tes­nis reitingas.

Go to Main Menu