ShĂ«n. pĂ«rk.: Pas publikimit tĂ« fundit rreth metodave pull dhe push nĂ« GitOps, ne pamĂ« interes pĂ«r kĂ«tĂ« model nĂ« pĂ«rgjithĂ«si, megjithatĂ«, publikimet nĂ« gjuhĂ«n ruse mbi kĂ«tĂ« temĂ« ishin tepĂ«r tĂ« pakta (nĂ« Habr nuk ka asnjĂ«). Prandaj, jemi tĂ« lumtur t'ju ofrojmĂ« pĂ«rkthimin e njĂ« artikulli tjetĂ«r â ndonĂ«se tashmĂ« pothuajse njĂ« vit mĂ« parĂ«! â nga kompania Weaveworks, themeluesi i sĂ« cilĂ«s shpiku termin âGitOpsâ. NĂ« tekst shpjegohet thelbi i qasjes dhe dallimet kyçe nga ato ekzistuese.
Një vit më parë ne publikuam . Atëherë ne treguam se si ekipi i Weaveworks filloi një SaaS, tërësisht të bazuar në Kubernetes, dhe zhvilloi një set praktikash më të mira për implementimin, menaxhimin dhe monitorimin në një ambient cloud native.
Artikulli u bë i njohur. Të tjerë filluan të flasin për GitOps, filluan të publikojnë mjete të reja për , , , , etj. Në faqen tonë u shfaq publikimesh dhe raste përdorimi të GitOps. Por disa njerëz ende patën pyetje. Si ndryshon modeli nga tradita dhe dërgesat e vazhdueshme ()? A është e domosdoshme të përdoret Kubernetes?
Së shpejti kuptuam se nevojitej një përshkrim i ri, që ofron:
- Një numër të madh shembujsh dhe historish;
- Një përcaktim konkret të GitOps;
- Krahasimi me dërgimin e vazhdueshëm tradicional.
Në këtë artikull ne përpiqemi të mbulojmë të gjitha këto tema. Do të gjeni një hyrje të azhurnuar në GitOps dhe një perspektivë mbi të nga ana e zhvilluesve dhe CI/CD. Ne kryesisht fokusohemi në Kubernetes, megjithatë modeli mund të përgjithësohet.
Njoftohuni: GitOps
Imagjinoni Alice. Ajo menaxhon kompaninĂ« Family Insurance, e cila ofron politika pĂ«r sigurimin e shĂ«ndetit, automjeteve, pasurive dhe sigurimeve tĂ« udhĂ«timit pĂ«r persona qĂ« janĂ« shumĂ« tĂ« zĂ«nĂ« pĂ«r tĂ« kuptuar detajet e kontratave vetĂ«. Biznesi i saj filloi si njĂ« projekt anĂ«sor, kur Alice punonte nĂ« bankĂ« si data scientist. NjĂ«herĂ« ajo kuptoi se mund tĂ« pĂ«rdorte algoritme tĂ« avancuara kompjuterike pĂ«r tĂ« analizuar tĂ« dhĂ«nat mĂ« efektivisht dhe pĂ«r tĂ« formuar paketa sigurimi. InvestitorĂ«t financuan projektin, dhe tani kompania e saj sjell mbi 20 milion dollarĂ« nĂ« vit dhe po rritet me shpejtĂ«si. Aktualisht, nĂ« tĂ« punojnĂ« 180 njerĂ«z nĂ« pozita tĂ« ndryshme. Midis tyre Ă«shtĂ« ekipi teknologjik, i cili merret me zhvillimin, mirĂ«mbajtjen e faqes, bazĂ«s sĂ« dhĂ«nave dhe analizĂ«n e bazĂ«s sĂ« klientĂ«ve. Ekipi me 60 njerĂ«z drejtohet nga Bob â drejtori teknik i kompanisĂ«.
Ekipi i Bob-it boton sisteme production në cloud. Aplikacionet e tyre kryesore funksionojnë në GKE, duke shfrytëzuar avantazhet e Kubernetes në Google Cloud. Për më tepër, ata përdorin një sërë mjetesh për përpunimin e të dhënave dhe analitikës.
Family Insurance nuk kishte për qëllim të përdorte kontejnerë, por u infektua nga entuziazmi për rreth Docker. Së shpejti specialistët e kompanisë zbuluan se GKE lejonte botimin e grupeve për testimin e funksioneve të reja lehtësisht dhe pa mundim. U shtuan Jenkins për CI dhe Quay për organizimin e regjistrit të kontejnerëve, u shkruan skriptet për Jenkins, të cilat publikuan kontejnerë të rinj dhe konfigurations në GKE.
Ka kaluar njĂ« kohĂ«. Alice dhe Bob u zhgĂ«njyen me performancĂ«n e qasjes sĂ« zgjedhur dhe ndikimin e saj nĂ« biznes. Implementimi i kontejnerĂ«ve nuk e rriti performancĂ«n aq sa kishte shpresuar ekipi. NdonjĂ«herĂ« publikuar ishte e prishur, dhe nuk ishte e qartĂ« nĂ«se ndryshimet nĂ« kod ishin fajtorĂ«t. Gjithashtu, ishte e vĂ«shtirĂ« tĂ« ndiqeshin ndryshimet e konfigurations. Shpesh duhej tĂ« krijohej njĂ« grup i ri dhe tĂ« пДŃĐ”ĐœĐŸŃeshin aplikacionet nĂ« tĂ«, pasi kĂ«shtu ishte mĂ« e lehtĂ« tĂ« eleminoheshin tĂ« gjitha kaosi nĂ« tĂ« cilin ishte kthyer sistemi. Alice kishte frikĂ« se situata do tĂ« pĂ«rkeqĂ«sohej me zhvillimin e aplikacionit (pĂ«r mĂ« tepĂ«r, njĂ« projekt i ri po pritej tĂ« nisĂ« mbi mĂ«simin e makinerisĂ«). Bob kishte automatizuar shumicĂ«n e punĂ«s dhe nuk e kuptonte pse pipeline vazhdonte tĂ« ishte i paqĂ«ndrueshĂ«m, tĂ« mos shkonte pĂ«rpara dhe ndonjĂ«herĂ« kĂ«rkonte ndĂ«rhyrje manuale?
Pastaj ata mësuan rreth GitOps. Ky zgjidhje doli të ishte pikërisht ajo që u nevojitej për të avancuar me besim.
Alice dhe Bob kishin dĂ«gjuar pĂ«r disa vite pĂ«r proceset e bazuara nĂ« Git, DevOps dhe infrastructure as code. Veçoria e GitOps Ă«shtĂ« se ai sjell njĂ« sĂ«rĂ« praktikash mĂ« tĂ« mira â kategorike dhe normuese â pĂ«r implementimin e kĂ«tyre ideve nĂ« kontekstin e Kubernetes. Ky temĂ« , pĂ«rfshirĂ« nĂ« .
Family Insurance vendos tĂ« implementojĂ« GitOps. Tani kompania ka njĂ« model tĂ« automatizuar operimi, tĂ« pĂ«rputhshĂ«m me Kubernetes dhe qĂ« kombinon ŃĐșĐŸŃĐŸŃŃŃ me me stabilitetin, pasi ata:
- zbuluan se produktiviteti i ekipit u dyfishua dhe askush nuk po shpërthehet kështu.
- ndaluan suportin pĂ«r skriptet. NĂ« vend tĂ« kĂ«saj, ata tani mund tĂ« pĂ«rqendrohen nĂ« funksionalitete tĂ« reja dhe tĂ« pĂ«rmirĂ«sojnĂ« metodat inxhinierike â pĂ«r shembull, tĂ« implementojnĂ« lĂ«shime tĂ« kanarinave dhe tĂ« pĂ«rmirĂ«sojnĂ« testimin;
- pĂ«rmirĂ«suan procesin e shpĂ«rndarjes â tani ai rrallĂ« dĂ«shton;
- fituan mundësinë për të rikuperuar shpërndarjet pas dështimeve të pjesshme pa ndërhyrje manuale;
- fituan mëoshumë besim në sistemet e dorëzimit. Alisa dhe Bobi zbuluan se mund të ndanin ekipin në grupe që merren me mikroshërbime dhe punojnë paralelisht;
- mund të bëjnë nga 30-50 ndryshime në projekt çdo ditë me përpjekjet e çdo grupi dhe të provojnë teknika të reja;
- lehtë të tërheqin në projekt zhvillues të rinj, të cilët kanë mundësi të zbatojnë përditësime në prodhim me ndihmën e kërkesave tërheqëse brenda disa orësh;
- lehtĂ« kalojnĂ« auditet e SOC2 (pĂ«r t'u pĂ«rputhur me kĂ«rkesat e shĂ«rbimeve pĂ«r menaxhimin e sigurt tĂ« tĂ« dhĂ«nave; lexoni mĂ« shumĂ«, pĂ«r shembull, â shĂ«nim i pĂ«rkthyesit.).
ĂfarĂ« ndodhi?
GitOps është dy gjëra:
- Një model operimi për Kubernetes dhe cloud native. Ai ofron një set praktikash më të mira për shpërndarjen, menaxhimin dhe monitorimin e klasterëve dhe aplikacioneve të mbledhura në kontejnerë. Një përkufizim elegant në formën nga :
- Një rrugë për të krijuar një mjedis të orientuar ndaj zhvilluesve për menaxhimin e aplikacioneve. Ne përdorim fluksin e punës Git si për operimin ashtu edhe për zhvillimin. Vini re se nuk bëhet fjalë vetëm për Git push, por për organizimin e të gjithë grupit të mjeteve CI/CD dhe UI/UX.
Një fjalë për Git
Nëse nuk keni njohuri për sistemet e kontrollit të versioneve dhe fluksin e punës të bazuar në Git, ne rekomandojmë me ngulm të mësoni për to. Në fillim, puna me degët dhe kërkesat e tërheqjes mund të duket magji e zezë, por përfitimet ia vlejnë përpjekjeve të sakrifikuara. Ja për fillimin.
Si funksionon Kubernetes
NĂ« historinĂ« tonĂ«, Alisa dhe Bobi iu drejtuan GitOps, pasi punuan pĂ«r njĂ« kohĂ« me Kubernetes. Me tĂ« vĂ«rtetĂ«, GitOps Ă«shtĂ« ngushtĂ«sisht i lidhur me Kubernetes â Ă«shtĂ« njĂ« model operimi pĂ«r infrastrukturĂ«n dhe aplikacionet qĂ« mbĂ«shteten nĂ« Kubernetes.
ĂfarĂ« i ofron Kubernetes pĂ«rdoruesve?
Këtu janë disa nga mundësitë kryesore:
- Në modelin e Kubernetes, gjithçka mund të përshkruhet në një formë deklarative.
- API-serveri i Kubernetes pranon këtë deklaratë si input dhe pastaj vazhdimisht përpiqet ta sjellë klasterin në gjendjen e përshkruar në deklaratë.
- Deklaratat mjaftojnĂ« pĂ«r tĂ« pĂ«rshkruar dhe menaxhuar njĂ« gamĂ« tĂ« gjerĂ« ngarkesash pune â "aplikacione".
- Si rezultat, ndryshimet në aplikacion dhe klaster ndodhin nga:
- ndryshime në imazhet e kontejnerëve;
- ndryshime në specifikimin deklarativ;
- gabimet nĂ« mjedis â pĂ«r shembull, rĂ«niet e kontejnerĂ«ve.
Aftësitë e shkëlqyera të konvergjencës së Kubernetes
Kur një administrator bën ndryshime në konfigurim, orkestratori i Kubernetes do t'i aplikojë ato në klaster derisa gjendja e tij të afrohet me konfigurimin e ri.Ky model funksionon për çdo burim Kubernetes dhe zgjeron me anë të Custom Resource Definitions (CRDs). Prandaj, shpërndarjet e Kubernetes kanë këto veçori të mrekullueshme:
- Automatizimi: përditësimet e Kubernetes ofrojnë një mekanizëm për automatizimin e procesit të aplikimit të ndryshimeve në mënyrë të saktë dhe me kohë.
- Konvergjenca: Kubernetes do të vazhdojë të përpiqet për përditësime deri në arritjen e suksesit.
- Idempotentizmi: ripërsëritjet e konvergjencës sjellin të njëjtin rezultat.
- Determinizmi: në kushte të mjaftueshme, gjendja e të përditësuarit të klasterit varet vetëm nga gjendja e dëshiruar.
Si funksionon GitOps
Ne mësuam mjaft për Kubernetes për të shpjeguar principet e funksionimit të GitOps.
Le tĂ« kthehemi te ekipet e Family Insurance, tĂ« lidhura me mikroshĂ«rbimet. ĂfarĂ« duhet tĂ« bĂ«jnĂ« zakonisht ato? Shikoni listĂ«n mĂ« poshtĂ« (nĂ«se disa pika nĂ« tĂ« duken tĂ« çuditshme ose tĂ« panjohura â ju lutemi, prisni pak me kritikat dhe mbeteni me ne). KĂ«to janĂ« thjesht shembuj tĂ« flukseve tĂ« punĂ«s me bazĂ« Jenkins. Ka edhe shumĂ« procese tĂ« tjera kur punoni me mjete tĂ« tjera.
E rëndësishmja është, ne shohim se çdo përditësim përfundon me ndryshime në skedarët e konfigurimit dhe depozitat Git. Këto ndryshime në Git çojnë në këtë mënyrë që "operatori GitOps" përditëson klasterin:
1. Fluksi i punĂ«s: "NdĂ«rtimi Jenkins â dega master».
Lista e detyrave:
- Jenkins dërgon imazhe të etiketuara në Quay;
- Jenkins dërgon konfigurimin dhe diagramet Helm në bucket-in e master-it;
- Funksioni i rethit kopjon konfigurimin dhe diagramet nga bucket-i i master-it në depozitën Git master;
- Operatori GitOps përditëson klasterin.
2. NdĂ«rtimi Jenkins â dega e lĂ«shimit ose hotfix:
- Jenkins dërgon imazhe të paetiketuara në Quay;
- Jenkins dërgon konfigurimin dhe diagramet Helm në bucket-in staging;
- Funksioni në re kopjon konfigurimin dhe diagramet nga depoja staging në Git-repozitorinë staging;
- Operatori GitOps përditëson klasterin.
3. Konstruksioni Jenkins â dega develop ose feature:
- Jenkins dërgon imazhe të paetiketuara në Quay;
- Jenkins shton konfigurimin dhe diagramet Helm në depozitën develop;
- Funksioni në re kopjon konfigurimin dhe diagramet nga depoja develop në Git-repozitorinë develop;
- Operatori GitOps përditëson klasterin.
4. Shtimi i klientit të ri:
- Menaxheri ose administratori (LCM/ops) thërret Gradle për shpërndarjen e parë dhe konfigurimin e balancuesve të ngarkesës (NLB);
- LCM/ops angazhon konfigurimin e ri për përgatitjen e shpërndarjes për përditësimet;
- Operatori GitOps përditëson klasterin.
Përshkrimi i shkurtër të 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 përcakton të gjithë konfigurimin e sistemit në Git).
- Git-repozitorie është burimi i vetëm i të vërtetës në lidhje me gjendjen e dëshiruar të gjithë sistemit.
- Të gjitha ndryshimet në gjendjen e dëshiruar realizohen përmes angazhimeve në Git.
- Të gjithë parametrat e dëshiruar të klasterit janë gjithashtu të vëzhgueshëm brenda vetë klasterit. Kështu, ne mund të përcaktojmë nëse gjendja e dëshiruar dhe e vëzhguar janë në përputhje (konvergojnë, converge) ose ndryshojnë (divergojnë, diverge) gjendja e dëshiruar dhe e vëzhguar.
- Nëse gjendja e dëshiruar dhe e vëzhguar ndryshon, atëherë:
- Ekziston një mekanizëm konvergjence, i cili, njëherë e një kohë, do të sinkronizojë automatikisht gjendjen e synuar dhe gjendjen e vëzhguar. Brenda klasterit, kjo merret nga Kubernetes.
- Procesi niset menjëherë me njoftimin "ndryshimi është angazhuar".
- Pas një intervali të caktuar kohor, mund të dërgohet një njoftim "dif", nëse gjendjet ndryshojnë.
- Kështu, të gjitha angazhimet në Git shkaktuan përditësime verifikueshëm dhe idempotente në klaster.
- Rivendosja është një konvergjencë në një gjendje të dëshiruar më parë.
- Konvergjenca është përfundimtare. Të dhënat për këtë tregojnë:
- Mungesa e njoftimeve "dif" për një periudhë të caktuar kohore.
- Njoftimi "konverguar" (p.sh., webhook, ngjarje Git writeback).
ĂfarĂ« Ă«shtĂ« divergjenca?
Për ta përsëritur përsëri: të gjitha pronat e dëshiruara të klasterit duhet të jenë të vëzhgueshme brenda klasterit.
Disa shembuj të divergjencës:
- Ndryshimi në skedarin e konfigurimit për shkak të bashkimit të degëve në Git.
- Ndryshimi në skedarin e konfigurimit për shkak të angazhimit në Git, të bërë nga një klient GUI.
- Shumë ndryshime në gjendjen e dëshiruar për shkak të PR në Git me ndërtimin e mëvonshëm të imazhit të kontejnerit dhe ndryshimeve në konfigurim.
- Ndryshimi i gjendjes së klasterit për shkak të gabimit, konfliktit të burimeve, që çon në "sjellje të keqe", ose thjesht devijimit të rastësishëm nga gjendja origjinale.
ĂfarĂ« paraqet njĂ« mekanizĂ«m konvergjence?
Disa shembuj:
- Për kontejnerët dhe klasterët, mekanizmi i konvergjencës ofrohet nga Kubernetes.
- I njëjti mekanizëm mund të përdoret për menaxhimin e aplikacioneve dhe strukturave të bazuara në Kubernetes (p.sh., Istio dhe Kubeflow).
- Mekanizmi për menaxhimin e ndërveprimeve të punës midis Kubernetes, depozitave të imazheve dhe Git-it ofron , që është pjesë e .
- Për makinat bazë, mekanizmi i konvergjencës duhet të jetë deklarativ dhe autonom. Nga përvoja jonë, mund të themi se është më afër kësaj përkufizimi, megjithatë, kërkon akoma kontroll nga një person. Në këtë kuptim, GitOps zgjeron traditat e Infrastructure as Code.
GitOps bashkon Git me një mekanizëm të shkëlqyer konvergjence të Kubernetes, duke ofruar një model për eksploitimin.
GitOps na lejon të deklarojmë: automatikë dhe kontrolli u nënshtruan vetëm atyre sistemeve që mund të përshkruhen dhe vëzhgohen.
GitOps është për të gjithë stakun cloud native (p.sh., Terraform etj.)
GitOps nuk Ă«shtĂ« vetĂ«m Kubernetes. Ne duam qĂ« i gjithĂ« sistemi tĂ« menaxhohet nĂ« mĂ«nyrĂ« deklarative dhe tĂ« pĂ«rdorĂ« konvergjencĂ«n. Nga gjithĂ« sistemi, ne nĂ«nkuptojmĂ« njĂ« pĂ«rmbledhje tĂ« mjediseve qĂ« punojnĂ« me Kubernetes â p.sh., "dev cluster 1", "produksioni" etj. NĂ« çdo mjedis pĂ«rfshihen makina, klasterĂ«, aplikacione, si dhe ndĂ«rfaqet pĂ«r shĂ«rbimet e jashtme qĂ« ofrojnĂ« tĂ« dhĂ«na, monitorim etj.
Vini re se sa e rëndësishme është Terraform për problemin e bootstrapping. Kubernetes duhet të jetë diku i vendosur, dhe përdorimi i Terraform do të thotë se ne mund të përdorim të njëjtat procese GitOps për të ndërtuar shtresën menaxhuese, që qëndron në bazë të Kubernetes dhe aplikacioneve. Kjo është një praktikë e mirë e dobishme.
Një vëmendje e madhe i kushtohet aplikimit të koncepteve të GitOps në shtresat mbi Kubernetes. Deri tani, ka zgjidhje të tipit GitOps për Istio, Helm, Ksonnet, OpenFaaS dhe Kubeflow, si dhe për shembuj, 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 eksploitimi për Kubernetes dhe cloud native, i përshkruar më sipër.
- Një rrugë për organizimin e një ambienti të orientuar ndaj zhvilluesve për menaxhimin e aplikacioneve.
Për shumë, GitOps është kryesisht një proces pune i bazuar në Git push. Ne e pëlqejmë atë gjithashtu. Por kjo nuk është gjithçka: le të shikojmë tani pipeline-t e CI/CD.
GitOps siguron shpërndarje të vazhdueshme (CD) nën Kubernetes
GitOps ofron një mekanizëm për shpërndarje të vazhdueshme që eliminon nevojën për "sisteme menaxhimi të shpërndarjeve" të veçanta. E gjithë punën e bën Kubernetes.
- Përditësimi i aplikacionit kërkon një përditësim në Git. Ky është një përditësim tranzaksional në gjendjen e dëshiruar. "Shpërndarja" pastaj kryhet brenda klasterit nga Kubernetes vetë në bazë të shtesave të përditësuara.
- Për shkak të natyrës së punës së Kubernetes, këto përditësime janë konvergjente. Kjo siguron një mekanizëm për shpërndarje të vazhdueshme, ku të gjitha përditësimet janë atomike.
- Shënim: ofron një operator GitOps, që integron Git dhe Kubernetes dhe lejon ekzekutimin e CD duke përputhur gjendjen e dëshiruar me atë aktuale të klasterit.
Pa kubectl dhe skenarë
Duhet të shmangen përdorimi i Kubectl për përditësimin e klasterit, sidomos skenarët për grupimin e komandave kubectl. Në vend të kësaj, me anë të pipeline të GitOps, përdoruesi mund të përditësojë klasterin e tij Kubernetes përmes Git.
Përparësitë përfshijnë:
- Saktësia. Një grup përditësimesh mund të aplikohet, të konvergojë dhe përfundimisht të validizohet, duke na afruar me qëllimin e shpërndarjes atomike. Në anën tjetër, përdorimi i skripteve nuk jep asnjë garanci konvergjence (më shumë për këtë më poshtë).
- Siguria. Kelsey Hightower: "Kufizoni aksesin në klasterin Kubernetes për mjetet e automatizimit dhe administratorët që kanë për detyrë ta rregullojnë ose ta mbajnë në punë." Shih gjithashtu për sigurinë dhe përputhshmërinë me standardet teknike, si dhe përmes vjedhjes së kredencialeve nga një skenar Jenkins i heshtur.
- Përvoja e përdoruesit. Kubectl zbulohet mekanika e modelit objektiv të Kubernetes, i cili është mjaft kompleks. Idealisht, përdoruesit duhet të ndërveprojnë me sistemin në një nivel më të lartë abstraksioni. Këtu do të citoj përsëri Kelsey dhe rekomandoj të shikoni .
Dallimi mes CI dhe CD
GitOps përmirëson modelet ekzistuese të CI/CD.
Një server modern CI është një mjet për orkestrimin. Saktësisht, është një mjet për orkestrimin e pipeline-t CI. Këto përfshijnë ndërtimin, testimin, bashkimin në trunk etj. Serverët CI automatizojnë menaxhimin e pipeline-ve të komplikuara me shumë hapa. Një tundim i zakonshëm është për të krijuar një skenar për një grup përditësimesh Kubernetes dhe ta ekzekutojë atë si një pjesë të pipeline për të pushuar ndryshimet në klaster. Në të vërtetë, shumë specialistë e bëjnë këtë. Sidoqoftë, kjo nuk është optimale, dhe ja pse.
CI duhet të përdoret për të bërë përditësime në trunk, dhe klasteri Kubernetes duhet ta ndryshojë veten në bazë të këtyre përditësimeve për të menaxhuar CD "brenda". Ne e quajmë këtë , në kundërshtim me modelin e CI push. CD është pjesë e orkestrimit në kohë.
Pse serverët CI nuk duhet të kryejnë CD përmes përditësimeve të drejtpërdrejta në Kubernetes
Mos e përdorni serverin CI për të orkestruar përditësime të drejtpërdrejta në Kubernetes si një grup detyrash CI. Kjo është një anti-model, për të cilin ne në blogun tonë.
Le të kthehemi te Alisa dhe Boba.
Me çfarë problemeve janë përballur ata? Serveri CI i Bobit aplikon ndryshimet në klaster, por nëse gjatë procesit ai dështoi, Bobi nuk do të dijë në çfarë gjendjeje është (apo duhet të jetë) klasteri dhe si ta rregullojë atë. E njëjta gjë është e vërtetë dhe në rast suksesi.
Le të supozojmë se ekipi i Bobit ka ndërtuar një imazh të ri dhe pastaj e ka ndërlidhur shpërndarjet e tij për të shpërndarë imazhin (të gjitha këto nga pipeline CI).
Nëse imazhi ngarkohet normalisht, por pipeline dështoi, ekipi do të duhet të zbulojë:
- A u shpërndan përditësimi?
- A po ekzekutojmë një ndërtim të ri? A do të çojë kjo në efekte anësore të panevojshme - me mundësinë e marrjes së dy ndërtimeve të të njëjtit imazh të pandryshuar?
- A duhet të presim një tjetër përditësim para se të ekzekutojmë ndërtimin?
- ĂfarĂ« saktĂ«sisht shkoi keq? CilĂ«t hapa duhet tĂ« pĂ«rsĂ«riten (dhe cilĂ«t prej tyre mund tĂ« pĂ«rsĂ«riten me siguri)?
Organizimi i një procesi pune të bazuar në Git nuk garanton që ekipi i Bobit nuk do të përballet me këto probleme. Ata përsëri mund të bëjnë gabime me push-in e commit-it, me tag-un ose ndonjë parametër tjetër; megjithatë, ky qasje është shumë më afër një qasje të qartë all-or-nothing.
Për të përmbledhur, ja pse serverët CI nuk duhet të merren me CD:
- Skripti i përditësimit nuk është gjithmonë i përcaktuar; është e lehtë për të bërë gabime.
- Serverët CI nuk konvergojnë në modelin deklarativ të klasterit.
- Eshte e vështirë të garantosh idempotencën. Përdoruesit duhet të kuptojnë semantikën e thellë të sistemit.
- është më e vështirë të kryhet rikuperimi pas një dështimi të pjesshëm.
Shënim mbi Helm: nëse dëshironi të përdorni Helm, ne rekomandojmë ta kombinoni me një operator GitOps, siç është . Kjo do të ndihmojë në sigurimin e konvergjencës. Në vetvete, Helm nuk është as determinist, as atomic.
GitOps si mënyra më e mirë për të realizuar Continuous Delivery për Kubernetes.
Ekipa e Alice dhe Bob po implementon GitOps dhe zbulon se është shumë më e lehtë të punosh me produktet software, duke mbajtur një performancë të lartë dhe stabilitet. Le të përfundojmë këtë artikull me ilustrime që tregojnë se si duket qasja e tyre e re. Mbani mend, ne po flasim kryesisht për aplikacione dhe shërbime, megjithatë GitOps mund të përdoret për menaxhimin e tërë platformës.
Modeli i operimit për Kubernetes.
Shikoni diagramin e mëposhtëm. Ai paraqet Git dhe depot e imazheve të konteinerëve si burime të zakonshme për dy ciklet e orkestruar:
- Pipeline i integrimit të vazhdueshëm, i cili lexon dhe shkruan skedarë në Git dhe mund të azhurnohet depoja e imazheve të konteinerëve.
- Pipeline i Runtime GitOps, që kombinon deploy-in me menaxhimin dhe vëzhgimin. Ai lexon dhe shkruan skedarë në Git dhe mund të ngarkojë imazhe konteinerësh.
Cilat janë përfundimet kryesore?
- Ndara e problemeve: Vini re se të dy pipeline-t mund të shkëmbejnë të dhëna duke azhurnuar vetëm Git-in ose depot e imazheve. Në fjalë të tjera, ekziston një firewall në mes CI dhe ambientit të runtime. Ne e quajmë këtë "firewall të pavendosshmërisë" (immutability firewall), pasi të gjitha azhurnimet e depove krijojnë versione të reja. Për informacion shtesë mbi këtë temë, ju lutemi referojuni faqeve 72-87. .
- Mund të përdoret ç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, depot e imazheve dhe paketat e testimeve. Praktikisht të gjitha mjetet e tjera për Continuous Delivery në treg kërkojnë CI-/Git-serverin e tyre ose deposit e imazheve. Kjo mund të bëhet një faktor përcaktues në zhvillimin e cloud native. Në rastin e GitOps, ju mund të përdorni mjetet që keni zakon.
- Ngjarjet si njĂ« mjet integrimi: Sa herĂ« qĂ« tĂ« dhĂ«nat nĂ« Git azhurnohet, Weave Flux (ose operatori Weave Cloud) e informon kĂ«tĂ« runtime. Ădo herĂ« qĂ« Kubernetes pranon njĂ« grup ndryshimesh, Git azhurnohet. Kjo siguron njĂ« model tĂ« thjeshtĂ« integrimi pĂ«r organizimin e proceseve pĂ«r GitOps, siç tregohet mĂ« poshtĂ«.
Përfundimi
GitOps ofron garantion e rëndësishme të azhurnimit, e nevojshme për çdo mjet modern CI/CD:
- automatik;
- konvergjencë;
- idempotencë;
- determinizëm.
Kjo është e rëndësishme pasi ofron një model operativ për zhvilluesit në fushën e cloud native.
- Mjetet tradicionale pĂ«r menaxhimin dhe vĂ«zhgimin e sistemeve janĂ« tĂ« lidhura me ekipet e operacioneve qĂ« veprojnĂ« brenda njĂ« runbook-u (grupi i procedurave rutinore dhe operacioneve â shĂ«nim i pĂ«rkthyesit), e lidhur me njĂ« deployment tĂ« caktuar.
- Në menaxhimin e sistemeve cloud native, mjetet për vëzhgimin janë mënyra më e mirë për të vlerësuar rezultatet e deployment-eve, në mënyrë që ekipi i zhvilluesve të mund të reagojë shpejt.
Imagjinoni shumë klasterë të shpërndarë në disa cloud dhe shumë shërbime me ekipet e tyre dhe planet e tyre të deployment-it. GitOps ofron një model të invariancës në shkallë 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 lutemi.
A e dinit për GitOps para këtyre dy përkthimeve në Habrë?
Po, e dija gjithçka
Vetëm sipërfaqësisht
Jo
35 përdorues votuan. 10 përdorues abstenuan.
Burimi: habr.com
