Tere, minu nimi on Dmitri Krasnov. Olen juba ĂŒle viie aasta tegelenud Kubernetes klastrite haldamise ja keerukate mikroteenuste arhitektuuride loomisega. Sel aasta alguses kĂ€ivitasime Kubernetes klastrihalduse teenuse Containerumi alusel. Kasutades seda vĂ”imalust, rÀÀgin, mis Kubernetes on ja kuidas integreerimine vendoriga erineb avatud lĂ€htekoodiga lahendusest.
Alustuseks, mis on . See on sĂŒsteem, mis haldab konteinerite suurt hulka hoste. Kreeka keeles tĂ”lgituna tĂ€hendab see "piloot" vĂ”i "ruuner". Algusest peale on see vĂ€lja töötatud Google'i poolt, pĂ€rast mida on see tehnoloogilise panusena antud Cloud Native Computing Foundation'ile, rahvusvahelisele mittetulunduslikule organisatsioonile, mis ĂŒhendab juhtivaid maailmatasemel arendajaid, lĂ”ppkasutajaid ja konteineritehnoloogiate pakkujaid.

Haldada suurt hulka konteinerite
NĂŒĂŒd vaatame, mis need konteinerid on. Need on rakendused koos nende keskkonnaga â enamasti teekidega, millest sĂ”ltub programmi töö. KĂ”ik see on pakkida arhiividesse ja esindada kujul pilti, mida saab kĂ€ivitada sĂ”ltumata operatsioonisĂŒsteemist, testida ja muu hulgas. Kuid probleem on see, et konteinerite haldamine suure hulga hostide peal on vĂ€ga keeruline. SeetĂ”ttu loodi Kubernetes.
Konteineri pilt koosneb rakendusest ja selle sĂ”ltuvustest. Rakendus, selle sĂ”ltuvused ja operatsioonisĂŒsteemi failisĂŒsteemi pilt asuvad erinevates piltide osades, nn kihtides. Kihti saab taaskasutada erinevate konteinerite jaoks. NĂ€iteks vĂ”ib kĂ”igi ettevĂ”tte rakenduste jaoks kasutada baasikihti Ubuntu. Konteinerite kĂ€ivitamisel pole vaja hostis hoida mitmeid koopiaid ĂŒhest baasikihist. See vĂ”imaldab optimeerida piltide sĂ€ilitamist ja edastamist.
Kuna me tahame rakendust konteinerist kĂ€ivitada, ladustatakse vajalikud kihid ĂŒksteise peale ja luuakse overlay failisĂŒsteem. Ălemisele kihile kirjutatakse kiht, mis peatamisel kustutatakse. See tagab, et konteineri kĂ€ivitamisel on rakendusel alati sama keskkond, mida ei saa muuta. See tagab keskkonna taasesitatavuse erinevatel host-operatsioonisĂŒsteemidel. Olenemata sellest, kas tegu on Ubuntu vĂ”i CentOS'iga, on keskkond alati sama. Lisaks on konteiner isoleeritud hostist Linuxi kerneli sisseehitatud mehhanismide abil. Kasti rakendused ei nĂ€e hosti ja naaberkonteinerite faile ega protsesse. Selline rakenduste isoleerimine host-operatsioonisĂŒsteemist annab tĂ€iendava turvakihi.
Konteinerite haldamiseks hostil on olemas mitmesuguseid tööriistu. KĂ”ige populaarsem neist on Docker. See vĂ”imaldab tagada konteinerite tĂ€islĂ€biviimisprotsessi. Kuid see töötab ainult ĂŒhel hostil. Kui on vaja hallata konteinereid mitmel hostil, vĂ”ib Docker inseneride elu tĂ”eliselt keeruliseks muuta. SeetĂ”ttu loodi Kubernetes.
Kubernetes'e nĂ”udlikkus tuleneb vĂ”imalusest hallata konteineri gruppe mitmel hostil kui ĂŒhiseid ĂŒksusi. SĂŒsteemi populaarsus tagab vĂ”imaluse luua DevOps vĂ”i Development Operations, kus Kubernetes't kasutatakse DevOpsi protsesside kĂ€ivitamiseks.

Joonis 1. Scheem Kubernetes'e tööpÔhimÔttest
TĂ€ielik automatiseerimine
DevOps tĂ€histab pĂ”himĂ”tteliselt arenduse automatiseerimist. Lihtsalt öeldes, kirjutavad arendajad koodi, mis laaditakse reposse. SeejĂ€rel vĂ”ib seda koodi automaatselt kasutada kohe konteineris koos kĂ”igi raamatukogudega, testida ja "vĂ€lja lasta" jĂ€rgmistesse etappidesse â Staging, ja seejĂ€rel otse ka Productionisse.
Koos Kubernetes, DevOps vĂ”imaldab automatiseerida selle protsessi, et see toimuks peaaegu ilma arendajate vahelesegamiseta. Selle tĂ”ttu kiireneb kogumine oluliselt, kuna arendajal ei pea olema vajadust seda oma arvutis teha â ta kirjutab lihtsalt koodi, laadib koodi hoidlasse ja seejĂ€rel kĂ€ivitatakse pipeline, mis vĂ”ib sisaldada kogumise, testimise ja juurutamise protsessi. Ja see toimub iga commit'i korral, seega testimine toimub pidevalt.
Samas vĂ”imaldab konteinerite kasutamine olla kindel, et kogu selle programmi keskkond siseneb production'isse just sellises vormis, nagu seda on testitud. See tĂ€hendab, et ei tekki probleeme, nagu "testimise ajal olid ĂŒhed versioonid, production'is â teised, ja kui need peal, siis kĂ”ik purunes." Kuna tĂ€napĂ€eval on meil trend mikroteenuste arhitektuurile, kus ĂŒhe hiigelrakenduse asemel on kahesaja vĂ€ikese rakenduse seas, vajaks nende kĂ€sitsi haldamiseks tohutut töötajate arvu. SeepĂ€rast kasutamegi Kubernetes't.
Plussid, plussid, plussid
Kui rÀÀkida Kubernetes'e plussidest platvormina, siis tal on mÀrkimisvÀÀrsed eelised mikroteenuste arhitektuuri haldamise seisukohalt.
- Paljude replikate haldamine. Oluline on konteinerite haldamine paljude hostide peal. Ja mis veelgi olulisem â rakenduste mitme replikate haldamine konteinerites kui ĂŒhtse ĂŒksusena. TĂ€nu sellele ei pea insenerid hoolima iga ĂŒksiku konteineri kĂ€imisest. Kui ĂŒks konteiner kukub, nĂ€eb Kubernetes seda ja kĂ€ivitab selle uuesti.
- Klastri vĂ”rk. Kubernetesel on samuti nii öeldud klastrivĂ”rk oma aadressiruumi. TĂ€nu sellele on igal pod'il oma aadress. Pod on klastris minimaalne struktuuriĂŒksus, kus konteinerid kĂ€ivitatakse. Lisaks on Kubernetesel funktsioon, mis ĂŒhendab endas koormuse jaotaja ja teenuse avastamise. See vĂ”imaldab vabastada IP-aadresside kĂ€sitsi haldamise ĂŒlesande Kubernetes'i Ă”lgadele. Ja automaatsed tervise kontrollid aitavad probleemide avastamisel ning suunavad liikluse toimivatele pod'idele.
- Konfiguratsioonide haldamine. Suure hulga rakenduste haldamisel muutub rakenduse konfiguratsiooni haldamine keeruliseks. Selleks on Kuberneteses olemas spetsiaalsed ConfigMap ressursid. Need vĂ”imaldavad keskse hoidla kaudu konfiguratsioonide salvestamist ja nende sisestamist podsides rakenduste kĂ€ivitamisel. Selline mehhanism tagab konfiguratsiooni jĂ€rjepidevuse, olgu need siis kĂŒmme vĂ”i sada rakenduse koopiat.
- PĂŒsiv maht. Konteinerid on oma olemuselt muutumatud ning konteineri peatamisel hĂ€vitatakse kĂ”ik failisĂŒsteemi salvestatud andmed. Kuid mĂ”ned rakendused salvestavad andmeid otse ketastele. Selle probleemi lahendamiseks on Kuberneteses vĂ”imalus haldada ketta salvestust â PĂŒsivad mahud. See mehhanism kasutab vĂ€liseid andmesalvestusi, vĂ”ib edastada konteineritesse pĂŒsivat, plokki- vĂ”i failipĂ”hist salvestust. Selline lahendus vĂ”imaldab andmeid hoida eraldi töötlusmasinatest, mis pÀÀstab need nende rikke korral.
- Koormuse tasakaalustaja. Kuigi Kuberneteses hallatakse mehaanilisi ĂŒksusi, nagu Deployment, StatefulSet jne, kĂ€ivituvad konteinerid lĂ”ppkokkuvĂ”ttes tavapĂ€rastes virtuaalmasinaid vĂ”i fĂŒĂŒsilistes serverites. Need pole ideaalsed ja vĂ”ivad igal hetkel ebaĂ”nnestuda. Kubernetes mĂ€rkab seda ja suunab sisetrafiku teistele koopiatele. Aga mis juhtub vĂ€lise liiklusega? Kui suunata liiklus lihtsalt ĂŒhe töötaja poole, siis mis juhtub, kui see kukub? Teenus muutub ju kĂ€ttesaamatuks. Selle probleemi lahendamiseks on Kuberneteses saadaval Load Balancer tĂŒĂŒpi teenused. Need on mĂ”eldud vĂ€lise pilve tasakaalustaja automaatseks konfigureerimiseks kĂ”ikidele töötajatele klastris. See vĂ€line tasakaalustaja suunab vĂ€lise liikluse töötajatele ning jĂ€lgib nende seisundit. Kui ĂŒks vĂ”i mitu töötajat muutuvad kĂ€ttesaamatuks, suunatakse liiklus teistele. See vĂ”imaldab luua kĂ”rge kĂ€ttesaadavusega teenuseid Kubernetesega.
Kubernetes nĂ€itab end parimal moel mikroteenuste arhitektuuride kĂ€ivitamisel. SĂŒsteemi rakendamine klassikalisse arhitektuuri on vĂ”imalik, kuid mĂ”ttetu. Kui rakendus ei saa töötada mitmes koopias, siis mis mĂ”tet on â kas Kuberneteses vĂ”i mitte?
Avatud lÀhtekoodiga Kubernetes
Avohanked Kubernetes on suurepĂ€rane: paigaldad ja see töötab. Sa saad seda kĂ€ivitada oma fĂŒĂŒsilistel serveritel, oma infrastruktuuris, paigaldada master ja worker'id, kus kĂ”ik rakendused kĂ€ivitatakse. Ja kĂ”ige parem â kĂ”ik see on tasuta. Kuid on mĂ”ned nĂŒansid.
- Esimene nĂŒanss on administraatorite ja inseneride teadmiste ja kogemuste nĂ”udlikkus, kes neid kĂ”ik tootavad ja haldavad. Kuna klient saab klastris tĂ€ieliku vabaduse, vastutab ta klastri töökindluse eest ise. Siin on kĂ”ik vĂ€ga lihtsalt purunev.
- Teine nĂŒanss on integratsioonide puudumine. Kui kĂ€ivitada Kubernetes, ilma et oleks mingit populaarset virtualiseerimisplatvormi, ei saa sa kĂ”iki programmi eeliseid. Nagu nĂ€iteks Persistent Volumes'i ja Load balancer'i teenuste kasutamine.

Joonis 2. k8s arhitektuur
Kubernetes tarnijalt
Integratsioon pilveteenuse pakkujaga annab kaks vÔimalust:
- Esiteks, inimene saab lihtsalt vajutada nuppu "loo klaster" ja saada juba seadistatud ja tööks valmis klastri.
- Teiseks, tarnija paigaldab klastrit ja seadistab integratsiooni pilvega.
Kuidas see meil toimub. Insener, kes klastrit kĂ€ivitab, nĂ€itab, kui palju tal vaja worker'eid on ja milliste parameetritega (nĂ€iteks, 5 worker'it, igaĂŒhel 10 CPU, 16 GB RAM-i ja ĂŒtleme 100 GB ketast). PĂ€rast seda saab ta juurdepÀÀsu juba loodud klastrile. Samal ajal kuuluvad koormust kĂ€ivitavad worker'id tĂ€ielikult kliendile, kuid kogu haldustasand jÀÀb tarnija vastutusalasse (juhul, kui teenust pakutakse haldetud teenuse mudelina).
Siiski, sellisel lÀhenemisel on oma puudused. Kuna haldustasand jÀÀb tarnijale, ei anna tarnija kliendile tÀielikku ligipÀÀsu, mis vÀhendab Kubernetesega töötamise paindlikkust. MÔnikord juhtub, et klient soovib Kubernetesega integreerida mingi spetsiifilise funktsionaalsuse, nÀiteks LDAP kaudu autentimine, kuid haldustasandi konfiguratsioon ei luba seda.

Joonis 3. NĂ€ide Kubernetes klastrist pilveteenuse pakkujalt
Mida valida: avatud lÀhtekood vÔi tarnija lahendus
Nii, avatud lÀhtekoodiga Kubernetes vÔi kaubanduslik? Kui valida avatud lÀhtekoodiga Kubernetes, siis kasutaja saab teha sellega, mida soovib. Kuid on suur risk endale jalga tulistada. Kaubanduslikus versioonis on see keerulisem, kuna kÔik on ettevÔttes pÔhjalikult lÀbimÔeldud ja seadistatud. Avatud lÀhtekoodiga Kubernetes'e suurimaks puuduseks on nÔudmised spetsialistidele. Kaubanduslikus versioonis on ettevÔte sellest peavalust vabastatud, kuid peab otsustama, kas maksta oma spetsialistidele vÔi kaubanduslikule pakkujale.


Noh, plusse on veel, miinuseid teatakse ka. Ăks asi jÀÀb muutumatuks: Kubernetes lahendab hulga probleeme, automatiseerides mitme konteineri haldamist. Millise valida, avatud lĂ€htekoodiga vĂ”i kaubanduslik, otsustab igaĂŒks ise.
Artiklit koostas Dmitri Krasnov, Containerumi teenuse peaarkitekt, #CloudMTS teenusepakkuja.
Allikas: habr.com
