GitOps: vilkÅ”anas un stumÅ”anas metožu salÄ«dzinÄjums
PiezÄ«me. tulk.: Kubernetes kopienÄ tendence, ko sauc par GitOps, gÅ«st acÄ«mredzamu popularitÄti, kÄ mÄs personÄ«gi esam redzÄjuÅ”i, apmeklÄjot KubeCon Europe 2019. Å is termins bija salÄ«dzinoÅ”i nesens izgudrots ko rakstÄ«jis Weaveworks vadÄ«tÄjs Aleksis RiÄardsons, un tas nozÄ«mÄ izstrÄdÄtÄjiem pazÄ«stamu rÄ«ku (galvenokÄrt Git, no tÄ arÄ« nosaukums) izmantoÅ”anu, lai atrisinÄtu darbÄ«bas problÄmas. Jo Ä«paÅ”i mÄs runÄjam par Kubernetes darbÄ«bu, saglabÄjot tÄs konfigurÄcijas Git un automÄtiski ievieÅ”ot klastera izmaiÅas. Å ajÄ rakstÄ Matiass Jg runÄ par divÄm pieejÄm Å”ai ievieÅ”anai.
PagÄjuÅ”ajÄ gadÄ, (patiesÄ«bÄ formÄli tas notika 2017. gada augustÄ ā aptuveni tulk.) Ir jauna pieeja lietojumprogrammu izvietoÅ”anai Kubernetes. To sauc par GitOps, un tÄ pamatÄ ir pamatideja, ka izvietoÅ”anas versijas tiek izsekotas Git repozitorija droÅ”ajÄ vidÄ.
Å Ä«s pieejas galvenÄs priekÅ”rocÄ«bas ir Å”Ädas::
IzvietoÅ”anas versiju izveide un izmaiÅu vÄsture. Visa klastera stÄvoklis tiek glabÄts Git repozitorijÄ, un izvietojumi tiek atjauninÄti tikai ar apÅemÅ”anos. TurklÄt visas izmaiÅas var izsekot, izmantojot saistÄ«bu vÄsturi.
AtcelÅ”ana, izmantojot pazÄ«stamÄs Git komandas... VienkÄrÅ”s git reset ļauj atiestatÄ«t izmaiÅas izvietojumos; pagÄtnes stÄvokļi vienmÄr ir pieejami.
GatavÄ piekļuves kontrole. Parasti Git sistÄmÄ ir daudz sensitÄ«vu datu, tÄpÄc lielÄkÄ daļa uzÅÄmumu pievÄrÅ” Ä«paÅ”u uzmanÄ«bu to aizsardzÄ«bai. AttiecÄ«gi Ŕī aizsardzÄ«ba attiecas arÄ« uz operÄcijÄm ar izvietoÅ”anu.
IzvietoÅ”anas politikas. LielÄkÄ daļa Git sistÄmu sÄkotnÄji atbalsta politiku katrÄ nozarÄ ā piemÄram, tikai piesaistes pieprasÄ«jumi var atjauninÄt galveno, un izmaiÅas ir jÄpÄrskata un jÄpieÅem citam komandas dalÄ«bniekam. TÄpat kÄ piekļuves kontrolei, uz izvietoÅ”anas atjauninÄjumiem attiecas tÄs paÅ”as politikas.
KÄ redzat, GitOps metodei ir daudz priekÅ”rocÄ«bu. PÄdÄjÄ gada laikÄ Ä«paÅ”u popularitÄti ieguvuÅ”as divas pieejas. Viens ir balstÄ«ts uz grÅ«dienu, otrs ir balstÄ«ts uz vilkÅ”anu. Pirms to aplÅ«koÅ”anas, vispirms apskatÄ«sim, kÄ izskatÄs tipiski Kubernetes izvietojumi.
IzvietoŔanas metodes
PÄdÄjos gados Kubernetes ir izveidojuÅ”Äs dažÄdas izvietoÅ”anas metodes un rÄ«ki:
Pamatojoties uz vietÄjÄm Kubernetes/Kustomize veidnÄm. Tas ir vienkÄrÅ”Äkais veids, kÄ Kubernetes izvietot lietojumprogrammas. IzstrÄdÄtÄjs izveido pamata YAML failus un lieto tos. Lai atbrÄ«votos no nepÄrtrauktas vienu un to paÅ”u veidÅu pÄrrakstÄ«Å”anas, tika izstrÄdÄta Kustomize (tas pÄrvÄrÅ” Kubernetes veidnes moduļos). PiezÄ«me. tulk.: Kustomize ir integrÄta kubectl ar Kubernetes izlaidums 1.14.
StÅ«res diagrammas. StÅ«res diagrammas ļauj izveidot veidÅu kopas, init konteinerus, blakusvÄÄ£us utt., ko izmanto, lai izvietotu lietojumprogrammas ar elastÄ«gÄkÄm pielÄgoÅ”anas opcijÄm nekÄ uz veidnÄm balstÄ«tÄ pieejÄ. Å Ä«s metodes pamatÄ ir veidÅu YAML faili. Helm aizpilda tos ar dažÄdiem parametriem un pÄc tam nosÅ«ta tos Tiller ā klastera komponentam, kas tos izvieto klasterÄ« un ļauj veikt atjauninÄjumus un atcelÅ”anu. SvarÄ«gi ir tas, ka Helms bÅ«tÄ«bÄ tikai ievieto vÄlamÄs vÄrtÄ«bas veidnÄs un pÄc tam piemÄro tÄs tÄdÄ paÅ”Ä veidÄ, kÄ tas tiek darÄ«ts tradicionÄlajÄ pieejÄ. (lasiet vairÄk par to, kÄ tas viss darbojas un kÄ varat to izmantot mÅ«su Helmas raksts ā apm. tulk.). Ir daudz dažÄdu gatavu Helm diagrammu, kas aptver plaÅ”u uzdevumu klÄstu.
AlternatÄ«vie rÄ«ki. Ir daudz alternatÄ«vu rÄ«ku. ViÅiem visiem ir kopÄ«gs tas, ka tie pÄrvÄrÅ” dažus veidÅu failus Kubernetes lasÄmos YAML failos un pÄc tam tos izmanto.
SavÄ darbÄ mÄs pastÄvÄ«gi izmantojam Helm diagrammas svarÄ«giem rÄ«kiem (jo tÄm jau ir gatavas daudzas lietas, kas padara dzÄ«vi daudz vieglÄku) un ātÄ«rosā Kubernetes YAML failus mÅ«su paÅ”u lietojumprogrammu izvietoÅ”anai.
Vilkt stumt
VienÄ no saviem nesenajiem emuÄra ierakstiem es iepazÄ«stinÄju ar Å”o rÄ«ku Weave Flux, kas ļauj ievietot veidnes Git repozitorijÄ un atjauninÄt izvietoÅ”anu pÄc katras konteinera apstiprinÄÅ”anas vai nospieÅ”anas. Mana pieredze liecina, ka Å”is rÄ«ks ir viens no galvenajiem pievilkÅ”anas pieejas veicinÄÅ”anÄ, tÄpÄc es uz to bieži atsaukÅ”os. Ja vÄlaties uzzinÄt vairÄk par to, kÄ to izmantot, skatiet Å”eit saite uz rakstu.
NB! Visas GitOps lietoÅ”anas priekÅ”rocÄ«bas abÄm pieejÄm paliek nemainÄ«gas.
UzvilkŔanas pieeja
VilkÅ”anas pieeja ir balstÄ«ta uz faktu, ka visas izmaiÅas tiek piemÄrotas klasterÄ«. KlasterÄ« ir operators, kas regulÄri pÄrbauda saistÄ«tos Git un Docker reÄ£istra repozitorijus. Ja tajÄs notiek kÄdas izmaiÅas, klastera stÄvoklis tiek atjauninÄts iekÅ”Äji. Å is process parasti tiek uzskatÄ«ts par ļoti droÅ”u, jo nevienam ÄrÄjam klientam nav piekļuves klastera administratora tiesÄ«bÄm.
Plusi:
Nevienam ÄrÄjam klientam nav tiesÄ«bu veikt izmaiÅas klasterÄ«; visi atjauninÄjumi tiek ieviesti no iekÅ”puses.
Daži rÄ«ki ļauj arÄ« sinhronizÄt Helm diagrammas atjauninÄjumus un saistÄ«t tos ar kopu.
Docker Registry var skenÄt, lai atrastu jaunas versijas. Ja ir pieejams jauns attÄls, Git repozitorijs un izvietoÅ”ana tiek atjauninÄti uz jauno versiju.
IzvilkÅ”anas rÄ«kus var izplatÄ«t dažÄdÄs nosaukumu telpÄs ar dažÄdÄm Git krÄtuvÄm un atļaujÄm. Pateicoties tam, var izmantot vairÄku Ä«rnieku modeli. PiemÄram, komanda A var izmantot nosaukumvietu A, komanda B var izmantot nosaukumvietu B, bet infrastruktÅ«ras komanda var izmantot globÄlo telpu.
KÄ likums, instrumenti ir ļoti viegli.
ApvienojumÄ ar tÄdiem instrumentiem kÄ operators Bitnami aizzÄ«mogotie noslÄpumi, noslÄpumus var glabÄt Å”ifrÄtus Git repozitorijÄ un izgÅ«t klasterÄ«.
Nav savienojuma ar CD cauruļvadiem, jo āāizvietoÅ”ana notiek klasterÄ«.
MÄ«nusi:
IzvietoÅ”anas noslÄpumu pÄrvaldÄ«ba no Helm diagrammÄm ir grÅ«tÄka nekÄ parastajÄm, jo āātie vispirms ir jÄÄ£enerÄ, piemÄram, aizzÄ«mogotu noslÄpumu veidÄ, pÄc tam tie jÄatÅ”ifrÄ iekÅ”Äjam operatoram, un tikai pÄc tam tie kļūst pieejami vilkÅ”anas rÄ«kam. PÄc tam varat palaist laidienu HelmÄ ar vÄrtÄ«bÄm jau izvietotajos noslÄpumos. VienkÄrÅ”Äkais veids ir izveidot noslÄpumu ar visÄm izvietoÅ”anai izmantotajÄm Helm vÄrtÄ«bÄm, atÅ”ifrÄt to un nodot Git.
Izmantojot vilkÅ”anas pieeju, jÅ«s kļūstat piesaistÄ«ts vilkÅ”anas instrumentiem. Tas ierobežo iespÄju pielÄgot izvietoÅ”anas procesu klasterÄ«. PiemÄram, Kustomize sarežģī fakts, ka tai ir jÄpalaiž, pirms pÄdÄjÄs veidnes tiek nodotas Git. Es nesaku, ka nevar izmantot atseviŔķus rÄ«kus, taÄu tos ir grÅ«tÄk integrÄt izvietoÅ”anas procesÄ.
UzspieŔanas pieeja
Izmantojot push pieeju, ÄrÄja sistÄma (galvenokÄrt CD konveijeri) uzsÄk izvietoÅ”anu klasterÄ« pÄc Git repozitorija saistÄ«bu izpildes vai ja iepriekÅ”Äjais CI konveijers ir veiksmÄ«gs. Å ajÄ pieejÄ sistÄmai ir piekļuve klasterim.
Plusi:
DroŔību nosaka Git repozitorijs un bÅ«vÄÅ”anas cauruļvads.
Helm diagrammu izvietoÅ”ana ir vienkÄrÅ”Äka un atbalsta Helm spraudÅus.
NoslÄpumus ir vieglÄk pÄrvaldÄ«t, jo noslÄpumus var izmantot konveijeros, un tos var arÄ« glabÄt Å”ifrÄtÄ veidÄ Git (atkarÄ«bÄ no lietotÄja vÄlmÄm).
Nav savienojuma ar konkrÄtu rÄ«ku, jo var izmantot jebkura veida.
Konteinera versijas atjauninÄjumus var uzsÄkt bÅ«vÄÅ”anas konveijerÄ.
MÄ«nusi:
Klastera piekļuves dati atrodas bÅ«vÄÅ”anas sistÄmÄ.
IzvietoÅ”anas konteineru atjauninÄÅ”ana joprojÄm ir vienkÄrÅ”Äka, izmantojot vilkÅ”anas procesu.
Liela atkarÄ«ba no kompaktdisku sistÄmas, jo mums nepiecieÅ”amie cauruļvadi, iespÄjams, sÄkotnÄji tika rakstÄ«ti Gitlab Runners, un pÄc tam komanda nolemj pÄriet uz Azure DevOps vai Jenkins... un tai bÅ«s jÄmigrÄ liels skaits bÅ«vniecÄ«bas cauruļvadu.
RezultÄti: stumt vai vilkt?
KÄ parasti, katrai pieejai ir savi plusi un mÄ«nusi. Dažus uzdevumus ir vieglÄk paveikt ar vienu un grÅ«tÄk ar citu. SÄkumÄ es veicu izvietoÅ”anu manuÄli, bet pÄc tam, kad atradu dažus rakstus par Weave Flux, es nolÄmu ieviest GitOps procesus visiem projektiem. Pamata veidnÄm tas bija vienkÄrÅ”i, bet tad man radÄs grÅ«tÄ«bas ar Helm diagrammÄm. Tolaik Weave Flux piedÄvÄja tikai elementÄru Helm Chart Operator versiju, taÄu pat tagad daži uzdevumi ir grÅ«tÄki, jo ir nepiecieÅ”ams manuÄli izveidot noslÄpumus un tos lietot. JÅ«s varÄtu iebilst, ka vilkÅ”anas pieeja ir daudz droÅ”Äka, jo klastera akreditÄcijas dati nav pieejami Ärpus klastera, padarot to tik daudz droÅ”Äku, ka ir vÄrts pielikt papildu pÅ«les.
Nedaudz pÄrdomÄjot, es nonÄcu pie negaidÄ«ta secinÄjuma, ka tas tÄ nav. Ja mÄs runÄjam par komponentiem, kuriem nepiecieÅ”ama maksimÄla aizsardzÄ«ba, Å”ajÄ sarakstÄ bÅ«s iekļauta slepenÄ krÄtuve, CI/CD sistÄmas un Git krÄtuves. Tajos esoÅ”Ä informÄcija ir ļoti neaizsargÄta, un tai nepiecieÅ”ama maksimÄla aizsardzÄ«ba. TurklÄt, ja kÄds nokļūst jÅ«su Git repozitorijÄ un var tur nosÅ«tÄ«t kodu, viÅÅ” var izvietot visu, ko vÄlas (neatkarÄ«gi no tÄ, vai tas ir pull vai push) un iefiltrÄties klastera sistÄmÄs. TÄdÄjÄdi vissvarÄ«gÄkie komponenti, kas ir jÄaizsargÄ, ir Git repozitorijs un CI/CD sistÄmas, nevis klastera akreditÄcijas dati. Ja jums ir labi konfigurÄtas politikas un droŔības vadÄ«klas Å”Äda veida sistÄmÄm un klasteru akreditÄcijas dati tiek iegÅ«ti tikai konveijeros kÄ noslÄpumi, papildu droŔība, ko nodroÅ”ina vilkÅ”anas pieeja, var nebÅ«t tik vÄrtÄ«ga, kÄ sÄkotnÄji tika uzskatÄ«ts.
TÄtad, ja vilkÅ”anas pieeja ir darbietilpÄ«gÄka un nesniedz droŔības priekÅ”rocÄ«bas, vai nav loÄ£iski izmantot tikai push pieeju? Bet kÄds varÄtu iebilst, ka push pieejÄ jÅ«s esat pÄrÄk piesaistÄ«ts CD sistÄmai, un, iespÄjams, labÄk to nedarÄ«t, lai nÄkotnÄ bÅ«tu vieglÄk veikt migrÄciju.
ManuprÄt (kÄ vienmÄr) jÄizmanto tas, kas ir vispiemÄrotÄkais konkrÄtajam gadÄ«jumam vai kombainam. PersonÄ«gi es izmantoju abas pieejas: Weave Flux izvietoÅ”anai, kas balstÄ«ta uz piesaisti, kas galvenokÄrt ietver mÅ«su paÅ”u pakalpojumus, un push pieeju ar Helm un spraudÅiem, kas atvieglo Helm diagrammu lietoÅ”anu klasterÄ« un ļauj nemanÄmi izveidot noslÄpumus. DomÄju, ka nekad nebÅ«s viena visiem gadÄ«jumiem piemÄrota risinÄjuma, jo vienmÄr ir daudz nianses un tÄs ir atkarÄ«gas no konkrÄtÄ pielietojuma. To sakot, es ļoti iesaku GitOps ā tas ievÄrojami atvieglo dzÄ«vi un uzlabo droŔību.
Es ceru, ka mana pieredze par Å”o tÄmu palÄ«dzÄs jums izlemt, kura metode ir piemÄrotÄka jÅ«su izvietoÅ”anas veidam, un es priecÄÅ”os dzirdÄt jÅ«su viedokli.
PS TulkotÄja piezÄ«me
IevilkÅ”anas modeļa negatÄ«vie aspekti ir tÄdi, ka ir grÅ«ti ievietot Git atveidotos manifestus, taÄu nav negatÄ«va, ka CD konveijera izvilkÅ”anas modelÄ« darbojas atseviŔķi no izlaiÅ”anas un bÅ«tÄ«bÄ kļūst par kategorijas konveijeru. NepÄrtraukta pieteikÅ”anÄs. TÄpÄc bÅ«s jÄpieliek vÄl lielÄkas pÅ«les, lai apkopotu to statusu no visÄm izvietoÅ”anÄm un kaut kÄdÄ veidÄ nodroÅ”inÄtu piekļuvi žurnÄliem/statusiem, vÄlams, atsaucoties uz CD sistÄmu.
Å ajÄ ziÅÄ push modelis ļauj mums nodroÅ”inÄt vismaz dažas izvÄrÅ”anas garantijas, jo cauruļvada kalpoÅ”anas laiku var pielÄ«dzinÄt izvÄrÅ”anas kalpoÅ”anas laikam.
IzmÄÄ£inÄjÄm abus modeļus un nonÄcÄm pie tÄdiem paÅ”iem secinÄjumiem kÄ raksta autors:
VilkÅ”anas modelis ir piemÄrots, lai organizÄtu sistÄmas komponentu atjauninÄjumus daudzos klasteros (sk. raksts par papildinÄjumu operatoru).
Push modelis, kura pamatÄ ir GitLab CI, ir labi piemÄrots lietojumprogrammu izvÄrÅ”anai, izmantojot Helm diagrammas. TajÄ paÅ”Ä laikÄ, izmantojot rÄ«ku, tiek uzraudzÄ«ta izvietoÅ”anas izvÄrÅ”ana cauruļvados werf. Starp citu, Ŕī mÅ«su projekta kontekstÄ mÄs dzirdÄjÄm pastÄvÄ«go āGitOpsā, kad savÄ stendÄ KubeCon Europe'19 apspriedÄm DevOps inženieru aktuÄlÄs problÄmas.