Kasutaja:Mjaago/Kubernetes

Kubernetes (tavaliselt nimetatud ka kui K8s) on avaliku lähtekoodiga konteinerite haldussüsteem, mis automatiseerib konteineripõhiste rakenduse paigaldamist töökeskkonda, skaleeruvust ja haldust. Selle lõi algselt Google ja nüüd haldab seda Cloud Native Computing Foundation. Selle eesmärk on pakkuda platvormi, mis automatiseerib rakenduse paigaldust töökeskkonda, skaleeruvust ja toiminguid konteineritega üle klastrite.[1] See toetab mitmeid konteinerite abiriistu, nende hulgas ka Dockerit.[2]

Ajalugu muuda

 
Google'i Container Engine loeng Google Cloud kohtumisel

Kubernetesi (κυβερνήτης, kreeka keeles 'kuberner', 'tüürimees' või 'kapten') asutatas Joe Beda, Brendan Burns ja Craig McLuckie,[3] kellele lisandusid kiiresti Google'i inserid, sealhulgas Brian Grant ja Tim Hockin. Esimest korda teatas Google projektist 2014. aasta keskel.[4] Selle väljatöötamist ja disaini on tugevalt mõjutatud Google'i Borg süsteem[5][6] ning paljud selle projekti kallal töötajad töötasid enne projektis Borg.

Kubernetes v1.0 anti välja 21. juulil 2015.[7] Koos Kubernetes v1.0 väljatulekuga sai Google'i partneriks Linux Foundation, kellega koos nad asutasid Cloud Native Computing Foundationi (CNCF).[8]

Disain muuda

Kubernetese määravad ehitusplokid ("primitiivid"), mis üheskoos tagavad mehhanismi, mis paigaldab rakenduse töökeskkonda, tagab rakenduse jätkusuutlikuse ja skaleeruvuse arvestades mälukasutust ning CPU hõivatust.[9]

Podid muuda

Põhiline üksus Kuberneteses on pod. See tagab kõrgema üldistuse, jaotades konteineritel põhinevate rakenduste komponente kogumitesse. Pod koosneb ühest või mitmest konteinerist, mis toimivad peremees-masinas koos ja jagavad ressursse. Igal podil on klastris unikaalne IP-aadress, mis võimaldab rakendusel kasutada porte konfliktidevabalt.[10] Pode saab juhtida käsitsi läbi Kubernetese API või lastes Kubernetese kontrollsüsteemil pode hallata.[11]

Labelid ja selectorid muuda

Labelid ja selectorid on peamine rühmitamismehhanism Kuberneteses. See määrab, milliseid toiminguid tuleks erinevatel komponentidel jooksutada.[12]

Näiteks leidub süsteem, kus rakenduse podidel on labelid nimedega tier (väärtustega front-end, back-end) ja release_track (väärtustega canary, production). Sellise süsteemi toimingud, mida tehakse back-end ja canary instantsidel saavad kasutada vastavat label selectorit:[13]

tier=back-end AND release_track=canary

Kontrollerid muuda

Kontroller üritab tagada, et klastrid töötavad nii nagu nad peavad.[14] Seda saavutatakse podide kogumeid hallates. Üks selline kontroller on näiteks paljundamise kontroller, mis tagab vajalikkude podide paljundamise. See haldab veel asendavate podide loomist, kui olemasolevas rakenduse töö mingil põhjusel peatub. Milliseid pode kontroller haldab on määratud podide label selectoritest, mis on määratud juba kontrolleri loomisel.[13]

Teenused muuda

Kubernetese teenus on podide kogum, mis töötavad koos. Podide kogumi, mis moodustavad rakenduse, määravad ära label selectorid. Kubernetes pakub ka võrgukoormuse jaotajat, mis toimib round-robin algoritmil ja jagab ühtlaselt koormuse sobivate labelitega podide vahel. Vaikimisi on teenused avalikud ainult klastrite siseselt (näiteks kui front-end tahab back-endiga suhelda), kuid on ka võimalus teha teenus kättesaadavaks väljaspoolt, et teha avalikuks näiteks rakenduse front-end.[15]

Arhitektuur muuda

 
Kubernetese arhitektuuri skeem

Kubernetese kontrollpaneel (Kubernetes Master) muuda

Kubernetes Master on peamine klastrit kontrolliv üksus, mis haldab klastrite töökoormust ja juhib suhtlust üle kogu süsteemi. Kubernetese kontrollpaneel sisaldab erinevaid komponente, millel on igal ühel oma protsess ja need võivad joosta nii ühel master instantsil, kui ka mitmel, mis pakub tuge ka kõrge kättesaadavusega klastritele.[16] Kubernetese kontrollpaneeli erinevad komponendid on järgmised:

etcd muuda

etcd on püsiv, kergekaaluline, hajus võti-väärtus andmehoidla, mille töötas välja CoreOS. See salvestab usaldusväärselt klastri seadistusandmed, mis esindavad klastri üldist seisundit igal antud ajahetkel.[16]

API server muuda

API server on oluline komponent, mis pakub liidest Kubernetese API-le, kasutades JSON formaati üle HTTP.[17] API server töötleb ja valideerib REST päringuid ja uuendab API objektide seisundit etcd-s.[11]

Planeerija (Scheduler) muuda

Planeerija on väljalülitatav komponent, mis valib ressursside põhjal millistel instantsidel pod peaks jooksma. Planeerija jälgib ressursside kasutust instantsidel, et tagada töökoormuse ühtlast jaotust. Sellel eesmärgil on planeerijal vaja teada ressursivajadusi ja ressursside kättesaadavust. Lühidalt on planeerija roll määrata ressursse vastavalt vajadusele.[18]

Kontrollerite haldaja (Controller Manager) muuda

Kontrollerite haldaja on protsess, mis jooksutab Kubernetese tuum-kontrolloreid, milleks on näiteks DaemonSet kontroller ja paljundamise kontroller.[17]

Kubernetese instants (Kubernetes Node) muuda

Instants, tuntud ka kui töötaja või minion, on masin, kuhu konteinerid tööle pandud. Igat instantsi peab klastris jooksutama runtime süsteem nagu näiteks Docker.[19]

Kubelet muuda

Kubelet vastutab iga jooksva instantsi seisundi eest, mis tagab rakendusele terved konteinerid. See hoolitseb konteinerite käivitamise, peatamise ja jätkusuutlikuse eest.

Kubelet jälgib podi seisundit ning kui see ei ole see, mida on tahetud, siis paigaldatakse töökeskkonda uus pod samal instantsil. Instantsi staatust kuvatakse iga mõne sekundi järel, saates välja selleks mõeldud sõnumeid. Kui master avastab, et instants ei tööta, tagab replikatsioonikontroller, et puuduolevad podid käivitataks tervel instantsil.[20]

Konteiner muuda

Konteiner asub podi sees. Konteiner on mikroteenuse madalaim tase, mis hoiab endas jooksvat rakendust ja sellega seotud sõltuvusi kolmanda osapoolte rakendustega. Konteinereid saab teha väljastpoolt kättesaadavaks läbi välise IP-aadressi.[21]

Kube-puhverserver muuda

Kube-puhverserver on võrgu puhverserver ja koormusejaotaja. See on vastutav võrguliikluse marsruutimise eest vastavasse konteinerisse.[11]

Viited muuda

  1. "What is Kubernetes?". Kubernetes. Vaadatud 31.03.2017.
  2. Tim Allclair. "Kubernetes v1.12: Introducing RuntimeClass". kubernetes.io. Vaadatud 02.12.2018.
  3. "Google Made Its Secret Blueprint Public to Boost Its Cloud" (Ameerika inglise). Originaali arhiivikoopia seisuga 01.07.2016. Vaadatud 27.06.2016. {{cite web}}: eiran tundmatut parameetrit |deadurl=, kasuta parameetrit (|url-status=) (juhend)
  4. "Google Open Sources Its Secret Weapon in Cloud Computing". Wired. Originaali arhiivikoopia seisuga 30.11.2018. Vaadatud 30.11.2018. {{cite web}}: eiran tundmatut parameetrit |deadurl=, kasuta parameetrit (|url-status=) (juhend)
  5. Abhishek Verma; Luis Pedrosa; Madhukar R. Korupolu; David Oppenheimer; Eric Tune; John Wilkes (2015). "Large-scale cluster management at Google with Borg". Proceedings of the European Conference on Computer Systems (EuroSys). Originaali arhiivikoopia seisuga 27.07.2017. {{cite journal}}: eiran tundmatut parameetrit |deadurl=, kasuta parameetrit (|url-status=) (juhend)
  6. "Borg, Omega, and Kubernetes - ACM Queue". queue.acm.org. Originaali arhiivikoopia seisuga 09.07.2016. Vaadatud 30.11.2018. {{cite web}}: eiran tundmatut parameetrit |deadurl=, kasuta parameetrit (|url-status=) (juhend)
  7. "As Kubernetes Hits 1.0, Google Donates Technology To Newly Formed Cloud Native Computing Foundation". TechCrunch. Originaali arhiivikoopia seisuga 30.11.2018. Vaadatud 30.11.2018. {{cite web}}: eiran tundmatut parameetrit |deadurl=, kasuta parameetrit (|url-status=) (juhend)
  8. "Cloud Native Computing Foundation". Originaali arhiivikoopia seisuga 03.07.2017. {{cite web}}: eiran tundmatut parameetrit |deadurl=, kasuta parameetrit (|url-status=) (juhend)
  9. Priyanka Sharma. "Automaatne skaleeruvus" (English).{{netiviide}}: CS1 hooldus: tundmatu keel (link)
  10. Langemak, Jon (11.02.2015). "Kubernetes 101 – Networking". Das Blinken Lichten. Originaali arhiivikoopia seisuga 25.10.2015. Vaadatud 02.11.2015. {{cite web}}: eiran tundmatut parameetrit |deadurl=, kasuta parameetrit (|url-status=) (juhend)
  11. 11,0 11,1 11,2 Ellingwood, Justin (30.11.2018). "An Introduction to Kubernetes". DigitalOcean (inglise). Originaali (html) arhiivikoopia seisuga 30. november 2018. Vaadatud 30.11.2018. One of the most important master services is an API server. This is the main management point of the entire cluster as it allows a user to configure Kubernetes' workloads and organizational units. It is also responsible for making sure that the etcd store and the service details of deployed containers are in agreement. It acts as the bridge between various components to maintain cluster health and disseminate information and commands.
  12. Surana, Ramit (16.09.2015). "Containerizing Docker on Kubernetes". LinkedIn. Vaadatud 02.11.2015.
  13. 13,0 13,1 "Intro: Docker and Kubernetes training - Day 2". Red Hat. 20.10.2015. Originaali arhiivikoopia seisuga 29.10.2015. Vaadatud 02.11.2015. {{cite web}}: eiran tundmatut parameetrit |deadurl=, kasuta parameetrit (|url-status=) (juhend)
  14. "Overview of a Replication Controller". Documentation. CoreOS. Originaali arhiivikoopia seisuga 22.09.2015. Vaadatud 02.11.2015. {{cite web}}: eiran tundmatut parameetrit |deadurl=, kasuta parameetrit (|url-status=) (juhend)
  15. Langemak, Jon (15.02.2015). "Kubernetes 101 – External Access Into The Cluster". Das Blinken Lichten. Originaali arhiivikoopia seisuga 26.10.2015. Vaadatud 02.11.2015. {{cite web}}: eiran tundmatut parameetrit |deadurl=, kasuta parameetrit (|url-status=) (juhend)
  16. 16,0 16,1 "Kubernetes Infrastructure". OpenShift Community Documentation. OpenShift. Originaali arhiivikoopia seisuga 30.11.2018. Vaadatud 30.11.2018. {{cite web}}: eiran tundmatut parameetrit |deadurl=, kasuta parameetrit (|url-status=) (juhend)
  17. 17,0 17,1 Marhubi, Kamal (26.09.2015). "Kubernetes from the ground up: API server". kamalmarhubi.com. Originaali arhiivikoopia seisuga 29.10.2015. Vaadatud 02.11.2015. {{cite web}}: eiran tundmatut parameetrit |deadurl=, kasuta parameetrit (|url-status=) (juhend)
  18. "The Three Pillars of Kubernetes Container Orchestration - Rancher Labs". rancher.com. 18.05.2017. Originaali arhiivikoopia seisuga 30.11.2018. Vaadatud 30.11.2018. {{cite web}}: eiran tundmatut parameetrit |deadurl=, kasuta parameetrit (|url-status=) (juhend)
  19. "Kubernetes nodes". kubernetes.io. 06.11.2018.
  20. Marhubi, Kamal (27.08.2015). "What [..] is a Kubelet?". kamalmarhubi.com. Originaali arhiivikoopia seisuga 13.11.2015. Vaadatud 02.11.2015. {{cite web}}: eiran tundmatut parameetrit |dead-url=, kasuta parameetrit (|url-status=) (juhend)
  21. Yifan Gu, Josh Wood. "rktnetes brings rkt container engine to Kubernetes". kubernetes.io. Vaadatud 02.12.2018.