MÀrk. tÔlge.: Kubernetes'e kogukonnas on populaarsust kogumas suund nimega GitOps, milles oleme isiklikult veendunud, KubeCon Europe 2019. See termin mÔeldi vÀlja suhteliselt hiljuti Weaveworks'i tegevjuhi Alexis Richardsoni selgituses tÀhendab see arendajatele tuttavate tööriistade (eelkÔige Git'i, mille jÀrgi see nimi on saanud) rakendamist operatiivtööde lahendamiseks. TÀpsemalt öeldes rÀÀgime Kubernetes'i haldamisest, hoides selle konfigureerimisi Git'is ja automaatsete muudatuste rakendamisest klastrisse. Kahest lÀhenemisviisist nende muudatuste rakendamisel rÀÀgib Matthias Jg antud artiklis.

Eelmisel aastal (tegelikult juhtus see formaalselt 2017. aasta augustis â mĂ€rk. tĂ”lge.) ilmus uus lĂ€henemine rakenduste juurutamiseks Kubernetes'es. Seda nimetatakse GitOps ja selle pĂ”hjal on pĂ”hiidee, et deployment'ide versioonide jĂ€lgimine toimub turvalises Git-repositooriumis.
Selle lÀhenemise peamised eelised on jÀrgmised:
- Deployment'ide versioonimine ja muudatuste ajalugu. Kogu klastri olek salvestatakse Git-repositooriumisse ning deploymendid uuendatakse ainult commitâide kaudu. Lisaks on kĂ”ik muudatused jĂ€lgitavad commitâide ajaloo abil.
- TagasivÔtmised, kasutades tuttavaid Git-kÀsku. Lihtne
git resetvĂ”imaldab muudatusi deploymentâides tagasi tagasi tuua; varasemad olekud on alati saadaval. - Valmis juurdepÀÀsukontroll. TĂŒĂŒpiliselt sisaldab Git-sĂŒsteem palju konfidentsiaalset teavet, seega pööravad enamik ettevĂ”tteid sellele kaitsele erilist tĂ€helepanu. Vastavalt laieneb see kaitse ka deploymentâidega seotud operatsioonidele.
- Poliitikad deploymentâide jaoks. Enamik Git-sĂŒsteeme toetab algselt poliitikaid erinevate harude jaoks â nĂ€iteks vĂ”ivad ainult pull requestâid masterâit uuendada, ning muudatusi peab kinnitama ja heaks kiitma teine meeskonna liige. Nagu juurdepÀÀsukontrolli puhul, kehtivad samad poliitikad ka deploymentâide uuendustele.
Nagu nĂ€ete, on GitOps meetodil palju eeliseid. Viimase aasta jooksul on toiminud kaks lĂ€henemist, millest ĂŒks pĂ”hineb push'il ja teine pull'il. Enne kui neid arutame, vaatame esmalt, kuidas nĂ€evad vĂ€lja tĂŒĂŒpilised Kubernetesâe deploymendid.
Deployment'ide meetodid
Viimastel aastatel on Kubernetesis kujunenud vÀlja erinevad meetodid ja tööriistad rakenduste juurutamiseks:
- Kubernetes/Kustomize'i natiivsete mallide pĂ”hjal. See on kĂ”ige lihtsam rakenduste juurutamise viis Kubernetesis. Arendaja loob pĂ”hjalikud YAML-failid ja rakendab need. Ăhenduses pideva sama malli uuesti kirjutamisega on vĂ€lja töötatud Kustomize (see muudab Kubernetes'i mallid mooduliteks). MĂ€rk. tĂ”lge.: Kustomize on integreeritud kubectl-ga alates .
- Helm'i chart'id. Helm'i chart'id vĂ”imaldavad luua mallide komplekte, init-konteinerite, sidecar'ide jne, mida rakendatakse rakenduste juurutamiseks paindlikemate seadistamisvĂ”imalustega kui mallide pĂ”hine lĂ€henemine. Selle meetodi aluseks on mallitud YAML-failid. Helm tĂ€idab need erinevate parameetritega ja seejĂ€rel saadab Tiller'ile â klastrikomponendile, mis juurutab need klastris ja vĂ”imaldab uuendusi ja tagasipöördeid. Oluline on see, et pĂ”himĂ”tteliselt inserteerib Helm lihtsalt vajalikud vÀÀrtused mallidesse ja seejĂ€rel rakendab neid nagu traditsioonilise lĂ€henemise puhul. (rohkem selle kohta, kuidas see kĂ”ik töötab ja kuidas seda kasutada, loe meie â kt. tĂ”lge). On olemas suur valik valmis Helm-chart'e, mis katab laia valikut ĂŒlesandeid.
- Alternatiivsed tööriistad. On mitmeid alternatiivseid tööriistu. Kuldne liitja on see, et nad muudavad mingid mallifailid arusaadavateks Kubernetes YAML-failideks ja seejÀrel rakendavad need.
Oma töös kasutame pidevalt Helm-chart'e oluliste tööriistade jaoks (kuna neis on palju juba valmis, mis lihtsustab elu) ja âpuhasidâ Kubernetes YAML-failid oma rakenduste juurutamiseks.
Pull & Push
Ăhes oma hiljutises blogipostituses tutvustasin tööriista , mis vĂ”imaldab malli salvestada Git-repositooriumisse ja uuendada juurutamist pĂ€rast igat salvestust vĂ”i konteinereid push'ida. Minu kogemus nĂ€itab, et see tööriist on ĂŒks peamisi pull-lĂ€henemise edendamise vahendeid, seega viitan sellele sageli. Kui soovite rohkem teada, kuidas seda kasutada, siis siin on .
NB! KÔik GitOps'i kasutamise eelised jÀÀvad kehtima mÔlema lÀhenemise puhul.
Pull-lÀhenemine

Pull-approach'i alus on see, et kĂ”ik muudatused rakendatakse klusteri seestpoolt. Klusteris on operaator, mis regulaarselt kontrollib seotud Git ja Docker Registry reposid. Kui seal toimub mingeid muudatusi, uuendatakse klusteri olek seestpoolt. Ăldiselt peetakse sarnast protsessi ĂŒsna ohutuks, kuna ĂŒhelgi vĂ€lisel kliendil pole juurĂ”igusi klusterile.
Plussid:
- Ăhelgi vĂ€lisel kliendil pole Ă”igusi klusterisse muudatusi teha, kĂ”ik uuendused rakendatakse seestpoolt.
- MĂ”ned tööriistad vĂ”imaldavad samuti Helm-chartide uuenduste sĂŒnkroonimist ja nende sidumist klastriga.
- Docker Registry't saab skaneerida uute versioonide leidmiseks. Kui ilmub uus pilt, uuendatakse Git-repo ja deployment uuteks versioonideks.
- TĂ”mbetööriistad vĂ”ivad olla jaotatud erinevatesse nimekohtadesse koos erinevate Git-repositooriumide ja juurdepÀÀsuĂ”igustega. Selle kaudu saab rakendada mitmeĂŒĂŒrilise mudeli. NĂ€iteks vĂ”ib meeskond A kasutada nimekohta A, meeskond B nimekohta B ning infrastruktuuri haldav meeskond vĂ”ib kasutada globaalset nimekohta.
- Tavaliselt on tööriistad vÀga kerged.
- Koos selliste tööriistadega nagu operaator , saavad saladused salvestuda krĂŒpteeritud kujul Git-repositooriumisse ja neid saab klastri sees vĂ€lja vĂ”tta.
- CD-pipeline'idega pole ĂŒhendust, kuna juurutamised toimuvad klastri sees.
Miinused:
- Deployment'ide salajaste haldamine Helm chart'ide kaudu on keerulisem kui tavaliste salajaste haldamine, kuna neid tuleb esmalt genereerida nĂ€iteks 'sealed secrets' kujul, seejĂ€rel dekrĂŒpteerida seesmise operaatori kaudu ja ainult siis on need pull-tööriista jaoks kĂ€ttesaadavad. SeejĂ€rel saab Helm'is kĂ€ivitada vĂ€ljaandmise, kasutades juba juurutatud saladustes olevaid vÀÀrtusi. Lihtsaim viis on luua saladus kĂ”igi deployment'ide jaoks kasutatavate Helm vÀÀrtustega, dekrĂŒpteerida see ja salvestada Git'isse.
- Kasutades pull-lĂ€htekohta, olete seotud tööriistadega, mis opereerivad pull'ide kaudu. See piirab juurutamisprotsessi kohandamise vĂ”imalusi klastris. NĂ€iteks Kustomize'iga töötamine on keerulisem, kuna see peab toimuma enne, kui lĂ”plikud mallid Git'isse jĂ”uavad. Ma ei ĂŒtle, et eraldi tööriistu on keelatud kasutada, kuid nende integreerimine juurutamisprotsessi on keerulisem.
Push-pÔhine lÀhenemine

Push-lĂ€henemise korral kĂ€ivitab vĂ€line sĂŒsteem (peamiselt CD-pipeurad) klastrisse juurutusi Git-repo kohustusest vĂ”i eelneva CI-pipeuri edukast tĂ€itmisest. Selles lĂ€henemises on sĂŒsteemil juurdepÀÀs klastrile.
Plussid:
- Turvalisus mÀÀratakse Git-repositoiumi ja koostamispipeuri poolt.
- Helm-chartide juurutamine on kergem, kuna on olemas Helm-pluginite tugi.
- Salajaste haldamine on lihtsam, kuna salajasi saab rakendada pipeurades ja samuti salvestada Git'is krĂŒpteeritud kujul (vastavalt kasutaja eelistustele).
- Ei ole spetsiifilist tööriista, kuna saab kasutada igasuguseid.
- Konteinerite versioonide uuendusi vÔib algatada koostamispipeur.
Miinused:
- JuurdepÀÀsuklahvi andmed asuvad koostamissĂŒsteemi sees.
- Konteinerite uuendamine juurutustes on endiselt lihtsam pull-protsessiga.
- Tugev sĂ”ltuvus CD-sĂŒsteemist, kuna vajalikud pipeurid vĂ”ivad olla algselt kirjutatud Gitlabi Runner'itele ja seejĂ€rel otsustab meeskond ĂŒle minna Azure DevOps'ile vĂ”i Jenkins'ile... ning tuleb teostada suure hulga koostamispipeuride migratsioon.
KokkuvÔte: Push vÔi Pull?
Nagu tavaliselt on igal lĂ€henemisel oma eelised ja puudused. MĂ”ned ĂŒlesanded on lihtsamad ĂŒhega teostada ja keerulisemad teisega. Alguses tegin juurutusi kĂ€sitsi, kuid pĂ€rast mitmete Weave Fluxi artiklite leidmist otsustasin rakendada GitOps-protsesse kĂ”igi projektide jaoks. PĂ”hijoonistega osutus see lihtsaks, kuid hiljem hakkasin kohtama raskusi Helm-chart'idega töötamisel. Sel ajal pakkus Weave Flux vaid algelise versiooni Helm Chart Operatorist, kuid isegi nĂŒĂŒd on mĂ”ned ĂŒlesanded keerulisemad kĂ€sitsi loodud saladuste loomise ja nende rakendamise tĂ”ttu. VĂ”ite öelda, et pull-lĂ€henemine on palju turvalisem, kuna klastri mandaadid ei ole vĂ€ljastpoolt kergesti ligipÀÀsetavad, mis suurendab turvalisust nii palju, et see tasub lisatingimusi.
MĂ”tle sellele veidi ja 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-repositorid. Nendes sisaldav teave on ÀÀrmiselt haavatav ja vajab kĂ”rgendatud kaitset. Lisaks, kui keegi pÀÀseb teie Git-repositorisse ja suudab sinna koodi push'ida, vĂ”ib ta rakendada kĂ”ike, mida soovib (olenemata valitud lĂ€henemisviisist, kas see on pull vĂ”i push), ja siseneda klastrisĂŒsteemidesse. Seega on kĂ”ige olulisemad komponendid, mis vajavad kaitset, Git-repositorid ja CI/CD sĂŒsteemid, mitte klastrikonto andmed. Kui teil on nende sĂŒsteemide jaoks korralikult seadistatud poliitikad ja turvameetmed ning klastrikonto andmed vĂ”etakse pipelinesse ainult saladustena, vĂ”ib pull-lĂ€henemise tĂ€iendav kaitse mitte osutuda nii vÀÀrtuslikuks, kui esialgu arvati.
Seega, kui pull-lĂ€henemine on töömahukam ja ei paku turvalisuse eeliseid, ei oleks siis loogiline kasutada ainult push-lĂ€henemist? Kuid keegi vĂ”ib vĂ€ita, et push-lĂ€henemine on liiga seotud CD-sĂŒsteemiga ja vĂ”ib-olla ei ole parem seda teha, et tulevikus oleks lihtsam migreerida.
Minu arvates (nagu alati) tuleks kasutada seda, mis sobib konkreetsesse olukorda vĂ”i kombineerida. Isiklikult kasutan mĂ”lemat lĂ€henemist: Weave Flux pull-pĂ”histe deployâde jaoks, mis koosnevad enamasti meie enda teenustest, ja push-lĂ€henemist Helmâiga ning pistikprogrammidega, mis lihtsustab Helm-chartide rakendamist klastrisse ja vĂ”imaldab probleemideta luua salajasi andmeid. Arvan, et kunagi ei tule olema ĂŒhte lahendust, mis sobiks kĂ”igi olukordade jaoks, kuna nĂŒansse on alati palju ning need sĂ”ltuvad konkreetsest kasutusjuhust. Samuti soovitan tungivalt GitOps'i â see lihtsustab elu ja suurendab turvalisust.
Loodan, et minu kogemus sellel teemal aitab mÀÀrata, milline meetod sobib teie deploymentâide tĂŒĂŒbile, ja oleksin rÔÔmus, kui saaksin teada teie arvamust.
P.S. TÔlkija mÀrkus
Pull-mudeli miinustena on punkt, et on keeruline Gitisse panna renderdatud manifestid, kuid puudub miinus selles osas, et CD-pipeline pull-mudelis eksisteerib eraldi vĂ€ljalaskest ning muutub seelĂ€bi tegelikult kategoriseeritavaks pipeline'iks. JĂ€tkuv rakendamine. SeetĂ”ttu lĂ€heb veel rohkem tööd selleks, et koguda kĂ”igist vĂ€ljalaskmiste seisunditest teavet ja kuidagi anda ligipÀÀs logidele/seisundile, eelistatavalt seostatuna CD-sĂŒsteemiga.
Selles mÔttes vÔimaldab push-mudel anda mingid garantii vÀljalaskmiseks, kuna pipeline'i eluiga saab teha vÔrdseks vÀljalaskmise elueaga.
Oleme proovinud mÔlemat mudelit ning jÔudnud samadele jÀreldustele, mis autor artiklis:
- Pull-mudel sobib meile sĂŒsteemikomponentide uuendamise korraldamiseks suures koguses klastrites (vt. ).
- Push-mudel, mis pÔhineb GitLab CI-l, sobib vÀga hÀsti rakenduste vÀljalaskmiseks Helm-tabelite kaudu. Samuti jÀlgitakse vÀljalaskeid pipeline'ide raames tööriista abil. . Muide, selle meie projekti kontekstis kuulsime pidevalt "GitOps", kui arutasime DevOps-ingeniiride pakilisi probleeme oma stendis 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
HÀÀletas 30 kasutajat. 10 kasutajat hoidusid.
Allikas: habr.com
