Dockeri laiaula­tus­lik öko­süs­teem pakub aren­da­ja­tele mitmeid võimalusi ra­ken­duste ka­su­tuse­le­võ­tuks, kon­tei­ne­rite hal­da­miseks ja muukski. Tut­vus­tame olu­li­se­maid Docker-tööriistu ning anname ülevaate po­pu­laar­se­ma­test kol­man­date osapoolte pro­jek­ti­dest, mis arendavad avatud läh­te­koo­diga Docker-tööriistu.

Millised on Docker’i peamised töö­riis­tad ja kom­po­nen­did?

Tä­na­päe­val on Docker palju enamat kui lihtsalt arenenud platvorm tark­va­ra­kon­tei­ne­rite hal­da­miseks. Arendajad on loonud mit­me­su­gu­seid Docker-tööriistu, et muuta ra­ken­duste ka­su­tuse­le­võtt hajutatud inf­ra­struk­tuu­ris ja pil­ve­kesk­kon­da­des liht­sa­maks, kiiremaks ja paind­li­ku­maks. Lisaks klastrite loomise ja koor­di­nee­ri­mise töö­riis­ta­dele on olemas ka keskne ra­ken­duste pood ning pil­ve­res­surs­side haldamise tööriist.

Docker Engine

Kui arendajad räägivad „Dockerist”, peavad nad ta­va­li­selt silmas avatud läh­te­koo­diga kliendi-serveri rakendust, mismoodustab kon­tei­nerplat­vormi aluse. Seda rakendust ni­me­ta­takse Docker Engine’iks. Docker Engine’i keskseks osaks on Docker-daemon, REST-API ja CLI (kä­su­vii­va­lii­des), mis toimib ka­su­ta­ja­lii­de­sena.

Selle lahenduse abil saate suhelda Docker Engine’iga käsurea käskude kaudu ning hallata Docker-pilte, Docker-faile ja Docker-kon­tei­ne­reid mugavalt terminali kaudu.

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

Docker Engine’i ük­sik­as­ja­liku kir­jel­duse leiate meie al­ga­ja­tele mõeldud Docker-juhendist „Docker-juhend: pai­gal­da­mine ja esimesed sammud“.

Docker Hub

Docker Hub pakub ka­su­ta­ja­tele pil­ve­põ­hist registrit, mis võimaldab Docker-kujutisi alla laadida, neid keskelt hallata ja teiste Docker-ka­su­ta­ja­tega jagada. Re­gist­ree­ri­tud kasutajad saavad Docker-kujutisi sal­ves­tada ava­li­kesse või pri­vaat­se­tesse hoid­la­tesse. Avaliku kujutise al­la­laa­di­miseks (mida Docker-ter­mi­no­loo­gias ni­me­ta­takse „pulling’uks” ) ei ole vaja ka­su­ta­ja­kon­tot. In­teg­ree­ri­tud sil­di­meh­ha­nism võimaldab kujutiste ver­sioo­nide haldamist.

Lisaks teiste Docker-ka­su­ta­jate avalikele hoid­la­tele on Docker Hubi ametlikes hoid­la­test leida ka palju ressursse Docker-aren­da­jate mees­kon­nalt ja tuntud avatud läh­te­koo­diga pro­jek­ti­delt. Kõige po­pu­laar­se­mate Docker-piltide hulka kuuluvad NGINX-vee­bi­ser­ver, Redis-mä­lu­põ­hine andmebaas, BusyBox-Unix-töö­riistakomp­lekt ja Ubuntu Linuxi dist­ri­but­sioon.

Image: Official repositories in the Docker node
You can find more than 100,000 free images in the official Docker re­po­si­to­ries.

Or­ga­ni­sat­sioo­nid on veel üks oluline Docker Hubi funkt­sioon, mis võimaldab Docker-ka­su­ta­ja­tel luua pri­vaat­seid hoidlaid, mis on kät­te­saa­da­vad ainult valitud inim­rüh­male. Juur­de­pää­su­õi­gusi hal­la­takse or­ga­ni­sat­siooni sees mees­kon­dade ja rühmade liik­me­li­suse kaudu.

Docker Swarm

Docker Engine sisaldab sis­se­ehi­ta­tud funkt­siooni, mis võimaldab ka­su­ta­ja­tel hallata Docker-hoste klast­ri­tes, mida ni­me­ta­takse swarmi­deks. Docker Engine’i sis­se­ehi­ta­tud klast­ri­hal­dus- ja koor­di­nee­ri­mis­või­ma­lu­sed põhinevad Swarmkit-töö­riistakomp­lek­til. Kui kasutate kon­tei­nerplat­vormi vanemat versiooni, on Docker-tööriist saadaval eral­di­seisva ra­ken­dus­ena.

Swarm on Dockerile omane klastrite loomise tööriist, mis koondab Docker-hostide rühma üheks vir­tuaal­seks hostiks ja pakub Docker REST API-d. Iga Docker-daemoniga seotud Docker-tööriist saab Swarmile juurde pääseda ja ska­lee­rida end mis tahes arvu Docker-hostide vahel. Docker Engine’i kä­su­realii­d­ese abil saavad kasutajad luua swarme, jaotada rakendusi klastris ja hallata swarmi toimimist ilma täiendava or­kest­ree­ri­mis­tark­vara ka­su­ta­miseta.

Klast­ri­tesse koondatud Docker-mootorid töötavad swarm-režiimis. Valige see, kui soovite luua uue klastri või lisada Docker-hosti ole­mas­ole­vasse swarmi. Klastri üksikuid Docker-hoste ni­me­ta­takse „sõlmedeks”. Klastri sõlmed võivad töötada vir­tuaal­sete hostidena samas kohalikus süsteemis, kuid sa­ge­da­mini ka­su­ta­takse pil­ve­põ­hist lahendust, kus Docker-swarmi üksikud sõlmed on jaotatud erinevate süs­teemide ja inf­ra­struk­tuu­ride vahel.

Tarkvara põhineb master-worker-ar­hi­tek­tuu­ril. Kui üles­an­deid tuleb Swarmis jaotada, edastavad kasutajad teenuse hal­dus­sõlme. Hal­dus­sõlm vastutab seejärel kon­tei­ne­rite ajas­ta­mise eest klastris ning toimib peamise ka­su­ta­ja­lii­de­sena Swarmi res­surs­si­dele juur­de­pääs­uks.

Juhtsõlm saadab töötajate sõlmedele üksikuid üles­an­deid, mida ni­me­ta­takse üles­an­ne­teks.

  • Teenused: teenused on Docker-klastrite kesksed struk­tuu­rid. Teenus määratleb Docker-klastris täidetava ülesande. Teenus hõlmab sama kujutise põhjal loodud kon­tei­ne­rite rühma. Teenuse loomisel määrab kasutaja, millist kujutist ja milliseid käske ka­su­ta­takse. Lisaks pakuvad teenused võimalust rakendusi ska­lee­rida. Docker-platvormi kasutajad määravad lihtsalt, mitu kon­tei­ne­rit teenuse jaoks käi­vi­ta­takse.
  • Ülesanded: teenuste klastris jao­ta­miseks jagab hal­dus­sõlm need ük­si­ku­teks tööük­sus­teks (üles­an­ne­teks). Iga ülesanne sisaldab Docker-kon­tei­ne­rit ning selles täi­de­ta­vaid käske.

Lisaks klastrite hal­da­misele ja kon­tei­ne­rite koor­di­nee­ri­misele võivad hal­dus­sõl­med vaikimisi täita ka töötajate sõlmede üles­an­deid – välja arvatud juhul, kui piirad nende sõlmede üles­an­deid rangelt hal­dus­üles­an­ne­tega.

Igal töö­ta­ja­sõl­mel töötab agen­di­prog­ramm. See võtab vastu üles­an­deid ja edastab vastavale juhtsõlme staa­tus­aru­an­ded üleantud ülesande täitmise käigu kohta. Järgnev joonis kujutab Docker Swarmi skee­mi­list esi­tus­viisi:

Image: Schematic representation of a Docker Swarm
The manager-worker arc­hi­tec­ture of a Docker Swarm

Docker Swarmi ka­su­tuse­le­võt­misel tuginevad kasutajad ta­va­li­selt Docker-masinale.

Docker Compose

Docker Compose võimaldab mitu kon­tei­ne­rit ühendada ja käivitada üheainsa käsuga. Compose’i põ­hi­ele­ment on keskne juhtfail, mis põhineb au­hin­na­tud keelel YAML. Selle Compose-faili süntaks sarnaneb avatud läh­te­koo­diga tarkvara Vagrant sün­tak­siga, mida ka­su­ta­takse vir­tuaal­ma­si­nate loomiseks ja sea­dis­ta­miseks.

Failis docker-compose.yml saate mää­rat­leda piiramatu arvu tark­va­ra­kon­tei­ne­reid, seal­hul­gas kõik sõl­tu­vu­sed, ning nende oma­va­he­li­sed seosed. Selliseid mitme kon­tei­ne­rega rakendusi hal­la­takse samal viisil kui üksikuid tark­va­ra­kon­tei­ne­reid. Rakenduse kogu elutsükli hal­da­miseks kasutage käskudocker-compose koos soovitud alam­käs­ku­dega.

Seda Docker-tööriista saab hõlpsasti in­teg­ree­rida Swarmil põ­hi­ne­vasse klast­risse. Nii saate Compose’iga loodud mitme kon­tei­neriga rakendusi hajutatud süs­teemi­des käitada sama lihtsalt kui ühel Docker-hostil.

Docker Compose’i veel üks omadus on in­teg­ree­ri­tud ska­lee­ri­mis­meh­ha­nism. Selle koor­di­nee­ri­mis­töö­riista abil saate mugavalt käsurea programmi abil määrata, mitu kon­tei­ne­rit soovite konk­reetse teenuse jaoks käivitada.

Millised kol­man­date osapoolte Docker-töö­riis­tad on olemas?

Lisaks Docker Inc. enda aren­dus­tele on olemas mit­me­su­gu­seid väliste pakkujate tark­va­ra­va­hen­deid ja platvorme, mis pakuvad liideseid Docker Engine’ile või on spet­siaal­selt selle po­pu­laarse kon­tei­nerplat­vormi jaoks välja töötatud. Docker öko­süs­tee­mis on po­pu­laar­se­mate avatud läh­te­koo­diga pro­jek­tide hulgas or­kest­ree­ri­mis­töö­riist Ku­ber­ne­tes, klast­ri­hal­dus­töö­riist Shipyard, mitme kon­tei­neri saat­mis­la­hen­dus Panamax, pideva in­teg­rat­siooni platvorm Drone, pil­ve­põ­hine ope­rat­sioo­ni­süs­teem OpenStack ja klast­ri­hal­duri Mesosel põhinev and­me­kes­kuse ope­rat­sioo­ni­süs­teem D2iQ DC/OS.

Ku­ber­ne­tes

Dockeril ei ole alati võimalik välja töötada oma or­kest­ree­ri­mis­töö­riistu, nagu Swarm ja Compose. Seetõttu on mitmed et­te­võt­ted juba aastaid in­ves­tee­ri­nud oma aren­dus­töösse, et luua spet­siaal­selt ko­han­da­tud tööriistu, mis hõl­bus­tak­sid kon­tei­nerplat­vormi ka­su­ta­mist suurtes hajutatud inf­ra­struk­tuu­ri­des. Selle tüübi po­pu­laar­se­mate la­hen­duste hulka kuulub avatud läh­te­koo­diga projekt Ku­ber­ne­tes.

Ku­ber­ne­tes on kon­tei­ne­ri­põ­histe ra­ken­duste klast­ri­hal­dur. Ku­ber­ne­tese eesmärk on au­to­ma­ti­see­rida ra­ken­duste tööd klastris. Selleks kasutab or­kest­ree­ri­mis­töö­riist juh­ti­mis­lii­des­tena REST-API-d, kä­su­reaprog­rammi ja graa­fi­list vee­bi­lii­dest. Nende liideste abil saab käivitada au­to­ma­ti­see­ri­mis­toi­min­guid ja küsida ole­ku­aru­an­deid. Ku­ber­ne­test saab kasutada järg­mis­tel ees­mär­ki­del:

  • kon­tei­ne­ri­põ­histe ra­ken­duste käi­vi­ta­mine klastris,
  • pai­gal­dada ja hallata rakendusi hajutatud süs­teemi­des,
  • ska­lee­rida rakendusi ning
  • kasutada riistvara või­ma­li­kult tõhusalt.

Selleks ühendab Ku­ber­ne­tes kon­tei­ne­rid loo­gi­lis­teks osadeks, mida ni­me­ta­takse podideks. Podid on klast­ri­hal­duri põ­hi­ük­su­sed, mida saab klastris jaotada ajas­ta­mise abil.

Nagu Docker Swarm, põhineb ka Ku­ber­ne­tes juht-töötaja ar­hi­tek­tuu­ril. Klastri moo­dus­ta­vad Ku­ber­ne­tes-master ja mit­me­su­gu­sed töötajad, keda ni­me­ta­takse ka Ku­ber­ne­tes-sõlmedeks (või mi­nio­ni­teks). Ku­ber­ne­tes-master toimib klastri keskse juh­ti­mis­ta­san­dina ja koosneb neljast põ­hi­kom­po­nen­dist, mis või­mal­da­vad otsest suhtlust klastris ja üles­an­nete jaotamist. Ku­ber­ne­tes-master koosneb API-serverist, kon­fi­gu­rat­sioo­ni­mä­lust etcd, ajas­ta­jast ja kont­rol­le­ri­hal­du­rist.

  • API-server: kõik Ku­ber­ne­tes-klastri au­to­ma­ti­see­ri­mis­toi­min­gud käi­vi­ta­takse REST-API kaudu API-serveri abil. See toimib klastri keskse hal­dus­lii­de­sena.
  • etcd: avatud läh­te­koo­diga kon­fi­gu­rat­sioo­ni­mälu etcd-d võib vaadelda kui Ku­ber­ne­tes-klastri mälu. CoreOS-i spet­siaal­selt hajutatud süs­teemide jaoks arendatud Key Value Store salvestab kon­fi­gu­rat­sioo­ni­and­meid ja teeb need kät­te­saa­da­vaks igale klastri sõlme. Klastri het­ke­olu­korda saab igal ajal hallata etcd kaudu.
  • Scheduler: scheduler vastutab kon­tei­ne­ri­rüh­made (podide) jaotamise eest klastris. See määrab kindlaks podi res­sur­si­va­ja­du­sed ja sobitab need seejärel klastri üksikute sõlmede kät­te­saa­da­vate res­surs­si­dega.
  • Kont­rol­le­ri­hal­dur: kont­rol­le­ri­hal­dur on Ku­ber­ne­tes-pea­moo­duli teenus, mis juhib or­kest­ree­ri­mist, re­gu­lee­ri­des klastri seisundit ja täites ru­tiin­seid üles­an­deid. Kont­rol­le­ri­hal­duri peamine ülesanne on tagada, et klastri seisund vastaks määratud siht­sei­sun­dile.

Ku­ber­ne­tes-peaser­veri kõik kom­po­nen­did võivad asuda samal serveril või olla jaotatud mitme peaser­veri vahel kõrge kät­te­saa­da­vu­sega klastris.

Kuigi Ku­ber­ne­tes’i master vastutab koor­di­nee­ri­mise eest, töötavad klastris jaotatud pod’id hostidel ehk Ku­ber­ne­tes’i sõlmedel, mis alluvad masterile. Selleks peab igal Ku­ber­ne­tes’i sõlmel töötama kon­tei­ne­ri­moo­tor. Kuigi Docker on de facto standard, ei pea Ku­ber­ne­tes kasutama kindlat kon­tei­ne­ri­moo­to­rit.

Lisaks kon­tei­ne­ri­moo­to­rile hõlmavad Ku­ber­ne­tes’i sõlmed järgmisi kom­po­nente:

  • kubelet: kubelet on agent, mis töötab igas Ku­ber­ne­tes-sõlmes ja mida ka­su­ta­takse sõlme juh­ti­miseks ja hal­da­miseks. Iga sõlme keskse kon­takt­punk­tina on kubelet ühendatud Ku­ber­ne­tes-masteriga ning tagab teabe edas­ta­mise juh­ti­mis­ta­san­dile ja vas­tu­võt­mise sealt.
  • kube-proxy: lisaks töötab igas Ku­ber­ne­tes-sõlmes proxy-teenus kube-proxy. See tagab, et väl­jast­poolt tulevad päringud suu­na­takse edasi vas­ta­va­tesse kon­tei­ne­ri­tesse, ning pakub teenuseid kon­tei­ne­ri­põ­histe ra­ken­duste ka­su­ta­ja­tele. Kube-proxy pakub ka algelist koormuse jaotamist.

Järgneval joonisel on esitatud skee­mi­line kujutis pea­moo­duli ar­hi­tek­tuu­rist, millel põhineb or­kest­ree­ri­mis­plat­vorm Ku­ber­ne­tes:

Image: Schematic representation of the Kubernetes architecture
The master-node arc­hi­tec­ture of the orc­hest­ra­tion platform Ku­ber­ne­tes

Lisaks Ku­ber­ne­tese põ­hi­pro­jek­tile on olemas ka arvukad töö­riis­tad ja laien­dused, mis või­mal­da­vad or­kest­ree­ri­mis­plat­vor­mile lisada täien­da­vaid funkt­sioone. Kõige po­pu­laar­se­mad neist on seire- ja vea­diag­nos­tika töö­riis­tad Pro­met­heus, Weave Scope ja sysdig, samuti pa­ket­ti­hal­dur Helm. Samuti on olemas pis­tik­prog­ram­mid Apache Maveni ja Gradle’i jaoks ning Java API, mis võimaldab Ku­ber­ne­test kaug­juh­ti­mist.

Lae­va­te­has

Shipyard on Swarmil põhinev, kogukonna poolt arendatud hal­dus­la­hen­dus, mis võimaldab ka­su­ta­ja­tel hallata Docker-ressursse, nagu kon­tei­ne­rid, pildid, hostid ja pri­vaat­sed registrid, graa­fi­lise ka­su­ta­ja­lii­d­ese kaudu. See on kät­te­saa­dav vee­bi­ra­ken­dus­ena vee­bib­rau­seri kaudu. Lisaks klast­ri­hal­dus­funkt­sioo­ni­dele, millele pääseb juurde keskse vee­bi­lii­d­ese kaudu, pakub Shipyard ka kasutaja au­ten­ti­mist ja rol­li­põ­hist juur­de­pää­su­kont­rolli.

Tarkvara on 100% ühilduv Docker Remote API-ga ning kasutab avatud läh­te­koo­diga NoSQL-and­me­ba­asi RethinkDB ka­su­ta­ja­kon­tode, aad­res­side ja sündmuste andmete sal­ves­ta­miseks. Tarkvara põhineb klast­ri­hal­dus­töö­riistakomp­lek­til Citadel ning koosneb kolmest põ­hi­kom­po­nen­dist: kont­rol­le­rist, API-st ja ka­su­ta­ja­lii­de­sest.

  • Shipyard-kont­rol­ler: kont­rol­ler on hal­dus­töö­riista Shipyard keskne komponent. Shipyard-kont­rol­ler suhtleb andmete sal­ves­ta­miseks RethinkDB-ga ning võimaldab pöörduda Docker-klastri üksikute hostide poole ja juhtida sündmusi.
  • Shipyard API: Shipyard API põhineb REST-il. Kõiki hal­dus­töö­riista funkt­sioone juhitakse Shipyard API kaudu.
  • Shipyard ka­su­ta­ja­lii­des (UI): Shipyard ka­su­ta­ja­lii­des on AngularJS-rakendus, mis pakub ka­su­ta­ja­tele vee­bib­rau­se­ris graa­fi­list ka­su­ta­ja­lii­dest Docker-klastrite hal­da­miseks. Kõik ka­su­ta­ja­lii­de­ses toimuvad suhtlused toimuvad Shipyard API kaudu.

Li­sa­tea­vet selle avatud läh­te­koo­diga projekti kohta leiate Shipyardi amet­li­kult vee­bi­le­helt.

Panamax

Avatud läh­te­koo­diga tark­va­ra­pro­jekti Panamax aren­da­jate eesmärk on liht­sus­tada mitme kon­tei­neriga ra­ken­duste ka­su­tuse­le­võttu. See tasuta tööriist pakub ka­su­ta­ja­tele graa­fi­list ka­su­ta­ja­lii­dest, mis võimaldab Docker-kon­tei­ne­ri­tel põ­hi­ne­vaid keerukaid rakendusi mugavalt arendada, ka­su­tusele võtta ja levitada „lo­his­ta­mise ja loo­vu­ta­mise” abil.

Panamax võimaldab sal­ves­tada keerukaid mitme kon­tei­neriga rakendusi ra­ken­dus­mal­li­dena ja levitada neid klast­ri­ar­hi­tek­tuu­ri­des vaid ühe klõpsuga. GitHubis asuva in­teg­ree­ri­tud ra­ken­duste turu abil saab ise loodud ra­ken­duste malle sal­ves­tada Git-hoid­la­tesse ja teha need teistele ka­su­ta­ja­tele kät­te­saa­da­vaks.

Panamax-ar­hi­tek­tuuri põ­hi­kom­po­nen­did võib jagada kahte rühma: Panamax Local Client ja mis tahes arv kaug­pai­gal­duse sihtmärke.

Panamax kohalik klient on selle Docker-tööriista keskne komponent. See töötab kohalikus süsteemis ja võimaldab luua keerukaid kon­tei­ne­ri­põ­hi­seid rakendusi. Kohalik klient koosneb järg­mis­test kom­po­nen­ti­dest:

  • CoreOS: Panamaxi kohaliku kliendi pai­gal­da­miseks on vaja Linuxi dist­ri­but­siooni CoreOS, mis on spet­siaal­selt loodud tark­va­ra­kon­tei­ne­rite jaoks. Seejärel käi­vi­ta­takse Panamaxi klient CoreOS-is Docker-kon­tei­ne­rina. Lisaks Docker-funkt­sioo­ni­dele on ka­su­ta­ja­tel juur­de­pääs mitmetele CoreOS-i funkt­sioo­ni­dele. Nende hulka kuuluvad muu hulgas Fleet ja Jour­nalctl:
  • Fleet: otsese in­teg­ree­ri­mise asemel Dockeriga kasutab Panamax-klient oma kon­tei­ne­rite koor­di­nee­ri­miseks klast­ri­hal­du­rit Fleet. Fleet on klast­ri­hal­dur, mis kont­rol­lib ar­vu­ti­klast­ri­tes Linuxi daemonit systemd.
  • Jour­nalctl: Panamax-klient kasutab Jour­nalctl-i, et taotleda Linuxi süs­tee­mi­hal­du­rilt systemd lo­gi­sõ­nu­meid aja­kir­jast.
  • Kohaliku kliendi ins­tal­lija: kohaliku kliendi ins­tal­lija sisaldab kõiki kom­po­nente, mis on vajalikud Panamax-kliendi ins­tal­li­miseks ko­ha­li­kule süs­tee­mile.
  • Panamax kohalik agent: kohaliku kliendi keskne komponent on kohalik agent. See on Panamax API kaudu ühendatud mitmete teiste kom­po­nen­tide ja sõl­tu­vus­tega. Nende hulka kuuluvad kohalik Docker-host, Panamax ka­su­ta­ja­lii­des, välised registrid ja klastri ka­su­tuse­le­võtu siht­mär­kide kau­ga­gen­did. Kohalik agent suhtleb kohalikus süsteemis Panamax API kaudu järgmiste prog­ram­mi­lii­des­tega, et vahetada teavet töötavate ra­ken­duste kohta:
  • Docker kaug-API: Panamax otsib pilte ko­ha­li­kust süs­tee­mist Docker kaug-API kaudu ja saab teavet töötavate kon­tei­ne­rite kohta.
  • etcd API: failid edas­ta­takse CoreOS Fleet daemonile etcd API kaudu.
  • systemd-journal-gatewayd.services: Panamax saab käi­mas­ole­vate teenuste ajakirja väljundi systemd-journal-gatewayd.services kaudu.

Lisaks võimaldab Panamax API suhelda mit­me­su­guste väliste API-dega.

  • Docker Registry API: Panamax hankib pil­di­mär­gi­sed Docker Registry API kaudu Docker Re­gist­ryst.
  • GitHub API: Panamax laadib GitHub API kaudu GitHubi hoidlast malli.
  • Kiss­Met­rics API: Kiss­Met­rics API kogub andmeid ka­su­ta­jate poolt käi­vi­ta­tud mallide kohta.
  • Panamax UI: Panamax UI toimib kohalikus süsteemis ka­su­ta­ja­lii­de­sena ja võimaldab ka­su­ta­ja­tel juhtida Docker-tööriista graa­fi­lise liidese kaudu. Kasutaja si­ses­tused edas­ta­takse otse ko­ha­li­kule agendile Panamax API kaudu. Panamax UI põhineb CTL Base UI Kitil, mis on Cen­tury­Linki vee­bi­pro­jek­tide jaoks mõeldud ka­su­ta­ja­lii­d­ese kom­po­nen­tide raa­ma­tu­kogu.

Panamaxi ter­mi­no­loo­gias ni­me­ta­takse Docker-klastri iga sõlme, millel puuduvad hal­dus­üles­an­ded, kaug­pai­gal­da­mise siht­mär­giks. Pai­gal­da­mise siht­mär­gid koosnevad Docker-hostist, mis on kon­fi­gu­ree­ri­tud Panamaxi mallide pai­gal­da­miseks järgmiste kom­po­nen­tide abil:

  • Pai­gal­dus­kesk­kon­dade ins­tal­lija: pai­gal­dus­kesk­kon­dade ins­tal­lija käivitab Docker-hosti, millele on lisatud Panamax-kaugagent ja or­kest­ree­ri­mi­sadap­ter.
  • Panamax kaugagent: kui Panamax kaugagent on ins­tal­li­tud, saab rakendusi jaotada kohaliku Panamax kliendi kaudu klastri mis tahes soovitud lõpp­punkti. Panamax kaugagent töötab Docker-kon­tei­ne­rina igas klastri ka­su­tuse­le­võtu siht­mär­gis.
  • Panamax or­kest­ree­ri­mi­sadap­ter: or­kest­ree­ri­mi­sadap­te­ris pakutakse programmi loogikat iga Pa­na­maxile kät­te­saa­dava or­kest­ree­ri­mis­töö­riista jaoks ise­seis­vas adap­te­ri­ki­his. Seetõttu on ka­su­ta­ja­tel võimalus alati valida täpselt see or­kest­ree­ri­mis­teh­no­loo­gia, mida nende siht­kesk­kond toetab. Eel­kon­fi­gu­ree­ri­tud adapterid hõlmavad Ku­ber­ne­test ja Fleet:
  • Panamax Ku­ber­ne­tes adapter: koos Panamax kau­ga­gen­diga võimaldab Panamax Ku­ber­ne­tes adapter Panamax-mallide le­vi­ta­mist Ku­ber­ne­tes-klast­ri­tes.
  • Panamax Fleet’i adapter: koos Panamax’i kau­ga­gen­diga võimaldab Panamax Fleet’i adapter levitada Panamax’i malle klast­ri­tes, mida juhitakse Fleet’i klast­ri­hal­duri abil.

Järgnev joonis il­lust­ree­rib Docker-klastri üksikute Panamax-kom­po­nen­tide oma­va­he­list koos­toimet:

Image: Schematic representation of the software architecture for the Panamax container management tool
The software arc­hi­tec­ture of the Panamax container ma­na­ge­ment tool

CoreOS-il põhinev kon­tei­ne­ri­hal­dus­töö­riist Panamax pakub ka­su­ta­ja­tele graa­fi­lise ka­su­ta­ja­lii­d­ese kaudu mit­me­su­gu­seid stan­dard­seid kon­tei­ne­rite koor­di­nee­ri­mise teh­no­loo­giaid, samuti võimalust hallata mugavalt keerukaid mitme kon­tei­neriga rakendusi klast­ri­ar­hi­tek­tuu­ri­des, kasutades selleks mis tahes süsteemi (nt oma süle­ar­vu­tit).

Panamaxi avalik mallide hoidla võimaldab Panamaxi ka­su­ta­ja­tel pääseda GitHubi kaudu ligi avalikule mallide kogule, mis sisaldab mit­me­su­gu­seid ressursse.

Droon

Drone on lihtne pideva in­teg­rat­siooni platvorm, millel on mi­ni­maal­sed nõuded. Selle Docker-tööriista abil saate au­to­maat­selt laadida oma uusima koostatud versiooni Git-hoidlast, näiteks GitHubist, ja seda iso­lee­ri­tud Docker-kon­tei­ne­ri­tes testida. Saate käivitada mis tahes tes­ti­komp­lekti ning saata aruandeid ja staa­tus­sõ­nu­meid e-posti teel. Iga tark­va­ra­testi jaoks luuakse uus konteiner, mis põhineb avalikust Docker-re­gist­rist pärit piltidel. See tähendab, et koodi testimise kesk­kon­nana saab kasutada mis tahes avalikult kät­te­saa­da­vat Docker-pilti.

Drone on in­teg­ree­ri­tud Doc­ke­risse ja seda toetavad mitmed prog­ram­mee­ri­mis­kee­led, nagu PHP, Node.js, Ruby, Go ja Python. Ainus tõeline eeldus on kon­tei­nerplat­vorm. Saad luua Drone’i abil oma isikliku pideva in­teg­rat­siooni platvormi igal süsteemil, kuhu on võimalik Docker ins­tal­lida. Drone toetab mit­me­su­gu­seid ver­sioo­ni­hal­duse hoidlaid ning juhendi stan­dardse installi kohta koos GitHubi in­teg­rat­sioo­niga leiad avatud läh­te­koo­diga projekti vee­bi­sai­dilt aadressil readme.drone.io.

Jär­je­pi­deva in­teg­rat­siooni platvormi haldamine toimub vee­bi­lii­d­ese kaudu. Siin saab laadida tark­va­ra­kom­pi­lat­sioone mis tahes Git-hoidlast, ühendada need ra­ken­dus­tega ja käivitada tulemus eelnevalt määratud test­kesk­kon­nas. Selleks mää­ra­takse kindlaks .drone.yml-fail, milles täp­sus­ta­takse, kuidas iga tark­va­ra­testi jaoks rakendus luua ja käivitada.

Droo­ni­ka­su­ta­ja­tele pakutakse avatud läh­te­koo­diga CI-lahendust, mis ühendab selliste al­ter­na­tiiv­sete toodete nagu Travis ja Jenkins tugevused ka­su­ta­ja­sõb­ra­likuks ra­ken­duseks.

OpenStack

Avatud läh­te­koo­diga pil­veinf­ra­struk­tuu­ride rajamisel ja hal­da­misel on avatud läh­te­koo­diga pil­veo­pe­rat­sioo­ni­süs­teem OpenStack eelis­ta­tud tark­va­ra­la­hen­dus.

OpenS­tacki abil saate hallata arvuti-, salvestus- ja võr­gu­res­sursse keskse juht­pa­neeli kaudu ning teha need lõpp­ka­su­ta­ja­tele kät­te­saa­da­vaks vee­bi­lii­d­ese kaudu.

Pil­veo­pe­rat­sioo­ni­süs­teem põhineb mo­du­laar­sel ar­hi­tek­tuu­ril, mis koosneb mitmest kom­po­nen­dist:

  • Zun (kon­tei­ne­ri­tee­nus): Zun on OpenS­tacki kon­tei­ne­ri­tee­nus, mis võimaldab OpenS­tacki pilves kon­tei­ne­ri­tesse pai­gu­ta­tud ra­ken­duste lihtsat ka­su­tuse­le­võttu ja haldamist. Zuni eesmärk on või­mal­dada ka­su­ta­ja­tel hallata kon­tei­ne­rid REST API kaudu, ilma et nad peaksid haldama servereid või klastreid. Zuni ka­su­ta­miseks on vaja kolme muud OpenS­tacki teenust: Keystone, Neutron ja kryr-lib­ne­twork. Zuni funkt­sio­naal­sust saab laiendada ka täien­da­vate OpenS­tacki tee­nus­tega, nagu Cinder ja Glance.
  • Neutron (võr­gu­kom­po­nent): Neutron (varem Quantum) on võr­gu­kont­rol­liks kasutatav tei­sal­da­tav, ska­lee­ri­tav ja API-toega süs­tee­mi­kom­po­nent. Moodul pakub liidest kee­ru­liste võr­gu­to­po­loo­giate jaoks ning toetab mit­me­su­gu­seid pis­tik­prog­ramme, mille kaudu saab in­teg­ree­rida laien­da­tud võr­gu­funkt­sioone.
  • kuryr-lib­ne­twork (Docker-draiver): kuryr-lib­ne­twork on draiver, mis toimib liidesena Docker ja Neutroni vahel.
  • Cinder (plokk­sal­ves­tus): Cinder on OpenS­tacki ar­hi­tek­tuuri kom­po­nendi hüüdnimi, mis pakub püsivat plokk­sal­ves­tust vir­tuaal­ma­si­nate tööks. Moodul pakub vir­tuaal­set sal­ves­tus­ruumi ise­tee­nin­dus-API kaudu. Selle kaudu saavad lõpp­ka­su­ta­jad kasutada sal­ves­tus­res­sursse, ilma et nad teaksid, milline seade sal­ves­tus­ruumi pakub.
  • Keystone (iden­ti­teedi­tee­nus): Keystone pakub OpenS­tacki ka­su­ta­ja­tele keskset iden­ti­teedi­tee­nust. Moodul toimib au­ten­ti­mise ja õiguste süs­tee­mina üksikute OpenS­tacki kom­po­nen­tide vahel. Juur­de­pääsu pil­ve­pro­jek­ti­dele re­gu­lee­rivad rentnikud. Iga rentnik esindab kasutajat ning on võimalik mää­rat­leda mitu kasutajat, kellel on erinevad õigused.
  • Glance (pil­di­tee­nus): Glance-mooduliga pakub OpenStack teenust, mis võimaldab vir­tuaal­ma­si­nate pilte sal­ves­tada ja neid sealt kätte saada.

Li­sa­tea­vet OpenS­tacki kom­po­nen­tide ja teenuste kohta leiate meie artiklist OpenS­tacki kohta.

Lisaks eespool nimetatud kom­po­nen­ti­dele on OpenS­tacki ar­hi­tek­tuuri võimalik laiendada erinevate moodulite abil. Erinevate va­li­ku­liste moodulite kohta leiate teavet OpenS­tacki vee­bi­sai­dilt.

D2iQ DC/OS

DC/OS (Dist­ri­bu­ted Cloud Operating System) on D2iQ Inc. (endine Me­sosp­here) poolt arendatud avatud läh­te­koo­diga tarkvara hajutatud süs­teemide hal­da­miseks. Projekt põhineb avatud läh­te­koo­diga klast­ri­hal­du­ril Apache Mesos ja on and­me­kes­kuste ope­rat­sioo­ni­süs­teem. Lähtekood on ka­su­ta­ja­tele kät­te­saa­dav Apache litsentsi versiooni 2 alusel GitHubi DC/OS-i hoidlas. Tarkvara et­te­võt­te­ver­sioon on saadaval ka vee­bi­sai­dil d2iq.com. Projekti põhjalik do­ku­men­tat­sioon on kät­te­saa­dav vee­bi­sai­dil dcos.io.

DC/OS-i võib vaadelda kui Mesose dist­ri­but­siooni, mis pakub teile kõiki klast­ri­hal­duri funkt­sioone (keskse ka­su­ta­ja­lii­d­ese kaudu) ja laiendab Mesose võimalusi mär­ki­mis­väär­selt.

DC/OS kasutab Mesos-platvormi hajutatud süsteemi tuuma. See võimaldab koondada kogu and­me­kes­kuse ressursid ja hallata neid koondatud süs­tee­mina, mis toimib nagu üksainus loogiline server. Sel viisil saate juhtida terveid füü­si­liste või vir­tuaal­sete masinate klastreid sama lihtsalt, kui teeksite seda ühe arvutiga.

Tarkvara liht­sus­tab hajutatud ra­ken­duste pai­gal­da­mist ja haldamist ning au­to­ma­ti­see­rib selliseid üles­an­deid nagu res­surs­side haldamine, ajas­ta­mine ja prot­ses­si­de­va­he­line suhtlus. D2iQ DC/OS-il põhineva klastri ja selle kaas­ne­vate teenuste haldamine toimub keskse kä­su­reaprog­rammi (CLI) või vee­bi­lii­d­ese (GUI) kaudu.

DC/OS eraldab klastri ressursid ning pakub jagatud teenuseid, nagu teenuste avas­ta­mine või pakettide haldus. Tarkvara põ­hi­kom­po­nen­did töötavad kaitstud kesk­kon­nas – tuu­ma­ker­nee­lis. Sinna kuuluvad Mesos-platvormi juht- ja agen­di­prog­ram­mid, mis vas­tu­ta­vad res­surs­side jaotamise, prot­ses­side eral­da­mise ja tur­be­funkt­sioo­nide eest.

  • Mesos-master: Mesos-master on master-sõlmes töötav juht­prot­sess. Mesos-masteri ülesanne on juhtida res­surs­side haldamist ja koor­di­nee­rida agent-sõlmes täi­de­ta­vaid üles­an­deid (abst­rakt­seid tööühi­kuid). Selleks jaotab Mesos-master ressursse re­gist­ree­ri­tud DC/OS-tee­nus­tele ja võtab vastu res­sur­si­aru­an­deid Mesos-agen­ti­delt.
  • Mesos-agendid: Mesos-agendid on prot­ses­sid, mis töötavad agendi kontodel ja vas­tu­ta­vad masteri poolt jaotatud üles­an­nete täitmise eest. Mesos-agendid edastavad Mesos-masterile re­gu­laar­selt aruandeid klastris kät­te­saa­da­vate res­surs­side kohta. Mesos-master edastab need edasi pla­nee­ri­jale (nt Marathon, Chronos või Cassandra). See otsustab, millist ülesannet millisel sõlmel täita. Seejärel täi­de­takse ülesanded iso­lee­ri­tult kon­tei­ne­ris.

Kõik muud süs­tee­mi­kom­po­nen­did ning ra­ken­dused, mida Mesose agendid käitavad executori kaudu, töötavad ka­su­ta­ja­ruumis. Stan­dardse DC/OS-i ins­tal­lat­siooni põ­hi­kom­po­nen­did on admin-ruuter, Mesose DNS, hajutatud DNS-proksi, koormuse jaotaja Minuteman, ajastaja Marathon, Apache ZooKeeper ja Exhibitor.

  • Admin-ruuter: admin-ruuter on spet­siaal­selt kon­fi­gu­ree­ri­tud NGINX-põhine vee­bi­ser­ver, mis pakub DC/OS-teenuseid ning täidab keskse au­ten­ti­mise ja prok­si­funkt­sioone.
  • Mesos DNS: süs­tee­mi­kom­po­nent Mesos DNS pakub teenuste avas­ta­mise funkt­sioone, mis või­mal­da­vad klastri üksikutel teenustel ja ra­ken­dus­tel üksteist tuvastada keskse do­mee­nini­mede süsteemi (DNS) kaudu.
  • Jaotatud DNS-proksi: jaotatud DNS-proksi on sisemine DNS-dis­pa­tc­her.
  • Minuteman: süs­tee­mi­kom­po­nent Minuteman toimib sisemise koormuse ta­sa­kaa­lus­ta­jana, mis töötab OSI vii­te­mu­deli trans­por­di­ki­his (4. kiht).
  • DC/OS Marathon: Marathon on Mesos-platvormi keskne komponent, mis toimib D2iQ DC/OS-is alg­laa­di­mis­süs­tee­mina (sarnaselt systemd-ga). Marathon käivitab ja jälgib DC/OS-i teenuseid ja rakendusi klastri kesk­kon­da­des. Lisaks pakub tarkvara kõrge kät­te­saa­da­vuse funkt­sioone, teenuste avas­ta­mist, koormuse jaotamist, ter­vi­se­kont­rolle ja graa­fi­list vee­bi­lii­dest.
  • Apache ZooKeeper: Apache ZooKeeper on avatud läh­te­koo­diga tark­va­ra­kom­po­nent, mis pakub koor­di­nee­ri­mis­funkt­sioone ra­ken­duste töö­ta­miseks ja juh­ti­miseks hajutatud süs­teemi­des. Zoo­Kee­pe­rit ka­su­ta­takse D2iQ DC/OS-is kõigi ins­tal­li­tud süs­tee­mi­tee­nuste koor­di­nee­ri­miseks.
  • Exhibitor: Exhibitor on süs­tee­mi­kom­po­nent, mis ins­tal­li­takse ja kon­fi­gu­ree­ri­takse au­to­maat­selt koos Zoo­Kee­periga igasse master-sõlme. Exhibitor pakub ka graa­fi­list ka­su­ta­ja­lii­dest Zoo­Kee­peri ka­su­ta­ja­tele.

DC/OSi kaudu koondatud klastri res­surs­si­del on võimalik sa­ma­aeg­selt täita mit­me­su­gu­seid töö­koor­musi. See võimaldab näiteks suurand­me­süs­teemide, mik­ro­tee­nuste või kon­tei­nerplat­vormide (nt Hadoop, Spark ja Docker) pa­ral­leel­set töötamist klastri ope­rat­sioo­ni­süs­tee­mis.

D2iQ Uni­ver­su­mis on DC/OS-i jaoks saadaval avalik ra­ken­duste kataloog. Selle abil saate pai­gal­dada rakendusi nagu Spark, Cassandra, Chronos, Jenkins või Kafka lihtsalt graa­fi­lise ka­su­ta­ja­lii­d­ese kaudu klõpsates.

Millised Docker-töö­riis­tad on tur­va­li­suse ta­ga­miseks olemas?

Kuigi kon­tei­ne­ri­tes töötavad kap­sel­da­tud prot­ses­sid jagavad sama tuuma, kasutab Docker mitmeid meetodeid nende üks­tei­sest eral­da­miseks. Selleks ka­su­ta­takse ta­va­li­selt Linuxi tuuma põ­hi­funkt­sioone, nagu Cgroups ja Na­mes­paces.

Kon­tei­ne­rid ei paku siiski veel sama tasemel iso­lat­siooni, mida on võimalik saavutada vir­tuaal­ma­si­nate abil. Hoolimata iso­lat­sioo­ni­mee­to­dite ka­su­ta­mi­sest on olu­lis­tele põ­hisüs­teemi­dele, nagu Cgroups, ning /sys ja /proc ka­ta­loo­gi­des asuvatele tuuma­lii­des­tele võimalik juurde pääseda ka kon­tei­ne­rite kaudu.

Dockeri aren­dus­mees­kond on tun­nis­ta­nud, et need tur­va­li­su­sega seotud prob­lee­mid ta­kis­ta­vad kon­tei­ne­ri­teh­no­loo­gia ka­su­tuse­le­võttu toot­mis­kesk­kon­da­des. Lisaks Linuxi tuuma põ­hi­lis­tele iso­lee­ri­mis­mee­to­di­tele toetavad Docker Engine’i uuemad ver­sioo­nid ka raa­mis­tikke AppArmor, SELinux ja Seccomp, mis toimivad tuum­res­surs­side jaoks omamoodi tu­le­müü­rina.

  • AppArmor: AppArmori abil re­gu­lee­ri­takse kon­tei­ne­rite juur­de­pää­su­õi­gusi fai­li­süs­teemi­dele.
  • SELinux: SELinux pakub keerukat re­gu­lee­ri­mis­süs­teemi, mille abil on võimalik rakendada juur­de­pääsu kontrolli põ­hi­res­surs­si­dele.
  • Seccomp: Seccomp (Secure Computing Mode) jälgib süs­tee­mi­kut­sete käi­vi­ta­mist.

Lisaks nendele Docker-töö­riis­ta­dele kasutab Docker ka Linuxi funkt­sioone, et piirata root-õigusi, millega Docker Engine kon­tei­ne­rid käivitab.

Lisaks on olemas ka muud tur­va­li­su­sega seotud prob­lee­mid, mis puu­du­ta­vad Docker-registri kaudu le­vi­ta­ta­vate ra­ken­dus­kom­po­nen­tide tark­va­ra­lisi haa­va­ta­vusi. Kuna põ­hi­mõt­te­li­selt igaüks saab luua Docker-pilte ja teha need Docker Hubis ko­gu­kon­nale avalikult kät­te­saa­da­vaks, on pildi al­la­laa­di­misel oht, et teie süsteemi satub pa­ha­taht­lik kood. Enne rakenduse ka­su­tuse­le­võttu peaksid Docker-kasutajad veenduma, et kogu pildis kon­tei­ne­rite käi­vi­ta­miseks sisalduv kood pärineb usal­dus­väär­sest allikast.

Docker pakub kin­ni­tus­prog­rammi, mille abil tark­va­ra­toot­jad saavad oma Docker-pildid kont­rol­lida ja kinnitada lasta. Selle kin­ni­tus­prog­rammi abil soovib Docker aren­da­ja­tele liht­sus­tada oma pro­jek­ti­dele tur­valiste tarkvara tar­neahe­late loomist. Lisaks ka­su­ta­jate tur­va­li­suse suu­ren­da­misele on programmi eesmärk pakkuda tark­va­raa­ren­da­ja­tele võimalust eristada oma projekte paljude teiste kät­te­saa­da­vate res­surs­side hulgast. Ve­ri­fit­see­ri­tud pildid on mär­gis­ta­tud märgiga „Verified Publisher“ ja neile antakse muude eeliste kõrval ka kõrgem koht Docker Hubi ot­sin­gu­tu­le­mus­tes.

Go to Main Menu