MĂ€rkus tĂ”lke kohta.: Kubernetes'i kogukonnas on populaarsust saavutanud trend nimega GitOps, mille tĂ”husust oleme isiklikult nĂ€inud, KubeCon Europe 2019. See termin on suhteliselt hiljuti ettevĂ”tte Weaveworks juhtimisest â Alexis Richardson â ja viitab arendajatele tuttavate tööriistade (eelkĂ”ige Git, kust ka nimi) kasutamisele operatiivsete probleemide lahendamiseks. EelkĂ”ige rÀÀgime Kubernetes'i haldamisest, salvestades selle konfiguratsioonid Git'is ja automaatsete muudatuste rakendamisest klastrisse. Kahest lĂ€henemisest nende muudatuste rakendamisel rÀÀgib Matthias Jg kĂ€esolevas artiklis.

Eelmisel aastal (tegelikult toimus see formaalselt 2017. aasta augustis â tĂ€iendav mĂ€rkus tĂ”lkijalt.) ilmnes uus lĂ€henemine rakenduste juurutamiseks Kubernetes'is. Seda nimetatakse GitOps'iks ja selle aluseks on pĂ”himĂ”te, et versioonide jĂ€lgimine toimub turvalises Git-repositooriumis.
Selle lÀhenemise peamised eelised on jÀrgmised:
- Deployment'ide versioonimine ja muudatused. Kogu klastri olek salvestatakse Git-repositooriumis ja deployment'id uuendatakse ainult commit'ide kaudu. Lisaks on kÔik muudatused jÀlgitavad commit'ide ajaloo kaudu.
- Tagasiulatuvad muudatused tuttavate Git kÀskude abil. Lihtne
git resetvĂ”imaldab tagasi keelduda muudatustest deployment'ides; alati on saadaval varasemad olekud. - Valmis juurdepÀÀsuhaldus. Tavaliselt sisaldab Git-sĂŒsteem palju konfidentsiaalset teavet, seetĂ”ttu pööravad enamik ettevĂ”tteid suurt tĂ€helepanu selle kaitsmisele. Vastavalt laieneb see kaitse ka deployment'idega toimingutele.
- Poliitikad juurutamiseks. Enamik Git-sĂŒsteeme toetab algselt poliitikaid erinevate harude jaoks â nĂ€iteks saavad ainult pull request'id uuendada master'it ning muudatused peab ĂŒle vaatama ja aktsepteerima teine meeskonnaliige. Nagu juurdepÀÀsu haldamisel, rakendatakse samu poliitikaid deployment'ide uuendamisel.
Nagu nĂ€ete, on GitOps meetodil palju eeliseid. Viimase aasta jooksul on kaks lĂ€henemist saavutanud erilist populaarsust. Ăks pĂ”hineb push-lĂ€henemisel, teine â pull-lĂ€henemisel. Enne nende arutamist vaatame esmalt, kuidas nĂ€evad vĂ€lja tĂŒĂŒpilised Kubernetes'i deployment'id.
Juurutamise viisid
Viimastel aastatel on Kubernetes'is kindlaks saanud mitmed juurutamise viisid ja tööriistad:
- PÔhineb Kubernetes'i/Kustomize'i natiivsetel mallidel. See on lihtsaim viis rakenduste juurutamiseks Kuberneteses. Arendaja loob pÔhielemendid YAML-failidest ja rakendab need. Korduvate ƥabloonide uuesti kirjutamise vÀltimiseks töötati vÀlja Kustomize (mis muudab Kubernetes ƥabloonid mooduliteks). MÀrkus tÔlke kohta.: Kustomize on integreeritud kubectl'iga versioonist .
- Helm Chart'id. Helm Chart'id vĂ”imaldavad luua ĆĄabloonide, init-konteinerite, sidecar'ide jne komplekte, mida rakendatakse rakenduste juurutamiseks paindlikumate seadistamisvĂ”imalustega kui ĆĄabloonide pĂ”hine lĂ€henemine. Selle meetodi aluseks on ĆĄabloonitud YAML-failid. Helm tĂ€idab need erinevate parameetritega ja seejĂ€rel edastab Need Tiller'ile â klastri komponendile, mis juurutab neid klastrisse ja vĂ”imaldab uuendusi ja tagasipöördeid. Oluline on see, et pĂ”himĂ”tteliselt lisab Helm lihtsalt vajalikud vÀÀrtused ĆĄabloonidesse ja rakendab need just nagu traditsioonilises lĂ€henemises. (lisainfot selle kohta, kuidas see kĂ”ik töötab ja kuidas seda kasutada, leiate meie â toimetaja mĂ€rkus). On olemas suur valik valmis Helm-chart'e, mis katab laia valikut ĂŒlesandeid.
- Alternatiivsed tööriistad. On palju alternatiivseid tööriistu. KÔik need muudavad teatud ƥabloonifailid arusaadavateks Kubernetes YAML-failideks ja rakendavad need seejÀrel.
Meie töös kasutame pidevalt Helm-chart'e oluliste tööriistade jaoks (kuna need sisaldavad palju valmis komponente, mis lihtsustavad elu) ja "puhtaid" Kubernetes YAML-failisid oma rakenduste juurutamiseks.
Pull & Push
Ăhes oma hiljutises blogipostituses tutvustasin tööriista , mis vĂ”imaldab ĆĄabloone Git-repositooriumisse salvestada ja juurutamist uuendada pĂ€rast iga commit'i vĂ”i konteineri push'i. Minu kogemus nĂ€itab, et see tööriist on ĂŒks peamisi pull-lĂ€henemise edendamisel, seega viitan sellele sageli. Kui soovite rohkem teada, kuidas seda kasutada, siis siin on .
NB! KÔik GitOps'i kasutamise eelised kehtivad mÔlema lÀhenemise puhul.
Pull-lÀhenemine

Pull-lĂ€hestumisstrateegia pĂ”hineb tĂ”siselt, et kĂ”ik muudatused tehakse klastri seest. Klaster sisaldab operaatorit, kes regulaarselt kontrollib seotud Git-repositooriaid ja Docker Registry't. Kui seal toimuvad muudatused, uuendatakse klastri staatus seestpoolt. Ăldiselt peetakse seda protsessi ĂŒsna turvaliseks, kuna ei ĂŒhelgi vĂ€lisel kliendil ei ole juurdepÀÀsu klastri administreerimisĂ”igustele.
Plussid:
- Ăhelgi vĂ€lisel kliendil ei ole Ă”igusi muudatuste tegemiseks klastri sees, kĂ”ik uuendused tehakse seestpoolt.
- MĂ”ned tööriistad vĂ”imaldavad samuti sĂŒnkroonida Helm-chartide uuendusi ja seondada need klastriga.
- Docker Registry't saab skaneerida uute versioonide olemasolu osas. Kui ilmub uus pilt, uuendatakse Git-repositoorium ja deploymendit uusimale versioonile.
- Pull-tööriistad vĂ”ivad olla jaotatud erinevatesse ruumidesse, millel on erinevad Git-reposid ja ligipÀÀsuĂ”igused. Selle tulemusena saadakse multiĂŒĂŒrilise (multitenant) mudeli rakendamine. NĂ€iteks vĂ”ib meeskond A kasutada ruumi A, meeskond B ruumi B ja infrastruktuuri meeskond vĂ”ib kasutada globaalset ruumi.
- Ăldiselt on tööriistad ĂŒsna kergekaalulised.
- Koos selliste tööriistadega nagu operaator, , vĂ”ivad saladused olla krĂŒpteeritud kujul Git-repositoriumis ja neid saab klastris vĂ€lja vĂ”tta.
- CD-piiplainidega pole seost, kuna deploymendid toimuvad klastris.
Miinused:
- Saladuste haldamine Helm-chartide kaudu on keerulisem kui tavapĂ€raselt, kuna neid tuleb kĂ”igepealt genereerida nĂ€iteks, varjatud saladustena, seejĂ€rel dekrĂŒpteerida sisemise operaatori poolt ja alles siis on need pull-tööriista jaoks kĂ€ttesaadavad. SeejĂ€rel saab Helm'is kĂ€ivitada vĂ€ljalaskmise, kasutades juba deklareeritud saladusi. Lihtsaim viis on luua saladus, milles sisaldub kĂ”ik kasutatavad Helm'i vÀÀrtused deploymendi jaoks, dekrĂŒpteerida see ja teha Git'i salvestus.
- Kasutades pull-approchi, olete seotud tööriistadega, mis töötavad pullide pĂ”hjal. See piirab vĂ”imalust seadistada deploy'ide kĂ€itamisprotsessi klastris. NĂ€iteks Kustomize'i kasutamine on keerulisem, kuna see peab toimuma enne, kui lĂ”plikud mallid jĂ”uavad Git'i. Ma ei ĂŒtle, et eraldi tööriistade kasutamine on vĂ”imatu, kuid nende integreerimine deployimisprotsessi on keerulisem.
Push-approach

Push-approach'i puhul kĂ€ivitab vĂ€line sĂŒsteem (peamiselt CD-torud) klastris deploy'e pĂ€rast Git'i reposiitri commit'i tegemist vĂ”i eelmise CI-toru edukat tĂ€itmist. Selle lĂ€henemise korral on sĂŒsteemil juurdepÀÀs klastrile.
Plussid:
- Turvalisus mÀÀratakse Git'i reposiitri ja ehituspipeliini kaudu.
- Helm'i charte on lihtsam deployida, olemas on Helm'i pluginad.
- Salajaste haldamine on lihtsam, kuna saladusi saab rakendada pipeliinides ja samuti salvestada Git'is krĂŒpteeritud kujul (sĂ”ltuvalt kasutaja eelistustest).
- Spetsiifiliste tööriistade seose puudumine, kuna saab kasutada igasuguseid tööriistu.
- Konteinerite versioonide uuendusi saab kÀivitada ehituspipeliini kaudu.
Miinused:
- Andmed juurdepÀÀsuks klastrile asuvad ehitussĂŒsteemi sees.
- Konteinerite deploy'de uuendamine on endiselt lihtsam pull-protsessiga.
- Tugev sĂ”ltuvus CD-sĂŒsteemist, kuna vajalikud pipeliinid on vĂ”ib-olla algselt kirjutatud Gitlab Runners'i jaoks, kuid seejĂ€rel otsustab meeskond ĂŒle minna Azure DevOpsile vĂ”i Jenkinsile... ja tuleb migreerida suur hulk ehituspipeliine.
KokkuvÔtted: Push vÔi Pull?
Nagu tavaliselt, igal lĂ€henemisel on oma plussid ja miinused. MĂ”ned ĂŒlesanded on ĂŒhega lihtsamad, teisega aga keerulisemad. Alguses tegin ma juurutamisi kĂ€sitsi, kuid pĂ€rast mitme Weave Fluxi kohta kirjutatud artikli lugemist otsustasin rakendada GitOps-protsesse kĂ”igis projektides. KĂ”ikide baasskeemide puhul oli see lihtne, kuid hiljem hakkasin kogema raskusi Helm-chartide kasutamisel. Sel ajal pakkus Weave Flux vaid algelise versiooni Helm Chart Operatoorist, kuid isegi praegu on mĂ”ned ĂŒlesanded keerulised, kuna tuleb kĂ€sitsi luua saladusi ja neid rakendada. VĂ”ite öelda, et pull-lĂ€henemine on palju turvalisem, kuna klastri mandaat ei ole tema vĂ€lispindadel ligipÀÀsetav, mis suurendab turvalisust nii palju, et see Ă”igustab lisapingutusi.
MĂ”eldes veidi, jĂ”udsin ootamatule jĂ€reldusele, et see ei ole nii. Kui rÀÀkida komponentidest, mis vajavad maksimaalset kaitset, kuuluvad sellesse nimekirja saladuste hoidlad ja CI/CD-sĂŒsteemid, Git-repositooriumid. Teave nende sees on vĂ€ga haavatav ja vajab maksimaalset kaitset. Lisaks, kui keegi saab juurdepÀÀsu teie Git-repositooriumile ja suudab sinna koodi push'ida, siis saab ta juurutada kĂ”ike, mida soovib (olgu see pull- vĂ”i push-lĂ€henemine), ja tungida klastri sĂŒsteemidesse. Seega on kĂ”ige olulisemad komponendid, mis vajavad kaitset, Git-repositoorium ja CI/CD-sĂŒsteemid, mitte klastri mandaat. Kui teie poliitikad ja turvameetmed on selliste sĂŒsteemide jaoks hĂ€sti seadistatud, ja klastri mandaat on torude kaudu toimetatud ainult saladustena, ei pruugi pull-lĂ€henemise tĂ€iendav turvalisus osutuda nii vÀÀrtuslikuks, kui algselt eeldati.
Nii et kui pull-lĂ€henemine on töömahukam ja ei paku turvalisuse eeliseid, kas ei oleks loogiline kasutada ainult push-lĂ€henemist? Kuid keegi vĂ”ib vĂ€ita, et push-lĂ€henemine seab teid liiga kinni CD-sĂŒsteemi, ja vĂ”ib-olla on parem mitte niimoodi teha, et oleks tulevikus lihtsam migratsioone teostada.
Minu arvates (nagu alati) tuleks kasutada seda, mis sobib konkreetse juhtumi jaoks, vĂ”i kombineerida. Isiklikult kasutan mĂ”lemat lĂ€henemist: Weave Flux deploy'miseks, mis pĂ”hinevad pull, mis peamiselt hĂ”lmavad meie enda teenuseid, ja push-lĂ€henemist Helmiga ja pluginatega, mis lihtsustavad Helm-chartide rakendamist klastrisse ja vĂ”imaldavad probleemideta luua salajasi vĂ”tmeid. Arvan, et ĂŒhtegi universaalset lahendust ei tule, mis sobiks kĂ”ikidele juhtudel, kuna nĂŒansse on alati vĂ€ga palju ja need sĂ”ltuvad konkreetsest rakenduse nĂ€itest. Sellegipoolest soovitan tungivalt GitOps'i â see teeb elu palju lihtsamaks ja suurendab turvalisust.
Loodan, et minu kogemus antud teema osas aitab teil otsustada, milline meetod sobib kĂ”ige enam teie deployment'ide tĂŒĂŒbile, ja ma oleksin rÔÔmus, kui kuulda teie arvamust.
P.S. TÔlkija mÀrkus
Pull-mudeli miinustes on punkt, et raske on Git'i panna renderdatud manifestid, kuid ei ole miinust, et CD-pipelii pull-mudelis elab eraldi vabanemisest ja muutub essentsiaalselt kategooria pipeliiniks Continuous Apply. SeetĂ”ttu on vajalikud veelgi suuremad pingutused, et kogu deployment'ide staatust koguda ja kuidagi logide/status'e juurde juurdepÀÀsu anda, soovitavalt CD sĂŒsteemiga seotud.
Sellest vaatepunktist vÔimaldab push-mudel anda mingid garantiid vabanemiseks, kuna pipeliini eluea saab mÀÀrata vabanemise elueaga.
Oleme proovinud mÔlemat mudelit ja jÔudnud samadele jÀreldustele nagu artikli autor:
- Pull-mudel sobib meile sĂŒsteemikomponentide vĂ€rskendamise korraldamiseks suure hulga klastrite peal (vt. ).
- Push-mudel GitLab CI pĂ”hjal sobib vĂ€ga hĂ€sti rakenduste vabanemiseks Helm-chartide abil. Samuti jĂ€lgitakse deployment'ide vabanemist pipelinide raames tööriista abil . Muide, selle meie projekti kontekstis kuulsime pidevalt "GitOps", kui arutasime DevOps-inseneride pakilisi probleeme oma stendil KubeCon Europeâ19.
P.P.S. tÔlkijalt
Lugege ka meie blogist:
- «»;
- «»;
- «»;
- «».
Ainult registreeritud kasutajad saavad kĂŒsitluses osaleda. , palun.
Kas kasutate GitOps'i?
Jah, pull lÀhenemine
Jah, push
Jah, pull + push
Jah, midagi muud
Ei
Oleme hÀÀletanud 30 kasutajat. 10 kasutajat jÀid neutraalseks.
Allikas: habr.com
