ShĂ«n. pĂ«rkth.: Pas publikimit tĂ« fundit pĂ«r metodat pull dhe push nĂ« GitOps, ne vĂ«mĂ« re njĂ« interes pĂ«r kĂ«tĂ« model nĂ« pĂ«rgjithĂ«si, megjithatĂ«, publikimet nĂ« gjuhĂ«n ruse mbi kĂ«tĂ« temĂ« ishin shumĂ« tĂ« pakta (nĂ« Habra thjesht nuk kishte asnjĂ«). Prandaj, jemi tĂ« gĂ«zuar t'ju ofrojmĂ« pĂ«rkthimin e njĂ« artikulli tjetĂ«r â ndonĂ«se tashmĂ« pothuajse njĂ« vit i vjetĂ«r! â nga kompania Weaveworks, kreu i sĂ« cilĂ«s shpiku termin «GitOps». NĂ« tekst shpjegohet thelbi i qasjes dhe dallimet kryesore nga ato ekzistuese.
Një vit më parë ne publikoi . Atëherë ne treguam se si ekipi i Weaveworks lansoi një SaaS, tërësisht të ndërtuar mbi Kubernetes, dhe zhvilloi një set praktikash më të mira për implementimin, menaxhimin dhe monitorimin në një mjedis cloud native.
Artikulli u bë popullor. Të tjerë filluan të flasin për GitOps, të publikojnë mjete të reja për , , , , etj. Në faqen tonë u shfaq publikimesh dhe rasteve të përdorimit të GitOps. Por disa njerëz vazhdojnë të kenë pyetje. Si ndryshon modeli nga infrastruktura tradicionale si kod dhe dorëzimi i vazhdueshëm ()? A është e domosdoshme të përdorim Kubernetes?
Së shpejti ne kuptuam se nevojitet një përshkrim i ri, që ofron:
- Një numër të madh shembujsh dhe historish;
- Një definicion të saktë të GitOps;
- Krahasimi me dorëzimin tradicional të vazhdueshëm.
Në këtë artikull ne përpiqemi të mbulojmë të gjitha këto tema. Në të do të gjeni një hyrje të përditësuar në GitOps dhe një rreze për të nga perspektiva e zhvilluesve dhe CI/CD. Ne jemi kryesisht të orientuar drejt Kubernetes, megjithatë, modeli padyshim që mund të përhapet.
Njoftohuni: GitOps
Imagjinoni Alice. Ajo menaxhon kompaninë Family Insurance, e cila ofron politika për sigurimin e shëndetit, automjeteve, pronave dhe sigurim udhëtimi për ata që janë shumë të zënë për të u marrë me hollësitë e kontratave vetë. Biznesi i saj nisi si një projekt anësor, kur Alice punonte në një bankë si data scientist. Një ditë ajo e kuptoi se mund të përdorë algoritme kompjuterike të avancuara për një analizë më efektive të të dhënave dhe për formimin e pakove të sigurimit. Investitorët financuan projektin, dhe tani kompania e saj gjeneron më shumë se 20 milion dollarë në vit dhe po rritet me shpejtësi. Aktualisht, në të punojnë 180 persona në pozita të ndryshme. Në mesin e tyre është ekipi teknologjik, i cili merret me zhvillimin, mirëmbajtjen e uebsajtit, bazës së të dhënave dhe analizën e bazës së klientëve. Ekipa prej 60 personash udhëhiqet nga Bob - drejtor teknologjik i kompanisë.
Ekipa e Bobit po zbaton sistemet production në cloud. Aplikacionet e tyre kryesore funksionojnë në GKE, duke përfituar nga avantazhet e Kubernetes në Google Cloud. Për më tepër, ata përdorin një sërë mjetesh për punë me të dhënat dhe analitikë.
Family Insurance nuk kishte planifikuar të përdorte kontejnerët, por u infektua nga entuziazmi për Docker. Së shpejti specialistët e kompanisë zbuluan se GKE lejonte që të vendosnin klasterë për testimin e funksionaliteteve të reja lehtësisht dhe pa mundim. U shtuan Jenkins për CI dhe Quay për organizimin e regjistrit të kontejnerëve, dhe u shkruan skriptet për Jenkins, të cilat dërgonin kontejnerët dhe konfigurimet e reja në GKE.
Ka kaluar një kohë. Alisa dhe Bobi ishin zhgënjyer nga performanca e qasjes së zgjedhur dhe ndikimi i saj në biznes. Zbatimi i kontejnerëve nuk e përmirësoi performancën aq sa ndjente ekipi. Ndonjëherë, deploymet prisnin dhe nuk ishte e qartë nëse fajin e kishte ndryshimi i kodit. Po ashtu, ishte e vështirë të ndjekeshin ndryshimet e konfigurations. Shpesh ishin të detyruar të krijonin një grup të ri dhe të zhvendosnin aplikacionet në të, pasi ishte më e thjeshtë të likuidohej ai kaos në të cilin kishte përfunduar sistemi. Alisa kishte frikë se situata do të përkeqësohej me zhvillimin e aplikacionit (për më tepër, një projekt i ri po afrohej që kishte lidhje me mësimin automatike). Bobi kishte automatizuar pjesën më të madhe të punës dhe nuk e kuptonte pse pipeline-i ende ishte i paqëndrueshëm, i papërshtatshëm dhe herë pas here kërkonte ndërhyrje manuale?
Më pas ata morën vesh për GitOps. Ky zgjidhje doli të ishte pikërisht ajo që u duhej për të ecur përpara me besim.
Alisa dhe Bobi kishin dĂ«gjuar pĂ«r vite tĂ« tĂ«ra pĂ«r proceset e bazuara nĂ« Git, DevOps dhe infrastruktura si kod. UnikĂ«sia e GitOps qĂ«ndron nĂ« faktin se ai sjell njĂ« sĂ«rĂ« praktikash mĂ« tĂ« mira â kategorike dhe rregullatore â pĂ«r realizimin e kĂ«tyre ideve nĂ« kontekstin e Kubernetes. Ky temĂ« , pĂ«rfshirĂ« nĂ« .
Familia Insurance po vendos të zbatojë GitOps. Tani kompania ka një model të automatizuar operativ që është në përputhje me Kubernetes dhe kombinon shpejtësinë për CustomResources; me qëndrueshmërinë, pasi ata:
- zbuluan se produktiviteti i ekipit u dyfishua dhe askush nuk po çmendej;
- ndaluan shĂ«rbimin e skripteve. NĂ« vend tĂ« kĂ«saj, ata tani mund tĂ« pĂ«rqendrohen nĂ« funksionalitete tĂ« reja dhe pĂ«rmirĂ«simin e metodave inxhinierike â pĂ«r shembull, tĂ« zbatojnĂ« lançimet kanarinĂ« dhe tĂ« pĂ«rmirĂ«sojnĂ« testimin;
- pĂ«rmirĂ«suan procesin e deployment-it â tani ai rrallĂ« prishet;
- morrën mundësinë të rikuperonin deploymet pas dështimeve pjesore pa ndihmën manuale;
- fituan më shumë besim në sistemet e dorëzimit. Alisa dhe Bobi zbuluan se mund të ndanin ekipin në grupe që merreshin me mikrosherbime dhe punonin paralelisht;omund të bënin nga 30-50 ndryshime në projekt çdo ditë përmes përpjekjeve të secilës grup dhe të provonin teknika të reja;
- mund të bëjnë 30-50 ndryshime në projekt çdo ditë nëpërmjet përpjekjeve të secilës grup dhe të provojnë teknika të reja;
- lehtĂ«sisht tĂ«rheqin zhvillues tĂ« rinj nĂ« projekt, tĂ« cilĂ«t kanĂ« mundĂ«sinĂ« tĂ« implementojnĂ« pĂ«rditĂ«sime nĂ« production pĂ«rmes pull requestâave brenda disa orĂ«sh;
- lehtĂ«sisht kalojnĂ« auditorinĂ« nĂ« kuadĂ«r tĂ« SOC2 (nĂ« pĂ«rputhje me kĂ«rkesat e ofruesve tĂ« shĂ«rbimeve pĂ«r menaxhimin e sigurt tĂ« tĂ« dhĂ«nave; lexoni mĂ« shumĂ«, pĂ«r shembull, â shĂ«n. pĂ«rkth.).
ĂfarĂ« ndodhi?
GitOps â kjo Ă«shtĂ« dy gjĂ«ra:
- Modeli i operimit për Kubernetes dhe cloud native. Ai ofron një grup praktikash më të mira për implementimin, menaxhimin dhe monitorimin e klasterëve dhe aplikacioneve të mbledhura në kontejnerë. Një përkufizim elegant në formën e nga :
- Rruga për krijimin e një ambienti të orientuar ndaj zhvilluesve për menaxhimin e aplikacioneve. Ne aplikojmë procesin e punës Git si për operimin ashtu edhe për zhvillimin. Vërejtje, kjo nuk është thjesht për Git push, por për organizimin e gjithë grupit të mjeteve CI/CD dhe UI/UX.
Një fjalë për Git
NĂ«se nuk jeni tĂ« njohur me sistemet e kontrollit tĂ« versioneve dhe procesin e punĂ«s tĂ« bazuar nĂ« Git, ne ju rekomandojmĂ« qĂ« ta studioni atĂ«. Fillimisht, puna me degĂ« dhe pull requestâave mund tĂ« duket si magji e zezĂ«, por pĂ«rfitimet e saj ia vlejnĂ« pĂ«rpjekjeve. Ja pĂ«r tĂ« filluar.
Si funksionon Kubernetes
NĂ« historinĂ« tonĂ«, Alice dhe Bob iu drejtuan GitOps, pas njĂ« kohe tĂ« caktuar duke punuar me Kubernetes. Me tĂ« vĂ«rtetĂ«, GitOps Ă«shtĂ« ngushtĂ«sisht i lidhur me Kubernetes â kjo Ă«shtĂ« njĂ« model operimi pĂ«r infrastrukturĂ«n dhe aplikacionet e bazuara nĂ« Kubernetes.
ĂfarĂ« iu ofron Kubernetes pĂ«rdoruesve?
Ja disa nga funksionalitetet kryesore:
- Në modelin e Kubernetes, gjithçka mund të përshkruhet në mënyrë deklarative.
- API-server-i i Kubernetes pranon këtë deklaratë si të dhëna hyrëse, dhe më pas përpiqet vazhdimisht ta çojë klasterin në gjendjen e përshkruar në deklaratë.
- Deklaratat janĂ« tĂ« mjaftueshme pĂ«r tĂ« pĂ«rshkruar dhe menaxhuar njĂ« shumĂ«llojshmĂ«ri tĂ« madhe tĂ« ngarkesave tĂ« punĂ«s â 'aplikacioneve'.
- Si rezultat, ndryshimet në aplikacion dhe klaster ndodhin për shkak të:
- ndryshimeve në imazhet e kontejnerëve;
- ndryshimeve në specifikimin deklarativ;
- gabimeve nĂ« mjedis â pĂ«r shembull, rĂ«nies sĂ« kontejnerĂ«ve.
Aftësitë e mrekullueshme të Kubernetes për konvergjencë
Kur një administrator bën ndryshime në konfigurim, orkestra Kubernetes do t'i aplikojë ato në klaster derisa gjendja e tij të afrohet me konfigurimin e ri.. Kjo model funksionon për çdo burim Kubernetes dhe zgjeron me anë të Custom Resource Definitions (CRDs). Prandaj, deployment-et e Kubernetes kanë këto veçori të mrekullueshme:
- Automatizimi: azhurnimet e Kubernetes ofrojnë një mekanizëm për automatizimin e proceseve të aplikimit të ndryshimeve në mënyrë korrekte dhe në kohë.
- Konvergjenca: Kubernetes do të vazhdojë të përpiqet për azhurnime deri sa të arrihet sukses.
- Idempotenca: ripë të aplikimet e konvergjencës çojnë në të njëjtin rezultat.
- Determinizmi: me mjaft burime, gjendja e klasterit të azhurnuar varet vetëm nga gjendja e dëshiruar.
Si funksionon GitOps
Kemi mësuar mjaft rreth Kubernetes për të shpjeguar parimet e funksionimit të GitOps.
Le tĂ« kthehemi te ekipet e Family Insurance qĂ« lidhen me mikroshĂ«rbimet. ĂfarĂ« duhet tĂ« bĂ«jnĂ« ata zakonisht? Shihni listĂ«n mĂ« poshtĂ« (nĂ«se disa pika duken tĂ« çuditshme ose tĂ« panjohura, ju lutemi prisni me kritikĂ«n dhe qĂ«ndroni me ne). KĂ«to janĂ« thjesht shembuj tĂ« proceseve tĂ« punĂ«s nĂ« bazĂ« tĂ« Jenkins. Ka shumĂ« procese tĂ« tjera qĂ« lidhen me mjete tĂ« tjera.
Pika kryesore është se ne shohim që çdo azhurnim përfundohet me ndryshime në skedarët e konfigurimit dhe në repositorët Git. Këto ndryshime në Git bëjnë që 'operatori GitOps' të azhurnojë klasterin:
1. Procesi i punĂ«s: âNdĂ«rtojeni Jenkins - dega master».
Lista e detyrave:
- Jenkins dërgon imazhet e etiketuar në Quay;
- Jenkins dërgon konfigurimin dhe diagramet Helm në bucket-in master-storage;
- Funksioni cloud kopjon konfigurimin dhe diagramet nga bucket-i master-storage në repositorin Git master;
- Operatori GitOps azhurnon klasterin.
2. Ndërtojeni Jenkins - dega release ose hotfix:
- Jenkins dërgon imazhet e paetiketuar në Quay;
- Jenkins dërgon konfigurimin dhe diagramet Helm në bucket-in staging-storage;
- Funksioni cloud kopjon konfigurimin dhe diagramet nga bucket-i staging-storage në repositorin Git staging;
- Operatori GitOps azhurnon klasterin.
3. Ndërtojeni Jenkins - dega develop ose feature:
- Jenkins dërgon imazhet e paetiketuar në Quay;
- Jenkins dërgon konfigurimin dhe diagramet Helm në bucket-in develop-storage;
- Funksioni cloud kopjon konfigurimin dhe diagramet nga bucket-i develop-storage në repositorin Git develop;
- Operatori GitOps azhurnon klasterin.
4. Shtimi i klientit të ri:
- Menaxheri ose administratori (LCM/ops) thërret Gradle për përgatitjen fillestare dhe konfigurimin e balancuesve të ngarkesës (NLB);
- LCM/ops bën commit të konfigurimit të ri për të përgatitur deployment-in për azhurnime;
- Operatori GitOps azhurnon klasterin.
Përshkrimi i shkurtër i GitOps
- Përshkruani gjendjen e dëshiruar të gjithë sistemit duke përdorur specifikime deklarative për çdo mjedis (në historinë tonë, ekipi i Bobit definon tërë konfigurimin e sistemit në Git).
- Repoja Git është burimi i vetëm i së vërtetës në lidhje me gjendjen e dëshiruar të gjithë sistemit.
- Të gjitha ndryshimet në gjendjen e dëshiruar realizohen përmes komiteteve në Git.
- Të gjitha parametrat e dëshiruar të klasterit gjithashtu janë të observable në vetë klasterin. Kështu, ne mund të përcaktojmë nëse (konvergojnë, converge) ose dallojnë (divergojnë, diverge) gjendjet e dëshiruara dhe të observable.
- Nëse gjendjet e dëshiruara dhe të observable dallojnë, atëherë:
- Ekziston një mekanizëm konvergjence, i cili do të sinkronizojë automatikisht gjendjen e synuar dhe atë të observable. Brenda klasterit, këtë e bën Kubernetes.
- Procesi aktivizohet menjëherë me njoftimin 'ndryshimi u konfirmua'.
- Përmes një intervali të caktuar të cilin mund ta përshtatni, mund të dërgohet një njoftim 'dallim' nëse gjendjet dallojnë.
- Kështu, të gjitha komitetet në Git shkaktojnë përditësime të verifikueshme dhe idempotente në klaster.
- Rivendosja është një konvergjencë në një gjendje të dëshiruar më parë.
- Konvergjenca është përfundimtare. Shenja e saj është:
- Mungesa e njoftimeve 'dallim' për një periudhë të caktuar kohore.
- Njoftimi 'konverguar' (p.sh., webhook, ngjarje e shkruar në Git).
ĂfarĂ« Ă«shtĂ« divergjenca?
Të shqyrtojmë përsëri: të gjitha vetitë e dëshiruara të klasterit duhet të jenë observable në vetë klasterin..
Disa shembuj të divergjencës:
- Ndryshimi në dosjen e konfigurimit për shkak të bashkimit të degëve në Git.
- Ndryshimi në dosjen e konfigurimit për shkak të një komiti në Git, të bërë nga një klient GUI.
- Ndryshime të shumta në gjendjen e dëshiruar për shkak të PR në Git me ndihmën e ndërtimit të një imazhi kontejneri dhe ndryshimeve të konfigurimit.
- Ndryshimi i gjendjes së klasterit për shkak të një gabimi, konfliktit të burimeve që çon në 'sjellje të keqe', ose thjesht anashkalim i rastësishëm nga gjendja origjinale.
ĂfarĂ« pĂ«rbĂ«n mekanizmi i konvergjencĂ«s?
Disa shembuj:
- Për kontejnerët dhe klasterët, mekanizmi i konvergjencës ofrohet nga Kubernetes.
- Të njëjtin mekanizëm mund të përdorim për menaxhimin e aplikacioneve dhe ndërtimeve të bazuara në Kubernetes (p.sh., Istio dhe Kubeflow).
- Mekanizmi për menaxhimin e bashkëpunimit të punës ndërmjet Kubernetes, depove të imazheve dhe Git-it ofron , i cili është një pjesë e .
- Për makinat bazike, mekanizmi i konvergjencës duhet të jetë deklarativ dhe autonom. Nga përvoja jonë mund të themi se është më afër këtij përkufizimi, megjithatë ende kërkon kontroll nga njeriu. Në këtë kuptim, GitOps zgjeron traditat e Infrastrukturës si Kod.
GitOps bashkon Git me mekanizmin e shkëlqyer të konvergjencës së Kubernetes, duke ofruar një model për operacionin.
GitOps na lejon të deklarojmë: automatikës dhe kontrollit i nënshtrohen vetëm ato sisteme që mund të përshkruhen dhe të vëzhgohen.
GitOps është i dizajnuar për gjithë grumbullin cloud native (p.sh., Terraform, etj.)
GitOps â nuk Ă«shtĂ« vetĂ«m Kubernetes. Ne duam qĂ« e gjithĂ« sistemi tĂ« menaxhohet nĂ« mĂ«nyrĂ« deklarative dhe tĂ« pĂ«rdorĂ« konvergjencĂ«n. Nga e gjithĂ« sistemi kuptojmĂ« grupin e mjediseve qĂ« punojnĂ« me Kubernetes â pĂ«r shembull, 'dev cluster 1', 'produksioni' etj. NĂ« çdo mjedis pĂ«rfshihen makinat, klasterĂ«t, aplikacionet, si dhe ndĂ«rfaqet pĂ«r shĂ«rbime tĂ« jashtme qĂ« ofrojnĂ« tĂ« dhĂ«na, monitorim etj.
Vini re se sa e rëndësishme është Terraform për problemin e bootstrap-it. Kubernetes duhet të jetë i vendosur diku, dhe përdorimi i Terraform do të thotë se mund të aplikojmë të njëjtat procese pune GitOps për të krijuar shtresën menaxhuese që qëndron në themel të Kubernetes dhe aplikacioneve. Kjo është një praktikë e mirë.
Vlen të theksohet se po i jepet shumë rëndësi aplikimit të koncepteve GitOps në shtresat mbi Kubernetes. Deri tani, ekzistojnë zgjidhje të tipit GitOps për Istio, Helm, Ksonnet, OpenFaaS dhe Kubeflow, si dhe për Pulumi, që krijojnë një shtresë për zhvillimin e aplikacioneve për cloud native.
Kubernetes CI/CD: krahasimi i GitOps me qasje të tjera
Siç u tha, GitOps është dy gjëra:
- Një model operacional për Kubernetes dhe cloud native, siç u përmend më parë.
- Një rrugë drejt organizatës me orientim për zhvilluesit për menaxhimin e aplikacioneve.
Për shumë, GitOps është para së gjithësh një proces pune bazuar në git push. Ne gjithashtu e duam atë. Por nuk është e gjitha: le të shohim tani tubat CI/CD.
GitOps ofron implementim të vazhdueshëm (CD) për Kubernetes
GitOps ofron një mekanizëm për implementim të vazhdueshëm, duke eliminuar nevojën për 'sistemet e menaxhimit të implementimeve' të veçanta. Të gjithë punën e bën për ju Kubernetes.
- Përditësimi i aplikacionit kërkon një përditësim në Git. Ky është një përditësim transaksional në gjendjen e dëshiruar. "Zhvillimi" pastaj realizohet brenda klasterit nga Kubernetes bazuar në përshkrimin e përditësuar.
- Për shkak të specifikave të funksionimit të Kubernetes, këto përditësime janë konvergjente. Kjo siguron një mekanizëm për zhvillim të vazhdueshëm, ku të gjitha përditësimet janë atomike.
- Vërejtje: ofron një operator GitOps, që integrohet me Git dhe Kubernetes dhe lejon realizimin e CD përmes pajtimit të gjendjes së dëshiruar dhe asaj aktuale të klasterit.
Pa kubectl dhe skripte
Duhet tĂ« shmanget pĂ«rdorimi i Kubectl pĂ«r tĂ« pĂ«rditĂ«suar klasterin, dhe veçanĂ«risht â skripte pĂ«r grupimin e komandave kubectl. NĂ« vend tĂ« kĂ«saj, pĂ«rmes njĂ« procesi GitOps, pĂ«rdoruesi mund tĂ« pĂ«rditĂ«sojĂ« klasterin e tij Kubernetes pĂ«rmes Git.
Avantazhet përfshijnë:
- Saktësia. Një grup përditësimesh mund të aplikohen, konvergjohen dhe në fund të vërtetohen, duke na afruar më afër qëllimit të zhvillimit atomik. Në të kundërt, përdorimi i skripteve nuk jep asnjë garanci konvergjence (më shumë për këtë më poshtë).
- Siguria. Kelsey Hightower: "Shfrytëzoni qasje në klasterin Kubernetes vetëm për mjete automatizimi dhe administratorë, të cilët kanë obligimin e diagnosticimit ose mbajtjes në punë të tij." Shih gjithashtu për sigurinë dhe përputhshmërinë me specifikimet teknike, si dhe nëpërmjet grabitjes së kredencialeve nga një skript Jenkins i përgatitur keq.
- Përvoja e përdoruesit. Kubectl zbulon mekanikën e modelit objekor të Kubernetes, i cili është mjaft kompleks. Idealisht, përdoruesit duhet të ndërveprojnë me sistemin në një nivel më të lartë të abstraksionit. Këtu do të citoj përsëri Kelsey dhe do të rekomandoj të shikoni .
Dallimi mes CI dhe CD
GitOps përmirëson modelet ekzistuese CI/CD.
Një server modern CI është një mjet për orkestrimin. Në veçanti, është një mjet për orkestrimin e proceseve CI. Këto përfshijnë build, test, bashkimin me trunk dhe kështu me radhë. Serverët CI automatizojnë menaxhimin e proceseve të komplikuara me shumë hapa. Një tundim i zakonshëm është të krijosh një skript për një grup përditësimesh Kubernetes dhe ta ekzekutosh atë si një element të procesit për të pushuar ndryshimet në klaster. Realisht, kështu veprojnë shumë specialistë. Megjithatë, kjo nuk është optimale, dhe këtu është arsyeja pse.
CI duhet të përdoret për të bërë përditësime në trunk, dhe klusteri Kubernetes duhet të ndryshojë bazuar në këto përditësime, për të menaxhuar CD "brenda". Ne e quajmë këtë , në dallim nga modeli push i CI. CD është pjesë e orkestracionit runtime..
Pse CI-serverët nuk duhet të bëjnë CD përmes përditësimeve direkte në Kubernetes
Mos e përdorni CI-serverin për të orkestruar përditësime direkte në Kubernetes në formën e një sërëdetyrash CI. Ky është një anti-model, për të cilin ne në blogun tonë.
Le t'i kthehemi Alisës dhe Bobit.
Me çfarë probleme janë përballur ata? CI-serveri i Bobit aplikon ndryshimet në kluster, por nëse gjate procesit ai dështon, Bobi nuk do të dijë se në cilin gjendje është (ose duhet të jetë) klusteri dhe si ta rregullojë atë. E njëjta gjë vlen edhe në rastin e suksesit.
Le të supozojmë se ekipi i Bobit ka ndërtuar një imazh të ri dhe më pas ka përditësuar deployment-et e tyre për të vendosur imazhin (të gjitha këto nga pipeline-i i CI).
Nëse imazhi ndërtrohet normalisht, por pipeline-i dështon, ekipi do të duhet të zbulojë:
- A është vendosur përditësimi?
- A po zbatojmë një ndërtim të ri? A do të sjellë kjo efekte anësore të padëshiruara - me mundësinë për të marrë dy ndërtime të njëjti imazhi të pandryshuar?
- A ja vlen të presim për një ndërrim tjetër para se të zbatojmë ndërtimin?
- ĂfarĂ« saktĂ«sisht shkoi keq? Cilat hapa duhet tĂ« pĂ«rsĂ«riten (dhe cilat janĂ« tĂ« sigurta pĂ«r t'u pĂ«rsĂ«ritur)?
Organizimi i një procesi pune të bazuar në Git nuk garanton që ekipi i Bobit nuk do të hasë këto probleme. Ata akoma mund të bëjnë gabime me push-in e commit-it, me tag-un ose ndonjë parametr tjetër; megjithatë, ky qasje është ende shumë më afër një modeli të qartë të gjithçkaje ose asgjë.
Përmbledhur, ja pse CI-serverët nuk duhet të angazhohen në CD:
- Skripti i përditësimeve nuk është gjithmonë i qartë; është e lehtë të bëhen gabime.
- CI-serverët nuk konvergojnë në modelin deklarativ të klusterit.
- ĂshtĂ« e vĂ«shtirĂ« tĂ« garantosh idempotencĂ«n. PĂ«rdoruesit duhet tĂ« kuptojnĂ« semantikĂ«n e thellĂ« tĂ« sistemit.
- ĂshtĂ« mĂ« e komplikuar tĂ« kryhet rikuperimi pas njĂ« dĂ«shtimi tĂ« pjesshĂ«m.
Shënim mbi Helm: nëse dëshiron të përdorësh Helm, ne rekomandojmë ta kombinosh atë me një operator GitOps, si . Kjo do të ndihmojë në sigurimin e konvergjencës. Vetëm Helm nuk është as i qartë as atomik.
GitOps si mënyra më e mirë për të realizuar Continuous Delivery për Kubernetes.
Ekipi i Alice dhe Bob po implementon GitOps dhe vëren se është bërë shumë më e lehtë të punosh me produktet software, duke ruajtur një performancë dhe stabilitet të lartë. Le të përfundojmë këtë artikull me ilustrime që tregojnë se si duket qasja e tyre e re. Mbani në mend se ne po flasim kryesisht për aplikacione dhe shërbime, megjithatë GitOps mund të përdoret për menaxhimin e gjithë platformës.
Modeli i funksionimit për Kubernetes
Shikoni diagramin në vijim. Ai paraqet Git dhe depozitën e imazheve të kontejnerëve si burime të përbashkëta për dy ciklet e orkestruara të jetës:
- Pipeline e integrimit të vazhdueshëm, e cila lexon dhe shkruan skedarë në Git dhe mund të përditësojë depozitën e imazheve të kontejnerëve.
- Pipeline Runtime GitOps, i cili kombinon përhapjen me menaxhimin dhe monitorimin. Ai lexon dhe shkruan skedarë në Git dhe mund të ngarkojë imazhe kontejnerësh.
Cilat janë përfundimet kryesore?
- Ndara e problemeve: Vëreni se të dyja pipeline-t mund të ndajnë të dhëna, vetëm duke përditësuar Git-a ose depozitën e imazheve. Me fjalë të tjera, ekziston një firewall midis CI dhe mjedisit runtime. Ne e quajmë atë "firewall të pandryshueshmërisë" (immutability firewall), pasi të gjitha përditësimet e depozitave krijojnë versione të reja. Për informacion të mëtejshëm mbi këtë temë, referohuni slides 72-87. .
- Mund të përdorni çdo CI dhe server Git: GitOps punon me çdo komponent. Ju mund të vazhdoni të përdorni serverët tuaj të preferuar CI dhe Git, depozitë imazhesh dhe grupe testesh. Pothuajse të gjitha mjetet e tjera për Continuous Delivery në treg kërkojnë serverin e tyre CI/Git ose depozitën e imazheve. Kjo mund të bëhet një kufizim në zhvillimin cloud native. Në rastin e GitOps, ju mund të përdorni mjetet që jeni mësuar.
- Ngjarjet si një mjet integrimi: Sa herë që të dhënat në Git përditësohen, Weave Flux (ose operatori Weave Cloud) e informon runtime. Sa herë që Kubernetes merr një grup ndryshimesh, Git përditësohet. Kjo siguron një model të thjeshtë integrimi për organizimin e proceseve për GitOps, siç tregohet më poshtë.
Përfundim
GitOps ofron garanci të qëndrueshme për përditësim, të nevojshme për çdo mjet modern CI/CD:
- automatikë;
- konvergjencë;
- idempotentësi;
- determinist.
Kjo është e rëndësishme, pasi ofron një model funksionimi për zhvilluesit në fushën cloud native.
- Mjetet tradicionale pĂ«r menaxhimin dhe monitorimin e sistemeve janĂ« tĂ« lidhura me ekipet e operacioneve qĂ« veprojnĂ« brenda njĂ« runbook-u. (grup tĂ« procedurave dhe operacioneve rutinĂ« â shĂ«n. pĂ«rk.)., e lidhur me njĂ« deployment tĂ« caktuar.
- Në menaxhimin e sistemeve cloud native, mjetet për vëzhgim janë mënyra më e mirë për të vlerësuar rezultatet e implementimeve, në mënyrë që ekipi i zhvilluesve të mund të reagojë në kohë.
Imagjinoni shumë klastera të shpërndara nëpër cloud-e të ndryshme dhe shumë shërbime me ekipet e tyre dhe planet e tyre të implementimit. GitOps ofron një model invariant të shkallëzueshëm për të menaxhuar gjithë këtë pasuri.
P.S. nga përkthyesi
Lexoni gjithashtu në blogun tonë:
- «»;
- «»;
- «».
Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. , ju lutem.
A e dinit për GitOps para se të dilnin këto dy përkthime në habr?
Po, e dija.
Vetëm sipërfaqësisht.
Jo
35 përdorues votuan. 10 përdorues u abstenuan.
Burimi: habr.com
