{"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\/sq\/blog\/administrirovanie\/chto-zhe-takoe-gitops","title":{"rendered":"\u00c7far\u00eb \u00ebsht\u00eb GitOps?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Sh\u00ebn. p\u00ebrkth.<\/b>: Pas publikimit t\u00eb fundit <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/456754\/\">materialit<\/a><\/noindex> p\u00ebr metodat pull dhe push n\u00eb GitOps, ne v\u00ebm\u00eb re nj\u00eb interes p\u00ebr k\u00ebt\u00eb model n\u00eb p\u00ebrgjith\u00ebsi, megjithat\u00eb, publikimet n\u00eb gjuh\u00ebn ruse mbi k\u00ebt\u00eb tem\u00eb ishin shum\u00eb t\u00eb pakta (n\u00eb Habra thjesht nuk kishte asnj\u00eb). Prandaj, jemi t\u00eb g\u00ebzuar t'ju ofrojm\u00eb p\u00ebrkthimin e nj\u00eb artikulli tjet\u00ebr \u2014 ndon\u00ebse tashm\u00eb pothuajse nj\u00eb vit i vjet\u00ebr! \u2014 nga kompania Weaveworks, kreu i s\u00eb cil\u00ebs shpiku termin \u00abGitOps\u00bb. N\u00eb tekst shpjegohet thelbi i qasjes dhe dallimet kryesore nga ato ekzistuese.<\/i><\/p>\n<p>\nNj\u00eb vit m\u00eb par\u00eb ne publikoi <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-operations-by-pull-request\">nj\u00eb hyrje n\u00eb GitOps<\/a><\/noindex>. At\u00ebher\u00eb ne treguam se si ekipi i Weaveworks lansoi nj\u00eb SaaS, t\u00ebr\u00ebsisht t\u00eb nd\u00ebrtuar mbi Kubernetes, dhe zhvilloi nj\u00eb set praktikash m\u00eb t\u00eb mira p\u00ebr implementimin, menaxhimin dhe monitorimin n\u00eb nj\u00eb mjedis cloud native.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Artikulli u b\u00eb popullor. T\u00eb tjer\u00eb filluan t\u00eb flasin p\u00ebr GitOps, t\u00eb publikojn\u00eb mjete t\u00eb reja p\u00ebr <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\">zhvillimin<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/storing-secure-sealed-secrets-using-gitops\">e sekret\u00ebve<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.alexellis.io\/introducing-openfaas-cloud\/\">funksione<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/jenkins.io\/blog\/2018\/03\/19\/introducing-jenkins-x\/\">integrimit t\u00eb vazhduesh\u00ebm<\/a><\/noindex> etj. N\u00eb faqen ton\u00eb u shfaq <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/category\/gitops\/\">nj\u00eb num\u00ebr i madh<\/a><\/noindex> publikimesh dhe rasteve t\u00eb p\u00ebrdorimit t\u00eb GitOps. Por disa njer\u00ebz vazhdojn\u00eb t\u00eb ken\u00eb pyetje. Si ndryshon modeli nga infrastruktura tradicionale si kod <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> dhe dor\u00ebzimi i vazhduesh\u00ebm (<noindex><a rel=\"nofollow\" href=\"https:\/\/puppet.com\/blog\/a-deployment-pipeline-for-infrastructure-a-devops-case-study-at-nbn\">continuous delivery<\/a><\/noindex>)? A \u00ebsht\u00eb e domosdoshme t\u00eb p\u00ebrdorim Kubernetes?<\/p>\n<p>S\u00eb shpejti ne kuptuam se nevojitet nj\u00eb p\u00ebrshkrim i ri, q\u00eb ofron:<\/p>\n<ol>\n<li> Nj\u00eb num\u00ebr t\u00eb madh shembujsh dhe historish;<\/li>\n<li> Nj\u00eb definicion t\u00eb sakt\u00eb t\u00eb GitOps;<\/li>\n<li> Krahasimi me dor\u00ebzimin tradicional t\u00eb vazhduesh\u00ebm.<\/li>\n<\/ol>\n<p>\nN\u00eb k\u00ebt\u00eb artikull ne p\u00ebrpiqemi t\u00eb mbulojm\u00eb t\u00eb gjitha k\u00ebto tema. N\u00eb t\u00eb do t\u00eb gjeni nj\u00eb hyrje t\u00eb p\u00ebrdit\u00ebsuar n\u00eb GitOps dhe nj\u00eb rreze p\u00ebr t\u00eb nga perspektiva e zhvilluesve dhe CI\/CD. Ne jemi kryesisht t\u00eb orientuar drejt Kubernetes, megjithat\u00eb, modeli padyshim q\u00eb mund t\u00eb p\u00ebrhapet.<\/p>\n<h2>Njoftohuni: GitOps<\/h2>\n<p>\nImagjinoni Alice. Ajo menaxhon kompanin\u00eb Family Insurance, e cila ofron politika p\u00ebr sigurimin e sh\u00ebndetit, automjeteve, pronave dhe sigurim udh\u00ebtimi p\u00ebr ata q\u00eb jan\u00eb shum\u00eb t\u00eb z\u00ebn\u00eb p\u00ebr t\u00eb u marr\u00eb me holl\u00ebsit\u00eb e kontratave vet\u00eb. Biznesi i saj nisi si nj\u00eb projekt an\u00ebsor, kur Alice punonte n\u00eb nj\u00eb bank\u00eb si data scientist. Nj\u00eb dit\u00eb ajo e kuptoi se mund t\u00eb p\u00ebrdor\u00eb algoritme kompjuterike t\u00eb avancuara p\u00ebr nj\u00eb analiz\u00eb m\u00eb efektive t\u00eb t\u00eb dh\u00ebnave dhe p\u00ebr formimin e pakove t\u00eb sigurimit. Investitor\u00ebt financuan projektin, dhe tani kompania e saj gjeneron m\u00eb shum\u00eb se 20 milion dollar\u00eb n\u00eb vit dhe po rritet me shpejt\u00ebsi. Aktualisht, n\u00eb t\u00eb punojn\u00eb 180 persona n\u00eb pozita t\u00eb ndryshme. N\u00eb mesin e tyre \u00ebsht\u00eb ekipi teknologjik, i cili merret me zhvillimin, mir\u00ebmbajtjen e uebsajtit, baz\u00ebs s\u00eb t\u00eb dh\u00ebnave dhe analiz\u00ebn e baz\u00ebs s\u00eb klient\u00ebve. Ekipa prej 60 personash udh\u00ebhiqet nga Bob - drejtor teknologjik i kompanis\u00eb.<\/p>\n<p>Ekipa e Bobit po zbaton sistemet production n\u00eb cloud. Aplikacionet e tyre kryesore funksionojn\u00eb n\u00eb GKE, duke p\u00ebrfituar nga avantazhet e Kubernetes n\u00eb Google Cloud. P\u00ebr m\u00eb tep\u00ebr, ata p\u00ebrdorin nj\u00eb s\u00ebr\u00eb mjetesh p\u00ebr pun\u00eb me t\u00eb dh\u00ebnat dhe analitik\u00eb.<\/p>\n<p>Familja Insurance nuk kishte planifikuar t\u00eb p\u00ebrdorte kontejner\u00ebt, por u infektua nga entuziazmi p\u00ebr Docker. Shpejt, specialist\u00ebt e kompanis\u00eb zbuluan se GKE lejon t\u00eb vendos\u00ebsh klaster\u00eb p\u00ebr t\u00eb testuar funksione t\u00eb reja leht\u00ebsisht dhe pa shqet\u00ebsime. U shtuan Jenkins p\u00ebr CI dhe Quay p\u00ebr organizimin e regjistrit t\u00eb kontejner\u00ebve, u shkruan skripat p\u00ebr Jenkins q\u00eb b\u00ebnte push t\u00eb kontejner\u00ebve dhe konfigurimeve t\u00eb reja n\u00eb GKE.<\/p>\n<p>Pas nj\u00eb kohe, Alisa dhe Bobi u zhg\u00ebnjyen me performanc\u00ebn e qasjes s\u00eb zgjedhur dhe ndikimin e saj n\u00eb biznes. Implementimi i kontejner\u00ebve nuk kishte rritur performanc\u00ebn aq sa ekipi kishte shpresuar. Ndonj\u00ebher\u00eb, deployment-et d\u00ebshtonin, dhe nuk ishte e qart\u00eb n\u00ebse ndryshimet n\u00eb kod ishin fajtore. Po ashtu, ishte e v\u00ebshtir\u00eb t\u00eb ndjek\u00ebsh ndryshimet n\u00eb konfigurime. Shpesh duhej t\u00eb krijohej nj\u00eb klaster i ri dhe t\u00eb zhvendoseshin aplikacionet atje, pasi ishte m\u00eb e thjesht\u00eb t\u00eb eliminohej ai kaos n\u00eb t\u00eb cilin ishte shnd\u00ebrruar sistemi. Alisa kishte frik\u00eb se situata do t\u00eb p\u00ebrkeq\u00ebsohej me zhvillimin e aplikacionit (p\u00ebr m\u00eb tep\u00ebr, nj\u00eb projekt i ri i bazuar n\u00eb m\u00ebsimin e makinerive po pritej). Bobi kishte automatizuar pjes\u00ebn m\u00eb t\u00eb madhe t\u00eb pun\u00ebs dhe nuk e kuptonte se pse pipeline-i ende ishte i paq\u00ebndruesh\u00ebm, nuk p\u00ebrshkonte mir\u00eb dhe her\u00eb pas here k\u00ebrkonte nd\u00ebrhyrje manuale.<\/p>\n<p><b>M\u00eb pas ata mor\u00ebn vesh p\u00ebr GitOps. Ky zgjidhje doli t\u00eb ishte pik\u00ebrisht ajo q\u00eb u duhej p\u00ebr t\u00eb ecur p\u00ebrpara me besim.<\/b><\/p>\n<p>Alisa dhe Bobi kishin d\u00ebgjuar p\u00ebr vite t\u00eb t\u00ebra p\u00ebr proceset e bazuara n\u00eb Git, DevOps dhe infrastruktura si kod. Unik\u00ebsia e GitOps q\u00ebndron n\u00eb faktin se ai sjell nj\u00eb s\u00ebr\u00eb praktikash m\u00eb t\u00eb mira \u2014 kategorike dhe rregullatore \u2014 p\u00ebr realizimin e k\u00ebtyre ideve n\u00eb kontekstin e Kubernetes. Ky tem\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/search?q=gitops&amp;src=typd\">ka ardhur shpesh n\u00eb diskutim<\/a><\/noindex>, p\u00ebrfshir\u00eb n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-high-velocity-cicd-for-kubernetes\">blogun Weaveworks<\/a><\/noindex>.<\/p>\n<p>Familia Insurance po vendos t\u00eb zbatoj\u00eb GitOps. Tani kompania ka nj\u00eb model t\u00eb automatizuar operativ q\u00eb \u00ebsht\u00eb n\u00eb p\u00ebrputhje me Kubernetes dhe kombinon <i>shpejt\u00ebsin\u00eb<\/i> p\u00ebr CustomResources; <i>me q\u00ebndrueshm\u00ebrin\u00eb<\/i>, pasi ata:<\/p>\n<ul>\n<li> zbuluan se produktiviteti i ekipit u dyfishua dhe askush nuk po \u00e7mendej;<\/li>\n<li> ndaluan sh\u00ebrbimin e skripteve. N\u00eb vend t\u00eb k\u00ebsaj, ata tani mund t\u00eb p\u00ebrqendrohen n\u00eb funksionalitete t\u00eb reja dhe p\u00ebrmir\u00ebsimin e metodave inxhinierike \u2014 p\u00ebr shembull, t\u00eb zbatojn\u00eb lan\u00e7imet kanarin\u00eb dhe t\u00eb p\u00ebrmir\u00ebsojn\u00eb testimin;<\/li>\n<li> p\u00ebrmir\u00ebsuan procesin e deployment-it \u2014 tani ai rrall\u00eb prishet;<\/li>\n<li> fituan mund\u00ebsin\u00eb p\u00ebr t\u00eb rikuperuar deployment-et pas d\u00ebshtimesh pjesore pa nd\u00ebrhyrje manuale;<\/li>\n<li> fituan m\u00eb shum\u00eb besim n\u00eb sistemet e dor\u00ebzimit. Alisa dhe Bobi zbuluan se mund t\u00eb ndanin ekipin n\u00eb grupe q\u00eb merreshin me mikrosherbime dhe punonin paralelisht;<i>o<\/i>mund t\u00eb b\u00ebnin nga 30-50 ndryshime n\u00eb projekt \u00e7do dit\u00eb p\u00ebrmes p\u00ebrpjekjeve t\u00eb secil\u00ebs grup dhe t\u00eb provonin teknika t\u00eb reja;<\/li>\n<li> mund t\u00eb b\u00ebjn\u00eb 30-50 ndryshime n\u00eb projekt \u00e7do dit\u00eb n\u00ebp\u00ebrmjet p\u00ebrpjekjeve t\u00eb secil\u00ebs grup dhe t\u00eb provojn\u00eb teknika t\u00eb reja;<\/li>\n<li> leht\u00ebsisht t\u00eb angazhojn\u00eb zhvillues t\u00eb rinj n\u00eb projekt, t\u00eb cil\u00ebt kan\u00eb mund\u00ebsin\u00eb t\u00eb zbatojn\u00eb p\u00ebrdit\u00ebsime n\u00eb prodhim p\u00ebrmes pull request-\u00ebve q\u00eb n\u00eb disa or\u00eb;<\/li>\n<li> leht\u00ebsisht kalojn\u00eb auditorin\u00eb n\u00eb kuad\u00ebr t\u00eb SOC2 <i>(n\u00eb p\u00ebrputhje me k\u00ebrkesat e ofruesve t\u00eb sh\u00ebrbimeve p\u00ebr menaxhimin e sigurt t\u00eb t\u00eb dh\u00ebnave; lexoni m\u00eb shum\u00eb, p\u00ebr shembull, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.imperva.com\/learn\/data-security\/soc-2-compliance\/\">k\u00ebtu<\/a><\/noindex> \u2014 sh\u00ebn. p\u00ebrkth.)<\/i>.<\/li>\n<\/ul>\n<p><\/p>\n<h3>\u00c7far\u00eb ndodhi?<\/h3>\n<p>\nGitOps \u2014 kjo \u00ebsht\u00eb dy gj\u00ebra:<\/p>\n<ol>\n<li> Modeli i operimit p\u00ebr Kubernetes dhe cloud native. Ai ofron nj\u00eb grup praktikash m\u00eb t\u00eb mira p\u00ebr implementimin, menaxhimin dhe monitorimin e klaster\u00ebve dhe aplikacioneve t\u00eb mbledhura n\u00eb kontejner\u00eb. Nj\u00eb p\u00ebrkufizim elegant n\u00eb form\u00ebn e <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/vitorsilva\/status\/999978906903080961\">nj\u00eb diapozitivi<\/a><\/noindex> nga <noindex><a rel=\"nofollow\" href=\"https:\/\/2018.agilept.org\/speaker_luis_faceira.html\">Luis Faceira<\/a><\/noindex>:\n<\/li>\n<li> Rruga p\u00ebr krijimin e nj\u00eb ambienti t\u00eb orientuar ndaj zhvilluesve p\u00ebr menaxhimin e aplikacioneve. Ne aplikojm\u00eb procesin e pun\u00ebs Git si p\u00ebr operimin ashtu edhe p\u00ebr zhvillimin. V\u00ebrejtje, kjo nuk \u00ebsht\u00eb thjesht p\u00ebr Git push, por p\u00ebr organizimin e gjith\u00eb grupit t\u00eb mjeteve CI\/CD dhe UI\/UX.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Nj\u00eb fjal\u00eb p\u00ebr Git<\/h3>\n<p>\nN\u00ebse nuk jeni t\u00eb njohur me sistemet e kontrollit t\u00eb versioneve dhe procesin e pun\u00ebs t\u00eb bazuar n\u00eb Git, ne rekomandojm\u00eb me ngulm q\u00eb t'i studioni ato. N\u00eb fillim, puna me deg\u00eb dhe pull request-e mund t\u00eb duket si magji e zez\u00eb, por p\u00ebrfitimet ia vlejn\u00eb p\u00ebrpjekjeve. K\u00ebtu \u00ebsht\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/codeburst.io\/trunk-based-development-vs-git-flow-a0212a6cae64\">nj\u00eb artikull i shk\u00eblqyer<\/a><\/noindex> p\u00ebr t\u00eb filluar.<\/p>\n<h2>Si funksionon Kubernetes<\/h2>\n<p>\nN\u00eb historin\u00eb ton\u00eb, Alice dhe Bob iu drejtuan GitOps, pas nj\u00eb kohe t\u00eb caktuar duke punuar me Kubernetes. Me t\u00eb v\u00ebrtet\u00eb, GitOps \u00ebsht\u00eb ngusht\u00ebsisht i lidhur me Kubernetes \u2014 kjo \u00ebsht\u00eb nj\u00eb model operimi p\u00ebr infrastruktur\u00ebn dhe aplikacionet e bazuara n\u00eb Kubernetes.<\/p>\n<h3>\u00c7far\u00eb iu ofron Kubernetes p\u00ebrdoruesve?<\/h3>\n<p>\nJa disa nga funksionalitetet kryesore:<\/p>\n<ol>\n<li> N\u00eb modelin e Kubernetes, gjith\u00e7ka mund t\u00eb p\u00ebrshkruhet n\u00eb m\u00ebnyr\u00eb deklarative.<\/li>\n<li> API-server-i i Kubernetes pranon k\u00ebt\u00eb deklarat\u00eb si t\u00eb dh\u00ebna hyr\u00ebse, dhe m\u00eb pas p\u00ebrpiqet vazhdimisht ta \u00e7oj\u00eb klasterin n\u00eb gjendjen e p\u00ebrshkruar n\u00eb deklarat\u00eb.<\/li>\n<li> Deklaratat jan\u00eb t\u00eb mjaftueshme p\u00ebr t\u00eb p\u00ebrshkruar dhe menaxhuar nj\u00eb shum\u00ebllojshm\u00ebri t\u00eb madhe t\u00eb ngarkesave t\u00eb pun\u00ebs \u2014 'aplikacioneve'.<\/li>\n<li> Si rezultat, ndryshimet n\u00eb aplikacion dhe klaster ndodhin p\u00ebr shkak t\u00eb:\n<ul>\n<li> ndryshimeve n\u00eb imazhet e kontejner\u00ebve;<\/li>\n<li> ndryshimeve n\u00eb specifikimin deklarativ;<\/li>\n<li> gabimeve n\u00eb mjedis \u2014 p\u00ebr shembull, r\u00ebnies s\u00eb kontejner\u00ebve.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><\/p>\n<h3>Aft\u00ebsit\u00eb e mrekullueshme t\u00eb Kubernetes p\u00ebr konvergjenc\u00eb<\/h3>\n<p>\nKur nj\u00eb administrator b\u00ebn ndryshime n\u00eb konfigurim, orkestra Kubernetes do t'i aplikoj\u00eb ato n\u00eb klaster derisa gjendja e tij <i>t\u00eb afrohet me konfigurimin e ri.<\/i>. Ky model funksionon p\u00ebr \u00e7do burim Kubernetes dhe zgjerohet me an\u00eb t\u00eb Custom Resource Definitions (CRDs). Prandaj, deployment-et e Kubernetes kan\u00eb k\u00ebto cil\u00ebsi t\u00eb mrekullueshme:<\/p>\n<ul>\n<li> <b>Automatizimi<\/b>: azhurnimet e Kubernetes ofrojn\u00eb nj\u00eb mekaniz\u00ebm p\u00ebr automatizimin e proceseve t\u00eb aplikimit t\u00eb ndryshimeve n\u00eb m\u00ebnyr\u00eb korrekte dhe n\u00eb koh\u00eb.<\/li>\n<li> <b>Konvergjenca<\/b>: Kubernetes do t\u00eb vazhdoj\u00eb t\u00eb p\u00ebrpiqet p\u00ebr azhurnime deri sa t\u00eb arrihet sukses.<\/li>\n<li> <b>Idempotenca<\/b>: rip\u00eb t\u00eb aplikimet e konvergjenc\u00ebs \u00e7ojn\u00eb n\u00eb t\u00eb nj\u00ebjtin rezultat.<\/li>\n<li> <b>Determinizmi<\/b>: me mjaft burime, gjendja e klasterit t\u00eb azhurnuar varet vet\u00ebm nga gjendja e d\u00ebshiruar.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Si funksionon GitOps<\/h2>\n<p>\nKemi m\u00ebsuar mjaft rreth Kubernetes p\u00ebr t\u00eb shpjeguar parimet e funksionimit t\u00eb GitOps.<\/p>\n<p>Le t\u00eb kthehemi te ekipet e Family Insurance q\u00eb lidhen me mikrosh\u00ebrbimet. \u00c7far\u00eb duhet t\u00eb b\u00ebjn\u00eb ata zakonisht? Shihni list\u00ebn m\u00eb posht\u00eb (n\u00ebse disa pika duken t\u00eb \u00e7uditshme ose t\u00eb panjohura, ju lutemi prisni me kritik\u00ebn dhe q\u00ebndroni me ne). K\u00ebto jan\u00eb thjesht shembuj t\u00eb proceseve t\u00eb pun\u00ebs n\u00eb baz\u00eb t\u00eb Jenkins. Ka shum\u00eb procese t\u00eb tjera q\u00eb lidhen me mjete t\u00eb tjera.<\/p>\n<p>Pika kryesore \u00ebsht\u00eb se ne shohim q\u00eb \u00e7do azhurnim p\u00ebrfundohet me ndryshime n\u00eb skedar\u00ebt e konfigurimit dhe n\u00eb repositor\u00ebt Git. K\u00ebto ndryshime n\u00eb Git b\u00ebjn\u00eb q\u00eb 'operatori GitOps' t\u00eb azhurnoj\u00eb klasterin:<\/p>\n<p>1. Procesi i pun\u00ebs: \u2018<i>Nd\u00ebrtojeni Jenkins - dega master<\/i>\u00bb.<br \/>\nLista e detyrave:<\/p>\n<ul>\n<li> Jenkins d\u00ebrgon imazhe t\u00eb etiketuar n\u00eb Quay;<\/li>\n<li> Jenkins d\u00ebrgon konfigurimin dhe Helm charts n\u00eb bucketin master-storage;<\/li>\n<li> Funksioni cloud kopjon konfigurimin dhe diagramet nga bucket-i master-storage n\u00eb repositorin Git master;<\/li>\n<li> Operatori GitOps azhurnon klasterin.<\/li>\n<\/ul>\n<p>\n2. <i>Nd\u00ebrtojeni Jenkins - dega release ose hotfix<\/i>:<\/p>\n<ul>\n<li> Jenkins d\u00ebrgon imazhe t\u00eb paetikuara n\u00eb Quay;<\/li>\n<li> Jenkins d\u00ebrgon konfigurimin dhe Helm charts n\u00eb bucketin staging-storage;<\/li>\n<li> Funksioni cloud kopjon konfigurimin dhe diagramet nga bucket-i staging-storage n\u00eb repositorin Git staging;<\/li>\n<li> Operatori GitOps azhurnon klasterin.<\/li>\n<\/ul>\n<p>\n3. <i>Nd\u00ebrtojeni Jenkins - dega develop ose feature<\/i>:<\/p>\n<ul>\n<li> Jenkins d\u00ebrgon imazhe t\u00eb paetikuara n\u00eb Quay;<\/li>\n<li> Jenkins d\u00ebrgon konfigurimin dhe Helm charts n\u00eb bucketin develop-storage;<\/li>\n<li> Funksioni cloud kopjon konfigurimin dhe diagramet nga bucket-i develop-storage n\u00eb repositorin Git develop;<\/li>\n<li>Operatori GitOps azhurnon klasterin.<\/li>\n<\/ul>\n<p>\n4. <i>Shtimi i klientit t\u00eb ri<\/i>:<\/p>\n<ul>\n<li> Menaxheri ose administratori (LCM\/ops) th\u00ebrret Gradle p\u00ebr p\u00ebrgatitjen fillestare dhe konfigurimin e balancuesve t\u00eb ngarkes\u00ebs (NLB);<\/li>\n<li> LCM\/ops b\u00ebn commit t\u00eb nj\u00eb konfigurimi t\u00eb ri p\u00ebr t\u00eb p\u00ebrgatitur deployment-in p\u00ebr p\u00ebrdit\u00ebsimet;<\/li>\n<li> Operatori GitOps azhurnon klasterin.<\/li>\n<\/ul>\n<p><\/p>\n<h3>P\u00ebrshkrimi i shkurt\u00ebr i GitOps<\/h3>\n<p><\/p>\n<ol>\n<li> P\u00ebrshkruani gjendjen e d\u00ebshiruar t\u00eb gjith\u00eb sistemit duke p\u00ebrdorur specifikime deklarative p\u00ebr \u00e7do mjedis (n\u00eb historin\u00eb ton\u00eb, ekipi i Bobit definon t\u00ebr\u00eb konfigurimin e sistemit n\u00eb Git).\n<ul>\n<li> Repoja Git \u00ebsht\u00eb burimi i vet\u00ebm i s\u00eb v\u00ebrtet\u00ebs n\u00eb lidhje me gjendjen e d\u00ebshiruar t\u00eb gjith\u00eb sistemit.<\/li>\n<li> T\u00eb gjitha ndryshimet n\u00eb gjendjen e d\u00ebshiruar realizohen p\u00ebrmes komiteteve n\u00eb Git.<\/li>\n<li> T\u00eb gjitha parametrat e d\u00ebshiruar t\u00eb klasterit gjithashtu jan\u00eb t\u00eb observable n\u00eb vet\u00eb klasterin. K\u00ebshtu, ne mund t\u00eb p\u00ebrcaktojm\u00eb n\u00ebse (konvergojn\u00eb, <i>converge<\/i>) ose dallojn\u00eb (divergojn\u00eb, <i>diverge<\/i>) gjendjet e d\u00ebshiruara dhe t\u00eb observable.<\/li>\n<\/ul>\n<\/li>\n<li> N\u00ebse gjendjet e d\u00ebshiruara dhe t\u00eb observable dallojn\u00eb, at\u00ebher\u00eb:\n<ul>\n<li> Ekziston nj\u00eb mekaniz\u00ebm konvergjence, i cili do t\u00eb sinkronizoj\u00eb automatikisht gjendjen e synuar dhe at\u00eb t\u00eb observable. Brenda klasterit, k\u00ebt\u00eb e b\u00ebn Kubernetes.<\/li>\n<li> Procesi aktivizohet menj\u00ebher\u00eb me njoftimin 'ndryshimi u konfirmua'.<\/li>\n<li> P\u00ebrmes nj\u00eb intervali t\u00eb caktuar t\u00eb cilin mund ta p\u00ebrshtatni, mund t\u00eb d\u00ebrgohet nj\u00eb njoftim 'dallim' n\u00ebse gjendjet dallojn\u00eb.<\/li>\n<\/ul>\n<\/li>\n<li> K\u00ebshtu, t\u00eb gjitha komitetet n\u00eb Git shkaktojn\u00eb p\u00ebrdit\u00ebsime t\u00eb verifikueshme dhe idempotente n\u00eb klaster.\n<ul>\n<li>Rivendosja \u00ebsht\u00eb nj\u00eb konvergjenc\u00eb n\u00eb nj\u00eb gjendje t\u00eb d\u00ebshiruar m\u00eb par\u00eb.<\/li>\n<\/ul>\n<\/li>\n<li> Konvergjenca \u00ebsht\u00eb p\u00ebrfundimtare. Shenja e saj \u00ebsht\u00eb:\n<ul>\n<li> Mungesa e njoftimeve 'dallim' p\u00ebr nj\u00eb periudh\u00eb t\u00eb caktuar kohore.<\/li>\n<li> Njoftimi 'konverguar' (p.sh., webhook, ngjarje e shkruar n\u00eb Git).<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><\/p>\n<h3>\u00c7far\u00eb \u00ebsht\u00eb divergjenca?<\/h3>\n<p>\nT\u00eb shqyrtojm\u00eb p\u00ebrs\u00ebri: <i>t\u00eb gjitha vetit\u00eb e d\u00ebshiruara t\u00eb klasterit duhet t\u00eb jen\u00eb observable n\u00eb vet\u00eb klasterin.<\/i>.<\/p>\n<p>Disa shembuj t\u00eb divergjenc\u00ebs:<\/p>\n<ul>\n<li> Ndryshimi n\u00eb dosjen e konfigurimit p\u00ebr shkak t\u00eb bashkimit t\u00eb deg\u00ebve n\u00eb Git.<\/li>\n<li> Ndryshimi n\u00eb dosjen e konfigurimit p\u00ebr shkak t\u00eb nj\u00eb komiti n\u00eb Git, t\u00eb b\u00ebr\u00eb nga nj\u00eb klient GUI.<\/li>\n<li> Ndryshime t\u00eb shumta n\u00eb gjendjen e d\u00ebshiruar p\u00ebr shkak t\u00eb PR n\u00eb Git me ndihm\u00ebn e nd\u00ebrtimit t\u00eb nj\u00eb imazhi kontejneri dhe ndryshimeve t\u00eb konfigurimit.<\/li>\n<li> Ndryshimi i gjendjes s\u00eb klasterit p\u00ebr shkak t\u00eb nj\u00eb gabimi, konfliktit t\u00eb burimeve q\u00eb \u00e7on n\u00eb 'sjellje t\u00eb keqe', ose thjesht anashkalim i rast\u00ebsish\u00ebm nga gjendja origjinale.<\/li>\n<\/ul>\n<p><\/p>\n<h3>\u00c7far\u00eb p\u00ebrb\u00ebn mekanizmi i konvergjenc\u00ebs?<\/h3>\n<p>\nDisa shembuj:<\/p>\n<ul>\n<li> P\u00ebr kontejner\u00ebt dhe klaster\u00ebt, mekanizmi i konvergjenc\u00ebs ofrohet nga Kubernetes.<\/li>\n<li> T\u00eb nj\u00ebjtin mekaniz\u00ebm mund t\u00eb p\u00ebrdorim p\u00ebr menaxhimin e aplikacioneve dhe nd\u00ebrtimeve t\u00eb bazuara n\u00eb Kubernetes (p.sh., Istio dhe Kubeflow).<\/li>\n<li> Mekanizmi p\u00ebr menaxhimin e nd\u00ebrveprimit t\u00eb pun\u00ebs mes Kubernetes, depozitave t\u00eb imazheve dhe Git-it ofron <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/weaveworks\/flux\">Operatori GitOps Weave Flux<\/a><\/noindex>, i cili \u00ebsht\u00eb nj\u00eb pjes\u00eb e <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.weave.works\/\">Weave Cloud<\/a><\/noindex>.<\/li>\n<li> P\u00ebr makinat bazike, mekanizmi i konvergjenc\u00ebs duhet t\u00eb jet\u00eb deklarativ dhe autonom. Nga p\u00ebrvoja jon\u00eb mund t\u00eb themi se <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> \u00ebsht\u00eb m\u00eb af\u00ebr k\u00ebtij p\u00ebrkufizimi, megjithat\u00eb ende k\u00ebrkon kontroll nga njeriu. N\u00eb k\u00ebt\u00eb kuptim, GitOps zgjeron traditat e Infrastruktur\u00ebs si Kod.<\/li>\n<\/ul>\n<p>\nGitOps bashkon Git me mekanizmin e shk\u00eblqyer t\u00eb konvergjenc\u00ebs s\u00eb Kubernetes, duke ofruar nj\u00eb model p\u00ebr operacionin.<\/p>\n<p>GitOps na lejon t\u00eb deklarojm\u00eb: <i>automatik\u00ebs dhe kontrollit i n\u00ebnshtrohen vet\u00ebm ato sisteme q\u00eb mund t\u00eb p\u00ebrshkruhen dhe t\u00eb v\u00ebzhgohen<\/i>.<\/p>\n<h3>GitOps \u00ebsht\u00eb i dizajnuar p\u00ebr gjith\u00eb grumbullin cloud native (p.sh., Terraform, etj.)<\/h3>\n<p>\nGitOps \u2014 nuk \u00ebsht\u00eb vet\u00ebm Kubernetes. Ne duam q\u00eb e gjith\u00eb sistemi t\u00eb menaxhohet n\u00eb m\u00ebnyr\u00eb deklarative dhe t\u00eb p\u00ebrdor\u00eb konvergjenc\u00ebn. Nga e gjith\u00eb sistemi kuptojm\u00eb grupin e mjediseve q\u00eb punojn\u00eb me Kubernetes \u2014 p\u00ebr shembull, 'dev cluster 1', 'produksioni' etj. N\u00eb \u00e7do mjedis p\u00ebrfshihen makinat, klaster\u00ebt, aplikacionet, si dhe nd\u00ebrfaqet p\u00ebr sh\u00ebrbime t\u00eb jashtme q\u00eb ofrojn\u00eb t\u00eb dh\u00ebna, monitorim etj.<\/p>\n<p>Vini re se sa i r\u00ebnd\u00ebsish\u00ebm \u00ebsht\u00eb Terraform p\u00ebr problemin e bootstrapping-\u00ebt. Kubernetes duhet t\u00eb jet\u00eb i vendosur diku, dhe p\u00ebrdorimi i Terraform n\u00ebnkupton q\u00eb ne mund t\u00eb aplikojm\u00eb t\u00eb nj\u00ebjtat procese t\u00eb GitOps p\u00ebr t\u00eb krijuar nj\u00eb shtres\u00eb menaxhuese q\u00eb q\u00ebndron n\u00ebn Kubernetes dhe aplikacionet. Kjo \u00ebsht\u00eb nj\u00eb praktik\u00eb e dobishme.<\/p>\n<p>Vlen t\u00eb theksohet se po i jepet shum\u00eb r\u00ebnd\u00ebsi aplikimit t\u00eb koncepteve GitOps n\u00eb shtresat mbi Kubernetes. Deri tani, ekzistojn\u00eb zgjidhje t\u00eb tipit GitOps p\u00ebr Istio, Helm, Ksonnet, OpenFaaS dhe Kubeflow, si dhe p\u00ebr Pulumi, q\u00eb krijojn\u00eb nj\u00eb shtres\u00eb p\u00ebr zhvillimin e aplikacioneve p\u00ebr cloud native.<\/p>\n<h2>Kubernetes CI\/CD: krahasimi i GitOps me qasje t\u00eb tjera<\/h2>\n<p>\nSi\u00e7 u tha, GitOps \u00ebsht\u00eb dy gj\u00ebra:<\/p>\n<ol>\n<li> Nj\u00eb model operacional p\u00ebr Kubernetes dhe cloud native, si\u00e7 u p\u00ebrmend m\u00eb par\u00eb.<\/li>\n<li> Nj\u00eb rrug\u00eb drejt organizat\u00ebs me orientim p\u00ebr zhvilluesit p\u00ebr menaxhimin e aplikacioneve.<\/li>\n<\/ol>\n<p>\nP\u00ebr shum\u00eb, GitOps \u00ebsht\u00eb para gjith\u00ebshka nj\u00eb proces i bazuar n\u00eb Git push. Ne gjithashtu na p\u00eblqen. Por nuk \u00ebsht\u00eb gjith\u00e7ka: le t\u00eb shohim tani CI\/CD pipeline-at.<\/p>\n<h3>GitOps ofron implementim t\u00eb vazhduesh\u00ebm (CD) p\u00ebr Kubernetes<\/h3>\n<p>\nGitOps ofron nj\u00eb mekaniz\u00ebm p\u00ebr implementim t\u00eb vazhduesh\u00ebm, duke eliminuar nevoj\u00ebn p\u00ebr 'sistemet e menaxhimit t\u00eb implementimeve' t\u00eb ve\u00e7anta. T\u00eb gjith\u00eb pun\u00ebn e b\u00ebn p\u00ebr ju Kubernetes.<\/p>\n<ul>\n<li> P\u00ebrdit\u00ebsimi i aplikacionit k\u00ebrkon nj\u00eb p\u00ebrdit\u00ebsim n\u00eb Git. Ky \u00ebsht\u00eb nj\u00eb p\u00ebrdit\u00ebsim transaksional n\u00eb gjendjen e d\u00ebshiruar. \"Distributimi\" m\u00eb pas kryhet brenda klasterit nga Kubernetes vet\u00eb, n\u00eb baz\u00eb t\u00eb p\u00ebrshkrimit t\u00eb p\u00ebrdit\u00ebsuar.<\/li>\n<li> P\u00ebr shkak t\u00eb specifikave t\u00eb funksionimit t\u00eb Kubernetes, k\u00ebto p\u00ebrdit\u00ebsime jan\u00eb konvergjente. Kjo siguron nj\u00eb mekaniz\u00ebm p\u00ebr zhvillim t\u00eb vazhduesh\u00ebm, ku t\u00eb gjitha p\u00ebrdit\u00ebsimet jan\u00eb atomike.<\/li>\n<li> V\u00ebrejtje: <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.weave.works\/\">Weave Cloud<\/a><\/noindex> ofron nj\u00eb operator GitOps, q\u00eb integrohet me Git dhe Kubernetes dhe lejon realizimin e CD p\u00ebrmes pajtimit t\u00eb gjendjes s\u00eb d\u00ebshiruar dhe asaj aktuale t\u00eb klasterit.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Pa kubectl dhe skripte<\/h3>\n<p>\nDuhet t\u00eb shmanget p\u00ebrdorimi i Kubectl p\u00ebr t\u00eb p\u00ebrdit\u00ebsuar klasterin, dhe ve\u00e7an\u00ebrisht \u2212 skripte p\u00ebr grupimin e komandave kubectl. N\u00eb vend t\u00eb k\u00ebsaj, p\u00ebrmes nj\u00eb procesi GitOps, p\u00ebrdoruesi mund t\u00eb p\u00ebrdit\u00ebsoj\u00eb klasterin e tij Kubernetes p\u00ebrmes Git.<\/p>\n<p>Avantazhet p\u00ebrfshijn\u00eb:<\/p>\n<ol>\n<li> <b>Sakt\u00ebsia<\/b>. Nj\u00eb grup p\u00ebrdit\u00ebsimesh mund t\u00eb aplikohen, konvergjohen dhe n\u00eb fund t\u00eb v\u00ebrtetohen, duke na afruar m\u00eb af\u00ebr q\u00ebllimit t\u00eb zhvillimit atomik. N\u00eb t\u00eb kund\u00ebrt, p\u00ebrdorimi i skripteve nuk jep asnj\u00eb garanci konvergjence (m\u00eb shum\u00eb p\u00ebr k\u00ebt\u00eb m\u00eb posht\u00eb).<\/li>\n<li> <b>Siguria<\/b>. <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/kelseyhightower\/status\/939003832805179392?lang=en\">Duke cituar<\/a><\/noindex> Kelsey Hightower: \"Shfryt\u00ebzoni qasje n\u00eb klasterin Kubernetes vet\u00ebm p\u00ebr mjete automatizimi dhe administrator\u00eb, t\u00eb cil\u00ebt kan\u00eb obligimin e diagnosticimit ose mbajtjes n\u00eb pun\u00eb t\u00eb tij.\" Shih gjithashtu <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-compliance-and-secure-cicd\">postimin tim<\/a><\/noindex> p\u00ebr sigurin\u00eb dhe p\u00ebrputhshm\u00ebrin\u00eb me specifikimet teknike, si dhe <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@vesirin\/how-i-gained-commit-access-to-homebrew-in-30-minutes-2ae314df03ab\">artikullin mbi sulmin n\u00eb Homebrew<\/a><\/noindex> n\u00ebp\u00ebrmjet grabitjes s\u00eb kredencialeve nga nj\u00eb skript Jenkins i p\u00ebrgatitur keq.<\/li>\n<li> <b>P\u00ebrvoja e p\u00ebrdoruesit<\/b>. Kubectl zbulon mekanik\u00ebn e modelit objekor t\u00eb Kubernetes, i cili \u00ebsht\u00eb mjaft kompleks. Idealisht, p\u00ebrdoruesit duhet t\u00eb nd\u00ebrveprojn\u00eb me sistemin n\u00eb nj\u00eb nivel m\u00eb t\u00eb lart\u00eb t\u00eb abstraksionit. K\u00ebtu do t\u00eb citoj p\u00ebrs\u00ebri Kelsey dhe do t\u00eb rekomandoj t\u00eb shikoni <noindex><a rel=\"nofollow\" href=\"http:\/\/superuser.openstack.org\/articles\/kubernetes-boring\/\">nj\u00eb p\u00ebrmbledhje t\u00eb till\u00eb<\/a><\/noindex>.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Dallimi mes CI dhe CD<\/h3>\n<p>\nGitOps p\u00ebrmir\u00ebson modelet ekzistuese CI\/CD.<\/p>\n<p>Nj\u00eb server CI modern \u00ebsht\u00eb nj\u00eb mjet p\u00ebr orkestrimin. N\u00eb ve\u00e7anti, \u00ebsht\u00eb nj\u00eb mjet p\u00ebr orkestrimin e pipeline-ve CI. Ato p\u00ebrfshijn\u00eb nd\u00ebrtimin, testimin, bashkimin n\u00eb trunk etj. Serverat CI automatizojn\u00eb menaxhimin e pipeline-ve komplekse me shum\u00eb hapa. Nj\u00eb tundim i zakonsh\u00ebm \u00ebsht\u00eb t\u00eb krijoni nj\u00eb skript p\u00ebr nj\u00eb grup p\u00ebrdit\u00ebsimesh Kubernetes dhe ta ekzekutoni at\u00eb si nj\u00eb komponent t\u00eb pipeline-it p\u00ebr push-in e ndryshimeve n\u00eb klaster. N\u00eb t\u00eb v\u00ebrtet\u00eb, k\u00ebshtu veprojn\u00eb shum\u00eb specialist\u00eb. Megjithat\u00eb, kjo nuk \u00ebsht\u00eb optimale, dhe ja pse.<\/p>\n<p>CI duhet t\u00eb p\u00ebrdoret p\u00ebr t\u00eb b\u00ebr\u00eb p\u00ebrdit\u00ebsime n\u00eb trunk, dhe klusteri Kubernetes duhet t\u00eb ndryshoj\u00eb bazuar n\u00eb k\u00ebto p\u00ebrdit\u00ebsime, p\u00ebr t\u00eb menaxhuar CD \"brenda\". Ne e quajm\u00eb k\u00ebt\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-compliance-and-secure-cicd\">modelin pull p\u00ebr CD<\/a><\/noindex>, n\u00eb dallim nga modeli push i CI. CD \u00ebsht\u00eb pjes\u00eb e <i>orkestracionit runtime.<\/i>.<\/p>\n<h3>Pse CI-server\u00ebt nuk duhet t\u00eb b\u00ebjn\u00eb CD p\u00ebrmes p\u00ebrdit\u00ebsimeve direkte n\u00eb Kubernetes<\/h3>\n<p>\n<i>Mos e p\u00ebrdorni CI-serverin p\u00ebr t\u00eb orkestruar p\u00ebrdit\u00ebsime direkte n\u00eb Kubernetes n\u00eb form\u00ebn e nj\u00eb s\u00ebr\u00ebdetyrash CI. Ky \u00ebsht\u00eb nj\u00eb anti-model, p\u00ebr t\u00eb cilin ne <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/kubernetes-anti-patterns-let-s-do-gitops-not-ciops\">m\u00eb par\u00eb kemi folur<\/a><\/noindex> n\u00eb blogun ton\u00eb.<\/i><\/p>\n<p>Le t'i kthehemi Alis\u00ebs dhe Bobit.<\/p>\n<p>Me \u00e7far\u00eb probleme jan\u00eb p\u00ebrballur ata? CI-serveri i Bobit aplikon ndryshimet n\u00eb kluster, por n\u00ebse gjate procesit ai d\u00ebshton, Bobi nuk do t\u00eb dij\u00eb se n\u00eb cilin gjendje \u00ebsht\u00eb (ose duhet t\u00eb jet\u00eb) klusteri dhe si ta rregulloj\u00eb at\u00eb. E nj\u00ebjta gj\u00eb vlen edhe n\u00eb rastin e suksesit.<\/p>\n<p>Le t\u00eb supozojm\u00eb se ekipi i Bobit ka nd\u00ebrtuar nj\u00eb imazh t\u00eb ri dhe m\u00eb pas e ka patchuar deploymendin e tyre p\u00ebr t\u00eb shp\u00ebrndar\u00eb imazhin (t\u00eb gjith\u00eb k\u00ebto nga pipeline-i CI).<\/p>\n<p>N\u00ebse imazhi nd\u00ebrtrohet normalisht, por pipeline-i d\u00ebshton, ekipi do t\u00eb duhet t\u00eb zbuloj\u00eb:<\/p>\n<ul>\n<li> A \u00ebsht\u00eb vendosur p\u00ebrdit\u00ebsimi?<\/li>\n<li> A po zbatojm\u00eb nj\u00eb nd\u00ebrtim t\u00eb ri? A do t\u00eb sjell\u00eb kjo efekte an\u00ebsore t\u00eb pad\u00ebshiruara - me mund\u00ebsin\u00eb p\u00ebr t\u00eb marr\u00eb dy nd\u00ebrtime t\u00eb nj\u00ebjti imazhi t\u00eb pandryshuar? <\/li>\n<li> A ja vlen t\u00eb presim p\u00ebr nj\u00eb nd\u00ebrrim tjet\u00ebr para se t\u00eb zbatojm\u00eb nd\u00ebrtimin?<\/li>\n<li> \u00c7far\u00eb sakt\u00ebsisht shkoi keq? Cilat hapa duhet t\u00eb p\u00ebrs\u00ebriten (dhe cilat jan\u00eb t\u00eb sigurta p\u00ebr t'u p\u00ebrs\u00ebritur)?<\/li>\n<\/ul>\n<p>\n<i>Organizimi i nj\u00eb procesi pune t\u00eb bazuar n\u00eb Git nuk garanton se ekipi i Bobit nuk do t\u00eb p\u00ebrballet me k\u00ebto probleme. Ata ende mund t\u00eb gabojn\u00eb me push-in e commits, me tag-in ose ndonj\u00eb parametrin tjet\u00ebr; megjithat\u00eb, ky qasje mbetet shum\u00eb m\u00eb e af\u00ebrt me nj\u00eb t\u00eb gjith\u00eb ose asgj\u00eb.<\/i><\/p>\n<p>P\u00ebrmbledhur, ja pse CI-server\u00ebt nuk duhet t\u00eb angazhohen n\u00eb CD:<\/p>\n<ul>\n<li> Skripti i p\u00ebrdit\u00ebsimeve nuk \u00ebsht\u00eb gjithmon\u00eb i qart\u00eb; \u00ebsht\u00eb e leht\u00eb t\u00eb b\u00ebhen gabime.<\/li>\n<li> CI-server\u00ebt nuk konvergojn\u00eb n\u00eb modelin deklarativ t\u00eb klusterit.<\/li>\n<li> \u00cbsht\u00eb e v\u00ebshtir\u00eb t\u00eb garantosh idempotenc\u00ebn. P\u00ebrdoruesit duhet t\u00eb kuptojn\u00eb semantik\u00ebn e thell\u00eb t\u00eb sistemit.<\/li>\n<li> \u00cbsht\u00eb m\u00eb e komplikuar t\u00eb kryhet rikuperimi pas nj\u00eb d\u00ebshtimi t\u00eb pjessh\u00ebm.<\/li>\n<\/ul>\n<p>\n<i>Vini re p\u00ebr Helm: n\u00ebse d\u00ebshironi t\u00eb p\u00ebrdorni Helm, ne rekomandojm\u00eb ta bashkoni at\u00eb me nj\u00eb operator GitOps, si <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/managing-helm-releases-the-gitops-way\">Flux-Helm<\/a><\/noindex>. Kjo do t\u00eb ndihmoj\u00eb n\u00eb sigurimin e konvergjenc\u00ebs. Vet\u00ebm Helm nuk \u00ebsht\u00eb as i qart\u00eb as atomik.<\/i><\/p>\n<h2>GitOps si m\u00ebnyra m\u00eb e mir\u00eb p\u00ebr t\u00eb realizuar Continuous Delivery p\u00ebr Kubernetes.<\/h2>\n<p>\nEkipi i Alice dhe Bob po implementon GitOps dhe v\u00ebren se \u00ebsht\u00eb b\u00ebr\u00eb shum\u00eb m\u00eb e leht\u00eb t\u00eb punosh me produktet software, duke ruajtur nj\u00eb performanc\u00eb dhe stabilitet t\u00eb lart\u00eb. Le t\u00eb p\u00ebrfundojm\u00eb k\u00ebt\u00eb artikull me ilustrime q\u00eb tregojn\u00eb se si duket qasja e tyre e re. Mbani n\u00eb mend se ne po flasim kryesisht p\u00ebr aplikacione dhe sh\u00ebrbime, megjithat\u00eb GitOps mund t\u00eb p\u00ebrdoret p\u00ebr menaxhimin e gjith\u00eb platform\u00ebs.<\/p>\n<h3>Modeli i funksionimit p\u00ebr Kubernetes<\/h3>\n<p>\nShikoni diagramin n\u00eb vijim. Ai paraqet Git dhe depozit\u00ebn e imazheve t\u00eb kontejner\u00ebve si burime t\u00eb p\u00ebrbashk\u00ebta p\u00ebr dy ciklet e orkestruara t\u00eb jet\u00ebs:<\/p>\n<ul>\n<li> Pipeline e integrimit t\u00eb vazhduesh\u00ebm, e cila lexon dhe shkruan skedar\u00eb n\u00eb Git dhe mund t\u00eb p\u00ebrdit\u00ebsoj\u00eb depozit\u00ebn e imazheve t\u00eb kontejner\u00ebve.<\/li>\n<li> Pipeline Runtime GitOps, i cili kombinon p\u00ebrhapjen me menaxhimin dhe monitorimin. Ai lexon dhe shkruan skedar\u00eb n\u00eb Git dhe mund t\u00eb ngarkoj\u00eb imazhe kontejner\u00ebsh.<\/li>\n<\/ul>\n<h3>Cilat jan\u00eb p\u00ebrfundimet kryesore?<\/h3>\n<p><\/p>\n<ol>\n<li> <b>Ndara e problemeve<\/b>: V\u00ebreni se t\u00eb dyja pipeline-t mund t\u00eb ndajn\u00eb t\u00eb dh\u00ebna, vet\u00ebm duke p\u00ebrdit\u00ebsuar Git-a ose depozit\u00ebn e imazheve. Me fjal\u00eb t\u00eb tjera, ekziston nj\u00eb firewall midis CI dhe mjedisit runtime. Ne e quajm\u00eb at\u00eb \"firewall t\u00eb pandryshueshm\u00ebris\u00eb\" <i>(immutability firewall)<\/i>, pasi t\u00eb gjitha p\u00ebrdit\u00ebsimet e depozitave krijojn\u00eb versione t\u00eb reja. P\u00ebr informacion t\u00eb m\u00ebtejsh\u00ebm mbi k\u00ebt\u00eb tem\u00eb, referohuni slides 72-87. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.slideshare.net\/weaveworks\/continuous-lifecycle-london-2018-event-keynote-97418556\">k\u00ebt\u00eb prezantim<\/a><\/noindex>.<\/li>\n<li> <b>Mund t\u00eb p\u00ebrdorni \u00e7do CI dhe server Git<\/b>: GitOps punon me \u00e7do komponent. Ju mund t\u00eb vazhdoni t\u00eb p\u00ebrdorni server\u00ebt tuaj t\u00eb preferuar CI dhe Git, depozit\u00eb imazhesh dhe grupe testesh. Pothuajse t\u00eb gjitha mjetet e tjera p\u00ebr Continuous Delivery n\u00eb treg k\u00ebrkojn\u00eb serverin e tyre CI\/Git ose depozit\u00ebn e imazheve. Kjo mund t\u00eb b\u00ebhet nj\u00eb kufizim n\u00eb zhvillimin cloud native. N\u00eb rastin e GitOps, ju mund t\u00eb p\u00ebrdorni mjetet q\u00eb jeni m\u00ebsuar.<\/li>\n<li> <b>Ngjarjet si nj\u00eb mjet integrimi<\/b>: Sa her\u00eb q\u00eb t\u00eb dh\u00ebnat n\u00eb Git p\u00ebrdit\u00ebsohen, Weave Flux (ose operatori Weave Cloud) e informon runtime. Sa her\u00eb q\u00eb Kubernetes merr nj\u00eb grup ndryshimesh, Git p\u00ebrdit\u00ebsohet. Kjo siguron nj\u00eb model t\u00eb thjesht\u00eb integrimi p\u00ebr organizimin e proceseve p\u00ebr GitOps, si\u00e7 tregohet m\u00eb posht\u00eb.<\/li>\n<\/ol>\n<h2>P\u00ebrfundim<\/h2>\n<p>\nGitOps ofron garanci t\u00eb q\u00ebndrueshme p\u00ebr p\u00ebrdit\u00ebsim, t\u00eb nevojshme p\u00ebr \u00e7do mjet modern CI\/CD:<\/p>\n<ul>\n<li> automatik\u00eb;<\/li>\n<li> konvergjenc\u00eb;<\/li>\n<li> idempotent\u00ebsi;<\/li>\n<li> determinist.<\/li>\n<\/ul>\n<p>\nKjo \u00ebsht\u00eb e r\u00ebnd\u00ebsishme, pasi ofron nj\u00eb model funksionimi p\u00ebr zhvilluesit n\u00eb fush\u00ebn cloud native.<\/p>\n<ul>\n<li> Mjetet tradicionale p\u00ebr menaxhimin dhe monitorimin e sistemeve jan\u00eb t\u00eb lidhura me ekipet e operacioneve q\u00eb veprojn\u00eb brenda nj\u00eb runbook-u <i>(grup t\u00eb procedurave dhe operacioneve rutin\u00eb \u2014 sh\u00ebn. p\u00ebrk.).<\/i>, t\u00eb lidhur me nj\u00eb deploymend specifik.<\/li>\n<li> N\u00eb menaxhimin e sistemeve cloud native, mjetet p\u00ebr v\u00ebzhgim jan\u00eb m\u00ebnyra m\u00eb e mir\u00eb p\u00ebr t\u00eb vler\u00ebsuar rezultatet e implementimeve, n\u00eb m\u00ebnyr\u00eb q\u00eb ekipi i zhvilluesve t\u00eb mund t\u00eb reagoj\u00eb n\u00eb koh\u00eb.<\/li>\n<\/ul>\n<p>\nImagjinoni shum\u00eb klastera t\u00eb shp\u00ebrndara n\u00ebp\u00ebr cloud-e t\u00eb ndryshme dhe shum\u00eb sh\u00ebrbime me ekipet e tyre dhe planet e tyre t\u00eb implementimit. GitOps ofron nj\u00eb model invariant t\u00eb shkall\u00ebzuesh\u00ebm p\u00ebr t\u00eb menaxhuar gjith\u00eb k\u00ebt\u00eb pasuri.<\/p>\n<h2>P.S. nga p\u00ebrkthyesi<\/h2>\n<p>\nLexoni gjithashtu n\u00eb blogun ton\u00eb:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/456754\/\">GitOps: krahasimi i metodave Pull dhe Push<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/434160\/\">Paraqesim bibliotek\u00ebn kubedog p\u00ebr ndjekjen e burimeve Kubernetes.<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/449096\/\">Zgjerimi dhe plot\u00ebsimi i Kubernetes (p\u00ebrmbledhje dhe video e prezantimit)<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p class=\"for_users_only_msg\">Vet\u00ebm p\u00ebrdoruesit e regjistruar mund t\u00eb marrin pjes\u00eb n\u00eb anket\u00eb. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Hyni<\/a><\/noindex>, ju lutem.<\/p>\n<h2 class=\"default-block__polling-title\">A e dinit p\u00ebr GitOps para se t\u00eb dilnin k\u00ebto dy p\u00ebrkthime n\u00eb habr?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Po, e dija.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Vet\u00ebm sip\u00ebrfaq\u00ebsisht.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Jo<\/p>\n<\/li>\n<\/ul>\n<p>    35 p\u00ebrdorues votuan. 10 p\u00ebrdorues u abstenuan.<br \/>\n<br \/>Burimi: <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.2.1 - 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\/sq\/blog\/administrirovanie\/chto-zhe-takoe-gitops\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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\/sq\/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\udd47\u00c7far\u00eb \u00ebsht\u00eb GitOps? | ProHoster","description":"Sh\u00ebn.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/chto-zhe-takoe-gitops","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/35941","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=35941"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/35941\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=35941"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=35941"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=35941"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}