{"id":35941,"date":"2019-10-31T22:07:41","date_gmt":"2019-10-31T19:07:41","guid":{"rendered":"https:\/\/prohoster.info\/blog\/chto-zhe-takoe-gitops\/"},"modified":"2019-10-31T22:07:41","modified_gmt":"2019-10-31T19:07:41","slug":"chto-zhe-takoe-gitops","status":"publish","type":"post","link":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/chto-zhe-takoe-gitops","title":{"rendered":"Kas ir GitOps?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Piez\u012bme:<\/b>: P\u0113c nesen public\u0113t\u0101 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/456754\/\">materi\u0101la<\/a><\/noindex> par pull un push metod\u0113m GitOps, m\u0113s paman\u012bj\u0101m interesi par \u0161o modeli kopum\u0101, tom\u0113r krieviski rakst\u012btu publik\u0101ciju par \u0161o t\u0113mu bija pavisam maz (Habr\u0113 to vienk\u0101r\u0161i nav). T\u0101d\u0113\u013c esam priec\u012bgi pied\u0101v\u0101t jums p\u0101rtulkojum\u0101 citu rakstu \u2014 lai ar\u012b jau gandr\u012bz gada vecu! \u2014 no uz\u0146\u0113muma Weaveworks, kura vad\u012bt\u0101js izdom\u0101ja terminu \u201eGitOps\u201d. Tekst\u0101 tiek skaidrota pieejas b\u016bt\u012bba un galven\u0101s at\u0161\u0137ir\u012bbas no jau eksist\u0113jo\u0161\u0101m.<\/i><\/p>\n<p>\nPirms gada m\u0113s public\u0113j\u0101m <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-operations-by-pull-request\">ievadu GitOps<\/a><\/noindex>. Taj\u0101 m\u0113s st\u0101st\u012bj\u0101m, k\u0101 Weaveworks komanda uzs\u0101ka SaaS, kas piln\u012bb\u0101 balst\u0101s uz Kubernetes, un izstr\u0101d\u0101ja lab\u0101ko prakses noteikumu kopumu izvieto\u0161anai, p\u0101rvald\u012b\u0161anai un uzraudz\u012bbai cloud native vid\u0113.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Raksts izr\u0101d\u012bj\u0101s popul\u0101rs. Citi cilv\u0113ki s\u0101ka run\u0101t par GitOps, un s\u0101ka public\u0113t jaunus r\u012bkus <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/hasura\/gitkube\">git push<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/dzone.com\/articles\/weaveworks-gitops-developer-toolkit-part-one-skaff\">izstr\u0101dei<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/storing-secure-sealed-secrets-using-gitops\">nosl\u0113pumiem<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.alexellis.io\/introducing-openfaas-cloud\/\">funkcij\u0101m<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/jenkins.io\/blog\/2018\/03\/19\/introducing-jenkins-x\/\">past\u0101v\u012bgai integr\u0101cijai<\/a><\/noindex> un taml\u012bdz\u012bgi. M\u016bsu vietn\u0113 par\u0101d\u012bj\u0101s <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/category\/gitops\/\">liels daudzums<\/a><\/noindex> publik\u0101cijas un GitOps izmanto\u0161anas piem\u0113ri. Bet da\u017eiem cilv\u0113kiem tom\u0113r palika jaut\u0101jumi. K\u0101 \u0161is modelis at\u0161\u0137iras no tradicion\u0101l\u0101s <noindex><a rel=\"nofollow\" href=\"https:\/\/puppet.com\/blog\/a-deployment-pipeline-for-infrastructure-a-devops-case-study-at-nbn\">infrastructure as code<\/a><\/noindex> un past\u0101v\u012bgas pieg\u0101des (<noindex><a rel=\"nofollow\" href=\"https:\/\/puppet.com\/blog\/a-deployment-pipeline-for-infrastructure-a-devops-case-study-at-nbn\">continuous delivery<\/a><\/noindex>)? Vai oblig\u0101ti j\u0101izmanto Kubernetes?<\/p>\n<p>Dr\u012bz vien m\u0113s saprat\u0101m, ka nepiecie\u0161ams jauns apraksts, kas pied\u0101v\u0101:<\/p>\n<ol>\n<li> Lielu piem\u0113ru un st\u0101stu daudzumu;<\/li>\n<li> Konkr\u0113tu GitOps defin\u012bciju;<\/li>\n<li> Sal\u012bdzin\u0101jumu ar tradicion\u0101lo continuous delivery.<\/li>\n<\/ol>\n<p>\n\u0160aj\u0101 rakst\u0101 m\u0113s cent\u0101mies aptvert visas \u0161\u012bs t\u0113mas. Taj\u0101 j\u016bs atrad\u012bsiet atjaunin\u0101tu ievadu GitOps un skat\u012bjumu uz to no izstr\u0101d\u0101t\u0101ju un CI\/CD puses. M\u0113s galvenok\u0101rt koncentr\u0113jamies uz Kubernetes, lai gan modeli piln\u012bgi var generaliz\u0113t.<\/p>\n<h2>Iepaz\u012bstieties: GitOps<\/h2>\n<p>\nIedom\u0101jieties Alisu. Vi\u0146a vada uz\u0146\u0113mumu Family Insurance, kas pied\u0101v\u0101 vesel\u012bbas, automobi\u013cu, nekustam\u0101 \u012bpa\u0161uma un ce\u013cojumu apdro\u0161in\u0101\u0161anas polises cilv\u0113kiem, kuri ir p\u0101r\u0101k aiz\u0146emti, lai pa\u0161i izprastu l\u012bgumu nianses. Vi\u0146as bizness s\u0101k\u0101s k\u0101 blakusprojekts, kad Alisa str\u0101d\u0101ja bank\u0101 k\u0101 datu zin\u0101tniece. K\u0101du dienu vi\u0146a saprata, ka var izmantot m\u016bsdien\u012bgas datoralgoritmus datu anal\u012bzes un apdro\u0161in\u0101\u0161anas risin\u0101jumu izveid\u0113. Investori finans\u0113ja projektu, un tagad vi\u0146as uz\u0146\u0113mums nopelna vair\u0101k nek\u0101 20 miljonus dol\u0101ru gad\u0101 un strauji aug. Patlaban taj\u0101 str\u0101d\u0101 180 cilv\u0113ku da\u017e\u0101d\u0101s poz\u012bcij\u0101s. Vi\u0146u vid\u016b ir tehnolo\u0123iju komanda, kas nodarbojas ar m\u0101jaslapas, datu b\u0101zes izstr\u0101di un klientu b\u0101zes anal\u012bzi. Komandu, kas sast\u0101v no 60 cilv\u0113kiem, vada Bobs \u2014 uz\u0146\u0113muma tehniskais direktors.<\/p>\n<p>Boba komanda izvieto produkcijas sist\u0113mas m\u0101ko\u0146os. Vi\u0146u galven\u0101s lietojumprogrammas darbojas uz GKE, g\u016bstot labumu no Kubernetes priek\u0161roc\u012bb\u0101m Google Cloud. Turkl\u0101t vi\u0146i izmanto da\u017e\u0101dus r\u012bkus datu apstr\u0101dei un anal\u012btikai.<\/p>\n<p>Family Insurance nepl\u0101noja izmantot konteinerus, ta\u010du ieguva entuziasmu ap Docker. Dr\u012bz vien uz\u0146\u0113muma speci\u0101listi atkl\u0101ja, ka GKE \u013cauj viegli un nesare\u017e\u0123\u012bti izv\u0113rst klasterus jaun\u0101s funkcionalit\u0101tes test\u0113\u0161anai. Tika pievienots Jenkins CI un Quay, lai organiz\u0113tu konteineru re\u0123istru, un uzrakst\u012bti skripti Jenkins, kas uzpushoja jaunus konteinerus un konfigur\u0101cijas GKE.<\/p>\n<p>Pag\u0101ja k\u0101ds laiks. Alise un Bobs bija v\u012blu\u0161ies izv\u0113l\u0113t\u0101s pieejas sniegum\u0101 un t\u0101s ietekm\u0113 uz biznesu. Kodek\u0146u ievie\u0161ana nebija palielin\u0101jusi produktivit\u0101ti tik \u013coti, cik cer\u0113ja komanda. Da\u017ek\u0101rt izv\u0113r\u0161ana sabruka, un nebija skaidrs, vai vainojamas kodu izmai\u0146as. Turkl\u0101t bija gr\u016bti izsekot konfigur\u0101ciju mai\u0146\u0101m. Bie\u017ei n\u0101c\u0101s izveidot jaunu klasteri un p\u0101rvietot taj\u0101 lietotnes, jo tas bija visviegl\u0101kais veids, k\u0101 izn\u012bcin\u0101t to haosu, kur\u0101 bija p\u0101rv\u0113rtusies sist\u0113ma. Alise baid\u012bj\u0101s, ka situ\u0101cija pasliktin\u0101sies, att\u012bstoties lietojumprogrammai (turkl\u0101t gras\u012bj\u0101s jauns projekts, kas balst\u012bts uz ma\u0161\u012bnm\u0101c\u012b\u0161anos). Bobs automatiz\u0113ja liel\u0101ko da\u013cu darba un nesaprata, k\u0101p\u0113c darba pl\u016bsma joproj\u0101m ir nestabila, slikti piel\u0101gojas un periodiski prasa manu\u0101ru iejauk\u0161anos?<\/p>\n<p><b>Tad vi\u0146i uzzin\u0101ja par GitOps. \u0160is risin\u0101jums izr\u0101d\u012bj\u0101s tie\u0161i tas, kas vi\u0146iem bija vajadz\u012bgs, lai dro\u0161i virz\u012btos uz priek\u0161u.<\/b><\/p>\n<p>Alise un Bobs jau vair\u0101ku gadu garum\u0101 bija dzird\u0113ju\u0161i par Git balst\u012btiem darba procesiem, DevOps un infrastrukt\u016bru k\u0101 kodu. GitOps unik\u0101lums ir taj\u0101, ka tas ievie\u0161 da\u017eas lab\u0101k\u0101s prakses \u2014 kategoriskas un normat\u012bvas \u2014 \u0161o ideju \u012bsteno\u0161an\u0101 Kubernetes kontekst\u0101. \u0160\u012b t\u0113ma <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/search?q=gitops&amp;src=typd\">ir atk\u0101rtoti apspriesta<\/a><\/noindex>, tostarp ar\u012b <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-high-velocity-cicd-for-kubernetes\">Weaveworks emu\u0101r\u0101.<\/a><\/noindex>.<\/p>\n<p>Family Insurance nolemj ieviest GitOps. Tagad uz\u0146\u0113mumam ir automatiz\u0113ta ekspluat\u0101cijas sist\u0113ma, kas ir sader\u012bga ar Kubernetes un apvieno <i>\u0101trums<\/i> ar <i>stabilit\u0101ti<\/i>, jo vi\u0146i:<\/p>\n<ul>\n<li> atkl\u0101ja, ka komandai ra\u017e\u012bgums divk\u0101r\u0161ojies, un neviens no t\u0101 nenokl\u012bst pr\u0101t\u0101;<\/li>\n<li> p\u0101rtrauca skriptu apkalpo\u0161anu. Tagad vi\u0146i var koncentr\u0113ties uz jaun\u0101m funkcij\u0101m un uzlabot in\u017eeniertehnisk\u0101s metodes \u2014 piem\u0113ram, ieviest kan\u0101riju izvietojumus un uzlabot test\u0113\u0161anu;<\/li>\n<li> uzlaboja izvietojumu procesu \u2014 tagad tas reti bija boj\u0101ts;<\/li>\n<li> ieguva iesp\u0113ju atjaunot izv\u0113r\u0161anas p\u0113c da\u013c\u0113jiem sabrukumiem bez manu\u0101ras iejauk\u0161an\u0101s;<\/li>\n<li> ieg\u016bta<i>o<\/i>liel\u0101ka p\u0101rliec\u012bba pieg\u0101des sist\u0113m\u0101s. Alise un Bobs atkl\u0101ja, ka var sadal\u012bt komandu grup\u0101s, kas nodarbojas ar mikropakalpojumiem un str\u0101d\u0101 paral\u0113li;<\/li>\n<li> var katru dienu veikt 30-50 izmai\u0146as projekt\u0101, ko veic katra grupa, un izm\u0113\u0123in\u0101t jaunas tehnikas;<\/li>\n<li> viegl\u0101k piesaist\u012bt jaunus izstr\u0101d\u0101t\u0101jus projektam, kuri var veikt atjaunin\u0101jumus produkcij\u0101 ar pull piepras\u012bjumiem jau da\u017eu stundu laik\u0101;<\/li>\n<li> viegl\u0101k iziet SOC2 auditu <i>(atbilst\u012bbu pakalpojumu sniedz\u0113ju pras\u012bb\u0101m attiec\u012bb\u0101 uz datu dro\u0161u p\u0101rvald\u012bbu; vair\u0101k lasiet, piem\u0113ram, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.imperva.com\/learn\/data-security\/soc-2-compliance\/\">\u0161eit<\/a><\/noindex> \u2014 piez\u012bme tulkot\u0101jam)<\/i>.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Kas notika?<\/h3>\n<p>\nGitOps \u2014 tas ir divas lietas:<\/p>\n<ol>\n<li> Ekspluat\u0101cijas modelis Kubernetes un cloud native. Tas nodro\u0161ina lab\u0101ko praksi kopumu, lai izvietotu, p\u0101rvald\u012btu un uzraudz\u012btu konteineros sav\u0101ktos klasterus un lietojumprogrammas. Eleganta defin\u012bcija vienas slide veid\u0101 <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/vitorsilva\/status\/999978906903080961\">viens slide<\/a><\/noindex> no <noindex><a rel=\"nofollow\" href=\"https:\/\/2018.agilept.org\/speaker_luis_faceira.html\">Luis Faceira<\/a><\/noindex>:\n<\/li>\n<li> Ce\u013c\u0161 uz izstr\u0101d\u0101t\u0101jiem draudz\u012bgas vides rad\u012b\u0161anu lietojumprogrammu p\u0101rvald\u012bbai. M\u0113s pielietojam Git darba pl\u016bsmu gan ekspluat\u0101cij\u0101, gan izstr\u0101d\u0113. \u0145emiet v\u0113r\u0101, ka \u0161eit nav runa tikai par Git push, bet gan par visu CI\/CD un UI\/UX r\u012bku kopuma organiz\u0113\u0161anu.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Da\u017eas domas par Git<\/h3>\n<p>\nJa neesat iepazinies ar versiju kontroles sist\u0113m\u0101m un Git balst\u012btu darba pl\u016bsmu, m\u0113s stingri iesak\u0101m t\u0101s izp\u0113t\u012bt. S\u0101kum\u0101 darbs ar zariem un pull piepras\u012bjumiem var \u0161\u0137ist tum\u0161a m\u0101ksla, ta\u010du ieguvumi ir t\u0101 v\u0113rti. \u0160eit <noindex><a rel=\"nofollow\" href=\"https:\/\/codeburst.io\/trunk-based-development-vs-git-flow-a0212a6cae64\">laba raksts<\/a><\/noindex> p\u0101ris padomi, lai s\u0101ktu.<\/p>\n<h2>K\u0101 darbojas Kubernetes<\/h2>\n<p>\nM\u016bsu st\u0101st\u0101 Alisa un Bobs piev\u0113rs\u0101s GitOps, p\u0113c tam, kad k\u0101du laiku str\u0101d\u0101ja ar Kubernetes. Patiesi, GitOps ir cie\u0161i saist\u012bts ar Kubernetes \u2014 t\u0101 ir ekspluat\u0101cijas modelis infrastrukt\u016brai un lietojumprogramm\u0101m, kas balst\u012btas uz Kubernetes.<\/p>\n<h3>Ko Kubernetes pied\u0101v\u0101 lietot\u0101jiem?<\/h3>\n<p>\n\u0160eit ir da\u017eas galven\u0101s iesp\u0113jas:<\/p>\n<ol>\n<li> Kubernetes model\u012b visu var aprakst\u012bt deklarat\u012bv\u0101 form\u0101.<\/li>\n<li> Kubernetes API serveris pie\u0146em \u0161\u0101dus deklar\u0113jumus k\u0101 ievadu, un tad past\u0101v\u012bgi m\u0113\u0123ina pan\u0101kt, lai klastera st\u0101voklis atbilstu deklar\u0101cijai.<\/li>\n<li> Deklar\u0101cijas ir pietiekamas, lai aprakst\u012btu un p\u0101rvald\u012btu pla\u0161u darba slodzi \u2014 \"lietojumprogrammas\".<\/li>\n<li> T\u0101d\u0113j\u0101di izmai\u0146as lietojumprogramm\u0101 un klaster\u012b notiek sakar\u0101 ar:\n<ul>\n<li> izmai\u0146\u0101m konteineru att\u0113los;<\/li>\n<li> izmai\u0146\u0101m deklarat\u012bvaj\u0101 specifik\u0101cij\u0101;<\/li>\n<li> k\u013c\u016bd\u0101m vid\u0113 \u2014 piem\u0113ram, konteineru av\u0101rij\u0101m.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><\/p>\n<h3>Kubernetes lielisk\u0101s konver\u0123ences sp\u0113jas<\/h3>\n<p>\nKad administrators veic izmai\u0146as konfigur\u0101cij\u0101, Kubernetes or\u0137estrators t\u0101s piem\u0113ros klasterim, l\u012bdz t\u0101 st\u0101voklis <i>tuvoj\u0101s jaunajai konfigur\u0101cijai<\/i>. \u0160is modelis str\u0101d\u0101 ar jebkuru Kubernetes resursu un papla\u0161in\u0101s ar Custom Resource Definitions (CRDs). T\u0101d\u0113j\u0101di Kubernetes izv\u0113r\u0161an\u0101m ir \u0161\u0101das br\u012bni\u0161\u0137\u012bgas \u012bpa\u0161\u012bbas:<\/p>\n<ul>\n<li> <b>Automatiz\u0101cija<\/b>: Kubernetes atjaunin\u0101jumi nodro\u0161ina meh\u0101nismu izmai\u0146u piem\u0113ro\u0161anas procesa automatiz\u0101cijai korekti un savlaic\u012bgi.<\/li>\n<li> <b>Konvergencija<\/b>: Kubernetes turpin\u0101s m\u0113\u0123in\u0101t atjaunin\u0101jumus l\u012bdz tiek pan\u0101kta veiksme.<\/li>\n<li> <b>Idempotence<\/b>: atk\u0101rtoti konver\u0123\u0113jo\u0161u piem\u0113ro\u0161anu rezult\u0101ts ir tas pats.<\/li>\n<li> <b>Determinisms<\/b>: ja resursi ir pietiekami, atjaunin\u0101t\u0101 klastera st\u0101voklis ir atkar\u012bgs tikai no v\u0113lam\u0101 st\u0101vok\u013ca.<\/li>\n<\/ul>\n<p><\/p>\n<h2>K\u0101 darbojas GitOps<\/h2>\n<p>\nM\u0113s pietiekami esam uzzin\u0101ju\u0161i par Kubernetes, lai izskaidrotu GitOps darb\u012bbas principus.<\/p>\n<p>P\u0101riesim atpaka\u013c pie Family Insurance komand\u0101m, kuras saist\u012btas ar mikroservisiem. Ar ko vi\u0146\u0101m parasti n\u0101kas saskarties? Apskatiet sarakstu zem\u0101k (ja k\u0101di punkti \u0161\u0137iet sve\u0161i vai d\u012bvaini \u2014 l\u016bdzu, neizsaki kritiku un palieciet ar mums). Tas ir tikai piem\u0113ru darba procesi, pamatojoties uz Jenkins. Past\u0101v ar\u012b daudzi citi procesi, str\u0101d\u0101jot ar cit\u0101m r\u012bkiem.<\/p>\n<p>Galvenais \u2014 m\u0113s redzam, ka katrs atjaunin\u0101jums beidzas ar izmai\u0146\u0101m konfigurations failos un Git repozitorijos. \u0160\u012bs izmai\u0146as Git ved pie tam, ka \"GitOps operators\" atjaunina klasteri:<\/p>\n<p>1. Darba process: \"<i>Jenkins b\u016bve \u2014 master zars<\/i>\u00bb.<br \/>\nUzdevumu saraksts:<\/p>\n<ul>\n<li> Jenkins uzpusho mar\u0137\u0113tas versijas Quay;<\/li>\n<li> Jenkins uzpusho konfigur\u0101ciju un Helm chartus master glab\u0101tav\u0101;<\/li>\n<li> M\u0101ko\u0146a funkcija kop\u0113 konfigur\u0101ciju un diagrammas no master kr\u0101tuves uz Git reposit\u0101riju master;<\/li>\n<li> GitOps operators atjaunina klasteri.<\/li>\n<\/ul>\n<p>\n2. <i>Jenkins b\u016bve \u2014 release vai hotfix zars<\/i>:<\/p>\n<ul>\n<li> Jenkins uzpusho nemar\u0137\u0113tas versijas Quay;<\/li>\n<li> Jenkins uzpusho konfigur\u0101ciju un Helm chartus staging glab\u0101tav\u0101;<\/li>\n<li> M\u0101ko\u0146a funkcija kop\u0113 konfigur\u0101ciju un diagrammas no staging kr\u0101tuves uz Git reposit\u0101riju staging;<\/li>\n<li> GitOps operators atjaunina klasteri.<\/li>\n<\/ul>\n<p>\n3. <i>Jenkins b\u016bve \u2014 develop vai feature zars<\/i>:<\/p>\n<ul>\n<li> Jenkins uzpusho nemar\u0137\u0113tas versijas Quay;<\/li>\n<li> Jenkins uzpusho konfigur\u0101ciju un Helm chartus develop glab\u0101tav\u0101;<\/li>\n<li> M\u0101ko\u0146a funkcija kop\u0113 konfigur\u0101ciju un diagrammas no develop kr\u0101tuves uz Git reposit\u0101riju develop;<\/li>\n<li>GitOps operators atjaunina klasteri.<\/li>\n<\/ul>\n<p>\n4. <i>Jauna klienta pievieno\u0161ana<\/i>:<\/p>\n<ul>\n<li> P\u0101rvaldnieks vai administrators (LCM\/ops) izsauc Gradle, lai veiktu s\u0101kotn\u0113jo izvietojumu un iestat\u012btu t\u012bkla slodzes balans\u0113t\u0101jus (NLB);<\/li>\n<li> LCM\/ops pievieno jaunu konfigur\u0101ciju, lai sagatavotu izv\u0113r\u0161anu atjaunin\u0101jumiem;<\/li>\n<li> GitOps operators atjaunina klasteri.<\/li>\n<\/ul>\n<p><\/p>\n<h3>GitOps \u012bss apraksts<\/h3>\n<p><\/p>\n<ol>\n<li> Aprakstiet v\u0113lamo visa sist\u0113mas st\u0101vokli, izmantojot deklarat\u012bvus specifik\u0101cijas katram vid\u0113 (m\u016bsu st\u0101st\u0101 Boba komanda nosaka visu sist\u0113mas konfigur\u0101ciju Git).\n<ul>\n<li> Git repozitorijs ir vien\u012bgais paties\u012bbas avots attiec\u012bb\u0101 uz visp\u0101r\u0113jo sist\u0113mas st\u0101vokli.<\/li>\n<li> Visas izmai\u0146as v\u0113lamaj\u0101 st\u0101vokl\u012b tiek veiktas, paveicot komitus Git.<\/li>\n<li> Visi v\u0113lamie klastera parametri ir ar\u012b nov\u0113rojami pa\u0161\u0101 klaster\u012b. T\u0101d\u0113j\u0101di m\u0113s varam noteikt, vai tie sakr\u012bt (konver\u0123\u0113, <i>converge<\/i>) vai at\u0161\u0137iras (diverg\u0113, <i>diverge<\/i>) v\u0113lamais un nov\u0113rotais st\u0101voklis.<\/li>\n<\/ul>\n<\/li>\n<li> Ja v\u0113lamais un nov\u0113rotais st\u0101voklis at\u0161\u0137iras, tad:\n<ul>\n<li> Ir konver\u0123ences meh\u0101nisms, kas agr\u0101k vai v\u0113l\u0101k autom\u0101tiski sinhroniz\u0113s m\u0113r\u0137a un nov\u0113roto st\u0101vokli. Klastera iek\u0161ien\u0113 to nodro\u0161ina Kubernetes.<\/li>\n<li> Process tiek uzs\u0101kts nekav\u0113joties ar pazi\u0146ojumu \u00abizmai\u0146as apstiprin\u0101tas\u00bb.<\/li>\n<li> P\u0113c noteikta konfigur\u0113jama laika var tikt nos\u016bt\u012bts pazi\u0146ojums \u00abat\u0161\u0137ir\u012bba\u00bb, ja st\u0101vok\u013ci at\u0161\u0137iras.<\/li>\n<\/ul>\n<\/li>\n<li> T\u0101d\u0113j\u0101di visi komiti Git izraisa p\u0101rbaud\u0101mus un idempotentus atjaunin\u0101jumus klaster\u012b.\n<ul>\n<li>Atgrie\u0161an\u0101s ir konver\u0123ence uz iepriek\u0161\u0113jo v\u0113lamo st\u0101vokli.<\/li>\n<\/ul>\n<\/li>\n<li> Konver\u0123ence ir gal\u012bga. Par t\u0101s iest\u0101\u0161anos liecina:\n<ul>\n<li> Pazi\u0146ojumu \u00abat\u0161\u0137ir\u012bba\u00bb tr\u016bkums noteikt\u0101 laika period\u0101.<\/li>\n<li> Pazi\u0146ojums \u00abkonver\u0123\u0113ts\u00bb (piem\u0113ram, webhook, Git writeback notikums).<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><\/p>\n<h3>Kas ir divergences?<\/h3>\n<p>\nAtk\u0101rtojam v\u0113lreiz: <i>visi v\u0113lamie klastera \u012bpa\u0161\u012bbas ir nov\u0113rojamas pa\u0161\u0101 klaster\u012b<\/i>.<\/p>\n<p>Da\u017ei diversijas piem\u0113ri:<\/p>\n<ul>\n<li> Izmai\u0146as konfigur\u0101cijas fail\u0101, veicot zaru apvieno\u0161anu Git.<\/li>\n<li> Izmai\u0146as konfigur\u0101cijas fail\u0101, veicot Git komitu, izmantojot GUI klientu.<\/li>\n<li> Daudzveid\u012bgas izmai\u0146as v\u0113lamaj\u0101 st\u0101vokl\u012b, veicot PR Git ar sekojo\u0161u konteinera att\u0113la veido\u0161anu un izmai\u0146\u0101m konfigur\u0101cij\u0101.<\/li>\n<li> Klastera st\u0101vok\u013ca izmai\u0146as, kas rad\u012btas k\u013c\u016bdas, resursu konflikta d\u0113\u013c, kas noved pie \u00absliktas uzved\u012bbas\u00bb, vai vienk\u0101r\u0161i nejau\u0161as novirzes no s\u0101kotn\u0113j\u0101 st\u0101vok\u013ca.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Kas ir konver\u0123ences meh\u0101nisms?<\/h3>\n<p>\nDa\u017ei piem\u0113ri:<\/p>\n<ul>\n<li> Konteineriem un klasteriem konver\u0123ences meh\u0101nisms nodro\u0161ina Kubernetes.<\/li>\n<li> To pa\u0161u meh\u0101nismu var izmantot, lai p\u0101rvald\u012btu lietojumprogrammas un strukt\u016bras, kas balst\u012btas uz Kubernetes (piem\u0113ram, Istio un Kubeflow).<\/li>\n<li> R\u012bks, kas p\u0101rvalda darba mijiedarb\u012bbu starp Kubernetes, att\u0113lu kr\u0101tuvi un Git, nodro\u0161ina <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/weaveworks\/flux\">GitOps operators Weave Flux<\/a><\/noindex>, kas ir da\u013ca no <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.weave.works\/\">Weave Cloud<\/a><\/noindex>.<\/li>\n<li> Pamata meh\u0101nismam konver\u0123encei j\u0101b\u016bt deklarat\u012bvai un autonomai. No m\u016bsu pieredzes varam teikt, ka <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.gruntwork.io\/why-we-use-terraform-and-not-chef-puppet-ansible-saltstack-or-cloudformation-7989dad2865c\">Terraform<\/a><\/noindex> tuvojoties \u0161im defin\u012bcijai, tom\u0113r tam ir nepiecie\u0161ama cilv\u0113ka kontrole. \u0160aj\u0101 zi\u0146\u0101 GitOps papla\u0161ina trad\u012bcijas Infrastructure as Code.<\/li>\n<\/ul>\n<p>\nGitOps apvieno Git ar izcilu Kubernetes konver\u0123ences meh\u0101nismu, pied\u0101v\u0101jot modeli ekspluat\u0101cijai.<\/p>\n<p>GitOps \u013cauj mums apgalvot: <i>autom\u0101tikai un kontrolei pak\u013cautas ir tikai t\u0101s sist\u0113mas, kuras var aprakst\u012bt un nov\u0113rot<\/i>.<\/p>\n<h3>GitOps ir paredz\u0113ts visam cloud native stekam (piem\u0113ram, Terraform utt.)<\/h3>\n<p>\nGitOps nav tikai Kubernetes. M\u0113s v\u0113lamies, lai visa sist\u0113ma tiktu p\u0101rvald\u012bta deklarat\u012bvi un izmantotu konver\u0123enci. Ar visu sist\u0113mu m\u0113s dom\u0101jam vid\u0113, kas str\u0101d\u0101 ar Kubernetes \u2014 piem\u0113ram, \u00abdev cluster 1\u00bb, \u00abproduction\u00bb utt. Katra vid\u0113 ir iek\u013cautas ma\u0161\u012bnas, klasteri, lietojumprogrammas un interfeisi \u0101r\u0113jiem pakalpojumiem, kas nodro\u0161ina datus, monitoringu utt.<\/p>\n<p>Piev\u0113rsiet uzman\u012bbu tam, cik svar\u012bgs Terraform ir bootstrapping jaut\u0101jum\u0101. Kubernetes ir j\u0101b\u016bt izvietotam kaut kur, un Terraform izmanto\u0161ana noz\u012bm\u0113, ka m\u0113s varam pielietot tos pa\u0161us GitOps darba procesus, lai izveidotu p\u0101rvald\u012bbas sl\u0101ni, kas balst\u0101s uz Kubernetes un lietojumprogramm\u0101m. Tas ir noder\u012bgs lab\u0101kais prakses piem\u0113rs.<\/p>\n<p>Liela uzman\u012bba tiek piev\u0113rsta GitOps konceptu piem\u0113ro\u0161anai sl\u0101\u0146iem virs Kubernetes. \u0160obr\u012bd ir pieejami GitOps risin\u0101jumi, kas paredz\u0113ti Istio, Helm, Ksonnet, OpenFaaS un Kubeflow, k\u0101 ar\u012b piem\u0113ram, Pulumi, kas veido sl\u0101ni lietojumprogrammu izstr\u0101dei cloud native.<\/p>\n<h2>Kubernetes CI\/CD: sal\u012bdzin\u0101jums GitOps ar citiem pieejamajiem risin\u0101jumiem<\/h2>\n<p>\nK\u0101 jau tika min\u0113ts, GitOps ir divas lietas:<\/p>\n<ol>\n<li> Ekspluat\u0101cijas modelis Kubernetes un cloud native, kas aprakst\u012bts iepriek\u0161.<\/li>\n<li> Ce\u013c\u0161 uz izstr\u0101d\u0101t\u0101jiem orient\u0113tas vides izveidi lietojumprogrammu p\u0101rvald\u012bbai.<\/li>\n<\/ol>\n<p>\nDaudziem GitOps ir pirmk\u0101rt Git push balst\u012bts darba process. Mums tas ar\u012b pat\u012bk. Bet tas nav viss: tagad apl\u016bkosim CI\/CD cauru\u013cvadus.<\/p>\n<h3>GitOps nodro\u0161ina nep\u0101rtrauktu izvieto\u0161anu (CD) Kubernetes ietvaros<\/h3>\n<p>\nGitOps pied\u0101v\u0101 nep\u0101rtrauktas izvieto\u0161anas meh\u0101nismu, kas izn\u012bcina atsevi\u0161\u0137u \u00abizvieto\u0161anas p\u0101rvald\u012bbas sist\u0113mu\u00bb nepiecie\u0161am\u012bbu. Visi darbi tiek veikti par jums, izmantojot Kubernetes.<\/p>\n<ul>\n<li> Lietojuma atjaunin\u0101\u0161ana prasa atjaunin\u0101jumus Git. Tas ir transakcijas atjaunin\u0101jums l\u012bdz v\u0113lamajam st\u0101voklim. \"Izvieto\u0161ana\" p\u0113c tam tiek veikta iek\u0161 Kubernetes kopas, pamatojoties uz atjaunin\u0101to aprakstu.<\/li>\n<li> D\u0113\u013c Kubernetes darba specifikas \u0161ie atjaunin\u0101jumi ir konver\u0123\u0113jo\u0161i. T\u0101d\u0113j\u0101di tiek nodro\u0161in\u0101ts meh\u0101nisms nep\u0101rtrauktai izvieto\u0161anai, kur\u0101 visi atjaunin\u0101jumi ir atomiski.<\/li>\n<li> Piez\u012bme: <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.weave.works\/\">Weave Cloud<\/a><\/noindex> pied\u0101v\u0101 GitOps operatoru, kas integr\u0113 Git un Kubernetes, un \u013cauj veikt CD, sal\u012bdzinot v\u0113lamo un eso\u0161o klastera st\u0101vokli.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Bez kubectl un skriptiem<\/h3>\n<p>\nJ\u0101izvair\u0101s no Kubectl izmanto\u0161anas klastera atjaunin\u0101\u0161anai, jo \u012bpa\u0161i no skriptiem, kas grup\u0113 kubectl komandas. T\u0101 viet\u0101, izmantojot GitOps cauru\u013cu sist\u0113mu, lietot\u0101js var atjaunin\u0101t savu Kubernetes klasteri caur Git.<\/p>\n<p>Priek\u0161roc\u012bbas ietver:<\/p>\n<ol>\n<li> <b>Precizit\u0101te<\/b>. Atjaunin\u0101jumu grupa var tikt pielietota, konver\u0123\u0113ta un visbeidzot valid\u0113ta, kas m\u016bs tuvin\u0101 pie atomisk\u0101 izvieto\u0161anas m\u0113r\u0137a. Savuk\u0101rt skriptu izmanto\u0161ana negarant\u0113 konver\u0123enci (vair\u0101k par to t\u0101l\u0101k).<\/li>\n<li> <b>Dro\u0161\u012bba<\/b>. <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/kelseyhightower\/status\/939003832805179392?lang=en\">Citu v\u0101rdu<\/a><\/noindex> Kelsey Hightower: \"Ierobe\u017eojiet piek\u013cuvi Kubernetes klasterim automatiz\u0101cijas r\u012bkiem un administratoriem, kuru pien\u0101kumos ir to atk\u013c\u016bdot vai uztur\u0113t darbsp\u0113ju\". Skat\u012bt ar\u012b <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-compliance-and-secure-cicd\">mani publik\u0101ciju<\/a><\/noindex> par dro\u0161\u012bbu un atbilst\u012bbu tehniskajiem nosac\u012bjumiem, k\u0101 ar\u012b <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@vesirin\/how-i-gained-commit-access-to-homebrew-in-30-minutes-2ae314df03ab\">rakstu par Homebrew uzlau\u0161anu<\/a><\/noindex> k\u0101 rezult\u0101t\u0101 no neuzman\u012bgi sast\u0101d\u012bta Jenkins skripta izkr\u0101pjot akredit\u0101cijas datus.<\/li>\n<li> <b>Lietot\u0101ja pieredze<\/b>. Kubectl atkl\u0101j Kubernetes objektu mode\u013ca meh\u0101niku, kas ir \u013coti sare\u017e\u0123\u012bta. Ide\u0101l\u0101 gad\u012bjum\u0101 lietot\u0101jiem vajadz\u0113tu mijiedarboties ar sist\u0113mu augst\u0101k\u0101 abstrakcijas l\u012bmen\u012b. \u0160eit es atkal atsauk\u0161os uz Kelsey un ieteik\u0161u apl\u016bkot <noindex><a rel=\"nofollow\" href=\"http:\/\/superuser.openstack.org\/articles\/kubernetes-boring\/\">\u0161\u0101du kopsavilkumu<\/a><\/noindex>.<\/li>\n<\/ol>\n<p><\/p>\n<h3>At\u0161\u0137ir\u012bba starp CI un CD<\/h3>\n<p>\nGitOps uzlabo eso\u0161\u0101s CI\/CD mode\u013cus.<\/p>\n<p>M\u016bsdienu CI serveris ir r\u012bks or\u0137estr\u0101cijai. Proti, tas ir r\u012bks CI cauru\u013cvadu or\u0137estr\u0101cijai. Tie ietver build, test, merge to trunk u.c. CI serveri automatiz\u0113 sare\u017e\u0123\u012btu daudzso\u013cu cauru\u013cvadu p\u0101rvald\u012bbu. Bie\u017ei vien k\u0101rdin\u0101jums ir izveidot skriptu Kubernetes atjaunin\u0101jumu kopumam un izpild\u012bt to k\u0101 elementu cauru\u013cvad\u0101, lai veiktu izmai\u0146u push kop\u0101. Paties\u012bb\u0101 t\u0101 dara daudzi speci\u0101listi. Tom\u0113r tas nav optim\u0101li, un \u0161eit ir iemesls.<\/p>\n<p>CI j\u0101izmanto, lai veiktu atjaunin\u0101jumus trunk, un Kubernetes klasterim j\u0101maina sevi, pamatojoties uz \u0161iem atjaunin\u0101jumiem, lai p\u0101rvald\u012btu CD \"iek\u0161\u0113ji\". M\u0113s to saucam par <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-compliance-and-secure-cicd\">pull modeli CD<\/a><\/noindex>, at\u0161\u0137ir\u012bb\u0101 no CI push mode\u013ca. CD ir da\u013ca no <i>runtime or\u0137estr\u0101cijas.<\/i>.<\/p>\n<h3>K\u0101p\u0113c CI serveriem nevajadz\u0113tu veikt CD, tie\u0161i atjauninot Kubernetes<\/h3>\n<p>\n<i>Neizmantojiet CI serveri, lai orkestr\u0113tu tie\u0161us atjaunin\u0101jumus Kubernetes k\u0101 CI uzdevumu kopumu. Tas ir pretparaugs, par kuru m\u0113s <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/kubernetes-anti-patterns-let-s-do-gitops-not-ciops\">jau st\u0101st\u012bj\u0101m<\/a><\/noindex> rakst\u012bj\u0101m sav\u0101 emu\u0101r\u0101.<\/i><\/p>\n<p>Atgriez\u012bsimies pie Alises un Boba.<\/p>\n<p>Ar k\u0101d\u0101m probl\u0113m\u0101m vi\u0146i sask\u0101r\u0101s? Boba CI servers piem\u0113ro izmai\u0146as klasterim, ta\u010du, ja vi\u0146\u0161 \u0161aj\u0101 proces\u0101 avar\u0113, Bobs nezina, k\u0101d\u0101 st\u0101vokl\u012b atrodas (vai tam vajadz\u0113tu b\u016bt) klasteris un k\u0101 to labot. Tas pats attiecas uz veiksm\u012bgu gad\u012bjumu.<\/p>\n<p>Pie\u0146emsim, ka Boba komanda ir izveidojusi jaunu att\u0113lu un p\u0113c tam ir veiku\u0161i labojumus savos izvietojumos, lai izplat\u012btu att\u0113lu (visi tas no CI cauru\u013cvada).<\/p>\n<p>Ja att\u0113ls tiek izveidots pareizi, bet cauru\u013cvads avar\u0113, komandai b\u016bs j\u0101noskaidro:<\/p>\n<ul>\n<li> Vai atjaunin\u0101jums ir izvietots?<\/li>\n<li> Vai m\u0113s palaid\u0101m jaunu versiju? Vai tas izrais\u012bs nevajadz\u012bgas blakuspar\u0101d\u012bbas \u2014 past\u0101v iesp\u0113ja ieg\u016bt divas versijas viena un t\u0101 pa\u0161a nemain\u012bg\u0101 att\u0113la? <\/li>\n<li> Vai mums j\u0101gaida n\u0101kamais atjaunin\u0101jums, pirms palaid\u0101m versiju?<\/li>\n<li> Kas tie\u0161i nenotika pareizi? K\u0101di so\u013ci j\u0101atk\u0101rto (un kuri no tiem var dro\u0161i atk\u0101rtot)?<\/li>\n<\/ul>\n<p>\n<i>Organiz\u0101cija, kas balst\u012bta uz Git darba procesu, negarant\u0113, ka Boba komanda nesaskarsies ar \u0161\u012bm probl\u0113m\u0101m. Vi\u0146i joproj\u0101m var k\u013c\u016bd\u012bties ar komite push, ar tagu vai citu parametru; tom\u0113r \u0161is pieejas veids ir daudz tuv\u0101k skaidriem visiem vai nekas.<\/i><\/p>\n<p>Kopsavilkum\u0101, \u0161eit ir iemesli, k\u0101p\u0113c CI serveriem nevajadz\u0113tu veikt CD:<\/p>\n<ul>\n<li> Atjaunin\u0101jumu skripti nav vienm\u0113r determin\u0113ti; tajos ir viegli pie\u013caut k\u013c\u016bdas.<\/li>\n<li> CI serveri nekonver\u0123\u0113 uz deklarat\u012bvo klastera modeli.<\/li>\n<li> Ir gr\u016bti garant\u0113t idempotent\u012bbu. Lietot\u0101jiem j\u0101iepaz\u012bstas ar sist\u0113mas dzi\u013co semantiku.<\/li>\n<li> Gr\u016bt\u0101k ir veikt atjauno\u0161anu p\u0113c da\u013c\u0113jas k\u013c\u016bmes.<\/li>\n<\/ul>\n<p>\n<i>Piez\u012bme par Helm: ja v\u0113laties izmantot Helm, m\u0113s iesak\u0101m to apvienot ar GitOps operatoru, piem\u0113ram, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/managing-helm-releases-the-gitops-way\">Flux-Helm<\/a><\/noindex>. Tas pal\u012bdz\u0113s nodro\u0161in\u0101t konver\u0123enci. Pats Helm nav ne determin\u0113ts, ne atom\u0101rs.<\/i><\/p>\n<h2>GitOps k\u0101 lab\u0101kais veids, k\u0101 \u012bstenot Continuous Delivery Kubernetes.<\/h2>\n<p>\nAlisas un Boba komanda ievie\u0161 GitOps un atkl\u0101j, ka ir daudz viegl\u0101k str\u0101d\u0101t ar programmat\u016bras produktiem, uztur\u0113t augstu veiktsp\u0113ju un stabilit\u0101ti. Nosl\u0113gsim \u0161o rakstu ar ilustr\u0101cij\u0101m, kur\u0101s par\u0101d\u012bts, k\u0101 izskat\u0101s vi\u0146u jaun\u0101 pieeja. \u0145emiet v\u0113r\u0101, ka m\u0113s galvenok\u0101rt run\u0101jam par lietojumprogramm\u0101m un pakalpojumiem, tom\u0113r GitOps var izmantot, lai p\u0101rvald\u012btu visu platformu.<\/p>\n<h3>Kubernetes ekspluat\u0101cijas modelis<\/h3>\n<p>\nPaskatieties uz n\u0101kamo diagrammu. T\u0101 att\u0113lo Git un konteineru att\u0113lu kr\u0101tuves k\u0101 kop\u012bgus resursus diviem koordin\u0113tiem dz\u012bves cikliem:<\/p>\n<ul>\n<li> Nep\u0101rtrauktas integr\u0101cijas pipeline, kas lasa un raksta failus Git un var atjaunin\u0101t konteineru att\u0113lu repozitoriju.<\/li>\n<li> Runtime GitOps pipeline, kas apvieno izvieto\u0161anu ar p\u0101rvald\u012bbu un nov\u0113rojam\u012bbu. Tas lasa un raksta failus Git un var aug\u0161upiel\u0101d\u0113t konteineru att\u0113lus.<\/li>\n<\/ul>\n<h3>K\u0101di ir galvenie secin\u0101jumi?<\/h3>\n<p><\/p>\n<ol>\n<li> <b>Probl\u0113mu sadal\u012b\u0161ana<\/b>: \u0145emiet v\u0113r\u0101, ka abi pipeline var apmain\u012bties ar datiem, tikai atjauninot Git vai att\u0113lu repozitoriju. Citiem v\u0101rdiem sakot, starp CI un runtime vidi past\u0101v ugunsm\u016bris, ko m\u0113s saucam par \u201enemain\u0101m\u012bbas ugunsm\u016bri\u201d <i>(immutability firewall)<\/i>, jo visi repozitoriju atjaunin\u0101jumi rada jaunas versijas. Papildu inform\u0101ciju par \u0161o t\u0113mu var atrast slaidos 72-87 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.slideshare.net\/weaveworks\/continuous-lifecycle-london-2018-event-keynote-97418556\">\u0161\u012bs prezent\u0101cijas<\/a><\/noindex>.<\/li>\n<li> <b>Var izmantot jebkuru CI un Git serveri<\/b>: GitOps darbojas ar jebkur\u0101m komponent\u0113m. J\u016bs varat turpin\u0101t izmantot savus iecien\u012bt\u0101kos CI un Git serverus, att\u0113lu repozitorijus un test\u0113\u0161anas komplektus. Praktiski visi citi instrumenti nep\u0101rtrauktai pieg\u0101dei tirg\u016b pieprasa savu CI\/Git serveri vai att\u0113lu kr\u0101tuvi. Tas var k\u013c\u016bt par ierobe\u017eojumu cloud native att\u012bst\u012bb\u0101. GitOps gad\u012bjum\u0101 j\u016bs varat izmantot ierast\u0101s r\u012bkus.<\/li>\n<li> <b>Notikumi k\u0101 integr\u0101cijas r\u012bks<\/b>: Tikl\u012bdz dati Git tiek atjaunin\u0101ti, Weave Flux (vai Weave Cloud operators) par to pazi\u0146o runtime. Katra reize, kad Kubernetes sa\u0146em izmai\u0146u kopumu, Git tiek atjaunin\u0101ts. Tas nodro\u0161ina vienk\u0101r\u0161u integr\u0101cijas modeli darba pl\u016bsm\u0101m GitOps, k\u0101 par\u0101d\u012bts zem\u0101k.<\/li>\n<\/ol>\n<h2>Secin\u0101jums<\/h2>\n<p>\nGitOps nodro\u0161ina svar\u012bgas garantijas atjaunin\u0101\u0161anai, kas nepiecie\u0161amas jebkuram modernam CI\/CD r\u012bkam:<\/p>\n<ul>\n<li> autom\u0101tika;<\/li>\n<li> konver\u0123ence;<\/li>\n<li> idempotentums;<\/li>\n<li> determinisms.<\/li>\n<\/ul>\n<p>\nTas ir svar\u012bgi, jo tas pied\u0101v\u0101 ekspluat\u0101cijas modeli izstr\u0101d\u0101t\u0101jiem \u043e\u0431\u043b\u0430\u043a native jom\u0101.<\/p>\n<ul>\n<li> Tradicion\u0101lie r\u012bki sist\u0113mu p\u0101rvald\u012bbai un uzraudz\u012bbai ir saist\u012bti ar oper\u0101ciju komand\u0101m, kas darbojas saska\u0146\u0101 ar runbook <i>(jeb ritu\u0101lo proced\u016bru un oper\u0101ciju kopuma \u2014 piez\u012bme tulkot\u0101jam.)<\/i>, kas ir piesaist\u012bts konkr\u0113tajam izvietojumam.<\/li>\n<li> Cloud native sist\u0113mu p\u0101rvald\u012bb\u0101 uzraudz\u012bbas r\u012bki ir lab\u0101kais veids, k\u0101 nov\u0113rt\u0113t deploy rezult\u0101tus, lai izstr\u0101d\u0101t\u0101ju komanda var\u0113tu \u0101tri rea\u0123\u0113t.<\/li>\n<\/ul>\n<p>\nIedom\u0101jieties daudzus klasterus, kas izkais\u012bti pa da\u017e\u0101diem m\u0101ko\u0146iem, un daudzus pakalpojumus ar sav\u0101m komand\u0101m un deployment pl\u0101niem. GitOps pied\u0101v\u0101 m\u0113rogam invariantu modeli, lai to visu p\u0101rvald\u012btu.<\/p>\n<h2>P.S. no tulka<\/h2>\n<p>\nLasiet ar\u012b m\u016bsu emu\u0101ra rakstos:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/456754\/\">GitOps: Pull un Push meto\u017eu sal\u012bdzin\u0101jums<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/434160\/\">Pied\u0101v\u0101jam bibliot\u0113ku kubedog resursu uzraudz\u012bbai Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/449096\/\">Papla\u0161in\u0101m un papildin\u0101m Kubernetes (p\u0101rskats un video prezent\u0101cija)<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p class=\"for_users_only_msg\">Tikai re\u0123istr\u0113tie lietot\u0101ji var piedal\u012bties aptauj\u0101. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Pieteikties<\/a><\/noindex>, l\u016bdzu.<\/p>\n<h2 class=\"default-block__polling-title\">Vai tu zin\u0101ji par GitOps v\u0113l pirms \u0161o divu tulkojumu par\u0101d\u012b\u0161an\u0101s h\u0101br\u0113?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    J\u0101, es visu zin\u0101ju.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Tikai virspus\u0113ji.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    N\u0113<\/p>\n<\/li>\n<\/ul>\n<p>    35 lietot\u0101ji nobalsoja. 10 lietot\u0101ji attur\u0113j\u0101s.<br \/>\n<br \/>Avots: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/458878\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043e \u043c\u0435\u0442\u043e\u0434\u0430\u0445 pull \u0438 push \u0432 GitOps \u043c\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043a \u044d\u0442\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u0446\u0435\u043b\u043e\u043c, \u043e\u0434\u043d\u0430\u043a\u043e \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0445 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439 \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u043c\u0430\u043b\u043e (\u043d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0438\u0445 \u043f\u043e\u043f\u0440\u043e\u0441\u0442\u0443 \u043d\u0435\u0442). \u041f\u043e\u0441\u0435\u043c\u0443 \u0440\u0430\u0434\u044b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u043f\u0443\u0441\u0442\u044c \u0438 \u0443\u0436\u0435 \u043f\u043e\u0447\u0442\u0438 \u0433\u043e\u0434\u0438\u0447\u043d\u043e\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438! \u2014 \u043e\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Weaveworks, \u0433\u043b\u0430\u0432\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-35941","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.5 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u043c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/chto-zhe-takoe-gitops\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"lv_LV\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0427\u0442\u043e \u0436\u0435 \u0442\u0430\u043a\u043e\u0435 GitOps? | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u043c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/chto-zhe-takoe-gitops\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:07:41+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:07:41+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Kas ir GitOps? | ProHoster","description":"Piez.","canonical_url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/chto-zhe-takoe-gitops","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"lv_LV","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0427\u0442\u043e \u0436\u0435 \u0442\u0430\u043a\u043e\u0435 GitOps? | ProHoster","og:description":"\u041f\u0440\u0438\u043c.","og:url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/chto-zhe-takoe-gitops","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:07:41+00:00","article:modified_time":"2019-10-31T19:07:41+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35941","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 01:21:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:53:31","updated":"2026-01-22 01:21:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/35941","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/comments?post=35941"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/35941\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media?parent=35941"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/categories?post=35941"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/tags?post=35941"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}