{"id":35594,"date":"2019-10-31T22:05:15","date_gmt":"2019-10-31T19:05:15","guid":{"rendered":"https:\/\/prohoster.info\/blog\/gitops-sravnenie-metodov-pull-i-push\/"},"modified":"2019-10-31T22:05:15","modified_gmt":"2019-10-31T19:05:15","slug":"gitops-sravnenie-metodov-pull-i-push","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push","title":{"rendered":"GitOps: pore\u0111enje Pull i Push metoda","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Op. prev.<\/b>: V skupnosti Kubernetes pridobiva izrazit pomen trend, imenovan GitOps, \u010demur smo osebno pri\u010de, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/454184\/\">ko smo obiskali<\/a><\/noindex> KubeCon Europe 2019. Ta izraz je bil relativno nedavno <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-operations-by-pull-request\">izumljen<\/a><\/noindex> od vodje podjetja Weaveworks - Alexis Richardson - in pomeni uporabo orodij, ki so razvojnim ekipam poznana (predvsem Git, od koder tudi ime) za re\u0161evanje nalog upravljanja. Gre predvsem za upravljanje Kubernetes, pri \u010demer so njegove konfiguracije shranjene v Gitu in se spremembe avtomatsko nalagajo v klaster. O dveh pristopih k tej nalogi pi\u0161e Matthias Jg v tem \u010dlanku.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"GitOps: pore\u0111enje Pull i Push metoda\" src=\"\/wp-content\/uploads\/2862627cedb4347679d0c14876a24869.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLani <i>(v resnici se je to formalno zgodilo avgusta 2017 - op. prev.)<\/i> Pojavio se novi pristup implementaciji aplikacija u Kubernetesu. Zove se GitOps, a temelji se na osnovnoj ideji da se pra\u0107enje verzija deploymenta vr\u0161i u sigurnom okru\u017eenju Git repozitorija.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><b>Osnovne prednosti tega pristopa so naslednje<\/b>:<\/p>\n<ol>\n<li> <b>Verzioniranje deploymenta i istorija izmena<\/b>. Stanje celog klastera se \u010duva u Git repozitoriju, a deploymenti se a\u017euriraju samo putem commit-a. Pored toga, sve promene se mogu pratiti pomo\u0107u istorije commit-a.<\/li>\n<li> <b>Povratki z uporabo znanih ukazov Git<\/b>. Preprosto <code>git reset<\/code> omogu\u0107ava vra\u0107anje promena u deploymentima; sve prethodne verzije su uvek dostupne.<\/li>\n<li> <b>Pripravljen nadzor dostopa<\/b>. Obi\u010dno Git sistemi sadr\u017ee brojne poverljive podatke, zbog \u010dega ve\u0107ina kompanija pridaje posebnu pa\u017enju njihovoj za\u0161titi. Stoga se ova za\u0161tita odnosi i na operacije sa deploymentima.<\/li>\n<li> <b>Politike za namestitve<\/b>. Ve\u0107ina Git sistema inicijalno podr\u017eava politike za razli\u010dite grane \u2014 na primer, samo pull request-i mogu a\u017eurirati master, a izmene moraju proveriti i odobriti drugi \u010dlan tima. Kao i kod kontrole pristupa, iste politike se primenjuju na a\u017euriranja deploymenta.<\/li>\n<\/ol>\n<p>\nKao \u0161to vidite, metoda GitOps ima brojne prednosti. Tokom pro\u0161le godine, dva pristupa su posebno popularna. Jedan se zasniva na push, dok se drugi oslanja na pull. Pre nego \u0161to ih razmotrimo, najpre hajde da pogledamo kako izgledaju tipi\u010dni deploymenti Kubernetes-a.<\/p>\n<h2>Na\u010dini uvajanja<\/h2>\n<p>\nV zadnjih letih so se v Kubernetesu uveljavili razli\u010dni na\u010dini in orodja za uvajanje:<\/p>\n<ol>\n<li> <b>Na osnovi doma\u010dih predlog Kubernetes\/Kustomize<\/b>To je najla\u017eji na\u010din za upravljanje aplikacijami v Kubernetesu. Razvijalec ustvari osnovne YAML datoteke in jih uporabi. Da se izogne nenehnemu prepisovanju istih predlog, je bil razvit Kustomize (spremeni predloge Kubernetes v module). <i><b>Op. prev.<\/b>: Kustomize je bil integriran v kubectl z <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/445196\/\">izdajo Kubernetes 1.14<\/a><\/noindex>.<\/i><\/li>\n<li> <b>Helm Charti<\/b>. Helm chartovi omogu\u0107avaju kreiranje setova \u0161ablona, init kontejnera, sidecar-a itd., koji se koriste za implementaciju aplikacija sa fleksibilnijim mogu\u0107nostima konfiguracije nego u pristupu zasnovanom na \u0161ablonima. Osnova ove metode su \u0161ablonizovani YAML fajlovi. Helm ih popunjava razli\u010ditim parametrima i zatim \u0161alje Tiller-u \u2014 klasterskom komponentu koja ih implementira u klasteru i omogu\u0107ava a\u017euriranja i vra\u0107anja. Va\u017eno je to \u0161to se su\u0161tinski, Helm jednostavno ubacuje potrebne vrednosti u \u0161ablone i zatim ih primenjuje na isti na\u010din kao u tradicionalnom pristupu <i>(ve\u010d o tem, kako to vse deluje in kako ga lahko uporabite, preberite v na\u0161i <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/423239\/\">\u010dlanku o Helmu<\/a><\/noindex> \u2014 op. prev.)<\/i>. Obstaja velika raznolikost pripravljenih Helm chartov, ki pokrivajo \u0161irok spekter nalog.<\/li>\n<li> <b>Alternativna orodja<\/b>. Obstaja \u0161tevilna alternativna orodja. Vse jih zdru\u017euje dejstvo, da pretvarjajo dolo\u010dene predloge v razumljive Kubernetes YAML datoteke in jih nato aplicirajo.<\/li>\n<\/ol>\n<p>\nPri svojem delu nenehno uporabljamo Helm chart-e za pomembna orodja (ker je v njih veliko \u017ee pripravljenega, kar bistveno olaj\u0161a \u017eivljenje) ter '\u010diste' YAML datoteke Kubernetes za name\u0161\u010danje lastnih aplikacij.<\/p>\n<h2>Pull &amp; Push<\/h2>\n<p>\nV eni svojih nedavnih objav na blogu sem predstavil orodje <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/weaveworks\/flux\">Weave Flux<\/a><\/noindex>, omogu\u0107avaju\u0107i commit-ovanje \u0161ablona u Git repozitorij i a\u017euriranje deploymenta nakon svakog commita ili push-a kontejnera. Moje iskustvo pokazuje da je ovaj alat jedan od klju\u010dnih u promociji pull pristupa, stoga \u0107u \u010desto upu\u0107ivati na njega. Ako \u017eelite da saznate vi\u0161e o tome kako ga koristiti, evo <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@m.k.joerg\/gitops-weave-flux-in-detail-77ce36945646\">povezava do \u010dlanka<\/a><\/noindex>.<\/p>\n<p><i><b>NB!<\/b> Vse prednosti uporabe GitOps ostajajo za oba pristopa.<\/i><\/p>\n<h2>Pristop na osnovi Pull<\/h2>\n<p>\n<img decoding=\"async\" alt=\"GitOps: pore\u0111enje Pull i Push metoda\" src=\"\/wp-content\/uploads\/4ed8e6de36bc37d0e747ff99027f8399.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOsnova pristopa pull temelji na dejstvu, da se vse spremembe izvajajo znotraj klasterja. Znotraj klasterja je operator, ki redno preverja povezane Git in Docker Registry repozitorije. \u010ce pride do kakr\u0161nih koli sprememb, se stanje klasterja posodobi od znotraj. To se obi\u010dajno \u0161teje za precej varno, saj noben zunanji klient nima dostopa do adminsitrativnih pravic klasterja.<\/p>\n<p><b>Prednosti:<\/b><\/p>\n<ol>\n<li> Noben zunanji klient nima pravic za uvajanje sprememb v klaster, vse posodobitve se izvajajo od znotraj.<\/li>\n<li> Nekateri alati prav tako omogo\u010dajo sinhronizacijo posodobitev Helm chartov in njihovo povezovanje s klasterjem.<\/li>\n<li> Docker Registry lahko skenirate za nove razli\u010dice. \u010ce se pojavi nova slika, se Git repozitorij in deployment posodobita na novo razli\u010dico.<\/li>\n<li> Pull alati so lahko razdeljeni po razli\u010dnih imenskih prostorih z razli\u010dnimi Git repozitoriji in pravicami dostopa. Zaradi tega je mogo\u010de uporabiti ve\u010dnajemno (multitenant) model. Na primer, skupina A lahko uporablja imenski prostor A, skupina B pa imenski prostor B, skupina, ki se ukvarja z infrastrukturo, pa lahko uporablja globalni prostor.<\/li>\n<li> Na splo\u0161no so alati precej lahki.<\/li>\n<li> V kombinaciji z alat omejevalcem, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bitnami-labs\/sealed-secrets\">Bitnami Sealed Secrets,<\/a><\/noindex>, se skrivnosti lahko shranijo v \u0161ifrirani obliki v Git repozitoriju in pridobijo znotraj klasterja.<\/li>\n<li> Ni povezave s CD-pipelines, saj se razporeditve izvajajo znotraj klasterja.<\/li>\n<\/ol>\n<p>\n<b>\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438<\/b>:<\/p>\n<ol>\n<li> Upravljanje tajnama implementacija iz Helm \u010dartera je slo\u017eenije nego s obi\u010dnima, jer ih prvo treba generirati u obliku, recimo, zatvorenih tajni, zatim de\u0161ifrirati putem unutarnjeg operatora i tek tada postaju dostupne za pull alat. Nakon toga mo\u017eete pokrenuti verziju u Helmu s vrijednostima u ve\u0107 implementiranim tajnama. Najjednostavniji na\u010din je stvoriti tajnu sa svim Helm vrijednostima koje se koriste za implementaciju, de\u0161ifrirati je i poslu\u017eiti u Gitu.<\/li>\n<li> Primjenom pull pristupa vezani ste za alate koji upravljaju pull-ima. To ograni\u010dava mogu\u0107nost prilagodbe procesa implementacije u klasteru. Na primjer, rad s Kustomizeom je ote\u017ean jer se mora izvr\u0161avati prije nego \u0161to kona\u010dni obrasci odu u Git. Ne ka\u017eem da se ne mogu koristiti odvojeni alati, ali ih je te\u017ee integrirati u proces implementacije.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Pristop, ki temelji na Push<\/h2>\n<p>\n<img decoding=\"async\" alt=\"GitOps: pore\u0111enje Pull i Push metoda\" src=\"\/wp-content\/uploads\/533fc0bd107c3338d323e908ae9e75ab.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV push-pristopu zunanja sistem (predvsem CD-pipeline) spro\u017ei uvajanja v grozd po commitu v Git-repozitoriju ali ob uspe\u0161nem zaklju\u010dku prej\u0161njega CI-pipeline. V tem pristopu ima sistem dostop do grozda.<\/p>\n<p><b>Prednosti<\/b>:<\/p>\n<ol>\n<li> Varnost je dolo\u010dena z Git-repozitorijem in procesom gradnje.<\/li>\n<li> Uvajanje Helm grafikonov je la\u017eje, saj je podprto s Helm vti\u010dniki.<\/li>\n<li> Upravljanje s skrivnostmi je la\u017eje, saj jih lahko uporabite v pipeline, poleg tega pa jih lahko shranite v Git v \u0161ifrirani obliki (odvisno od uporabnikovih preferenc).<\/li>\n<li> Pomanjkanje vezave na dolo\u010deno orodje, saj lahko uporabite katerokoli vrsto.<\/li>\n<li> Posodobitve razli\u010dic kontejnerjev lahko spro\u017ei proces gradnje.<\/li>\n<\/ol>\n<p>\n<b>\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438<\/b>:<\/p>\n<ol>\n<li> Podatki za dostop do grozda so shranjeni v sistemu gradnje.<\/li>\n<li> A\u017euriranje kontejnera implementacija i dalje se lak\u0161e provodi s pull procesom.<\/li>\n<li> Mo\u010dna odvisnost od CD-sistema, saj so potrebni pipeline morda prvotno napisani za Gitlab Runners, nato pa se odlo\u010di ekipa preiti na Azure DevOps ali Jenkins\u2026 in bo potrebno migrirati veliko \u0161tevilo procesov gradnje.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Zaklju\u010dki: Push ali Pull?<\/h2>\n<p>\nKot obi\u010dajno, vsak pristop ima svoje prednosti in slabosti. Nekatere naloge je la\u017eje izvesti na en na\u010din, druge pa na drugega. Sprva sem ro\u010dno izvajal wdpritje, a ko sem naletel na nekaj \u010dlankov o Weave Flux, sem se odlo\u010dil uvesti procese GitOps za vse projekte. Za osnovne predloge je bilo to enostavno, a kmalu sem se za\u010del sre\u010devati s te\u017eavami pri delu z Helm charti. Takrat je Weave Flux ponujal le za\u010detno razli\u010dico Helm Chart Operatorja, vendar tudi zdaj so nekatere naloge zahtevnej\u0161e zaradi potrebe po ro\u010dni izdelavi skrivnosti in njihovem uporabi. Lahko bi rekli, da je pull pristop veliko bolj varen, saj so poverilnice klasterja dostopne le v svojem okviru, kar pove\u010duje varnost in upravi\u010duje dodatne napore.<\/p>\n<p>Nakon malog razmi\u0161ljanja, do\u0161ao sam do iznena\u0111uju\u0107eg zaklju\u010dka da to nije slu\u010daj. Kada govorimo o komponentama koje zahtijevaju maksimalnu za\u0161titu, na takav bi popis u\u0161li skladi\u0161ta tajni i CI\/CD sustavi, Git repozitoriji. Informacije unutar njih su vrlo ranjive i trebaju maksimalnu za\u0161titu. Osim toga, ako netko prodre u va\u0161 Git repozitorij i mo\u017ee push-ati kod, mo\u017ee implementirati sve \u0161to po\u017eeli (neovisno o odabranom pristupu, bilo da je to pull ili push) i infiltrirati se u sustave klastera. Stoga su najva\u017enije komponente koje zahtijevaju za\u0161titu Git repozitorij i CI\/CD sustavi, a ne podaci o klasteru. Ako imate dobro postavljene politike i sigurnosne mjere za takve sustave, a podaci o klasteru se izvode u pipeline samo kao tajne, dodatna sigurnost pull pristupa mo\u017eda se ne\u0107e pokazati tako vrijednom kao \u0161to se prvotno pretpostavljalo.<\/p>\n<p>Torej, \u010de je pull pristop bolj delovno intenziven in ne prina\u0161a varnostne prednosti, ali ni logi\u010dno uporabiti le push pristop? Vendar pa bi nekdo lahko trdil, da ste pri push pristopu preve\u010d odvisni od CD sistema in da morda ni pametno, da to delate, da bi v prihodnosti olaj\u0161ali migracije.<\/p>\n<p>Po mojem mnenju (kot vedno) je treba uporabiti tisto, kar najbolj ustreza konkretnemu primeru, ali kombinirati oboje. Osebno uporabljam oba pristopa: Weave Flux za deploymente na podlagi pull, ki ve\u010dinoma vklju\u010dujejo na\u0161e lastne storitve, in push-pristop s Helmom in vti\u010dniki, ki poenostavijo uporabo Helm-chartov na klastru ter omogo\u010dajo brezskrbno ustvarjanje skrivnosti. Mislim, da nikoli ne bo enotne re\u0161itve, primerne za vse primere, ker ima vedno veliko podrobnosti, ki so odvisne od konkretnega na\u010dina uporabe. Kljub temu toplo priporo\u010dam GitOps \u2014 mo\u010dno olaj\u0161a \u017eivljenje in pove\u010duje varnost.<\/p>\n<p>Upam, da bo moje izku\u0161nje na tem podro\u010dju pomagale dolo\u010diti, kateri postopek najve\u010d ustreza va\u0161emu tipu deploymentov, in vesel bom, da bom sli\u0161al va\u0161e mnenje.<\/p>\n<h2>P.S. Opomba prevajalca<\/h2>\n<p>\nMed slabostmi pull modela je to\u010dka, da je te\u017eko shraniti v Git upodobljene manifeste, vendar ni slabosti, da CD-pipeline v pull modelu \u017eivi lo\u010deno od implementacije in v bistvu postane pipeline kategorije <i>Continuous Apply<\/i>. Zato bo potrebno \u0161e ve\u010d napora, da se zbira status vseh deploymentov in na nek na\u010din omogo\u010di dostop do logov\/statusa, pri \u010demer je za\u017eeleno, da je povezan s CD sistemom.<\/p>\n<p>V tem smislu push-model omogo\u010da, da se zagotovi vsaj nekaj garancij za izvedbo, saj lahko \u010das \u017eivljenja pipeline-a nastavimo na \u010das \u017eivljenja izvedbe.<\/p>\n<p>Preizkusili smo oba modela in pri\u0161li do enakih zaklju\u010dkov kot avtor \u010dlanka:<\/p>\n<ol>\n<li> Pull model se nam prilagaja za organizacijo posodobitve sistemskih komponent na \u0161tevilnih klasterjih (glejte <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/455543\/\">\u010dlanek o addon-operatorju<\/a><\/noindex>).<\/li>\n<li> Push-model na osnovi GitLab CI je dobro primeren za izvedbo aplikacij s pomo\u010djo Helm-chartov. Pri tem se izvedba deploymentov v okviru pipeline-ov spremlja s pomo\u010djo orodja <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">werf<\/a><\/noindex>. Mimogrede, v kontekstu tega na\u0161ega projekta smo nenehno sli\u0161ali 'GitOps', ko smo razpravljali o nujnih te\u017eavah DevOps in\u017eenirjev na na\u0161em stojnico na KubeCon Europe'19.<\/li>\n<\/ol>\n<p><\/p>\n<h2>P.P.S. od prevajalca<\/h2>\n<p>\nPreberite tudi na na\u0161em blogu:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/441964\/\">Kubernetes tipy a triky: migr\u00e1cia funguj\u00facich zdrojov v klastri pod spr\u00e1vou Helmu 2<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/434160\/\">Predstavljamo knji\u017enico kubedog za spremljanje virov Kubernetes.<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/449096\/\">Raz\u0161irjamo in dopolnjujemo Kubernetes (pregled in video poro\u010dila)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436910\/\">Nasveti za ustvarjanje nestandardnih delovnih tokov v GitLab CI<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p class=\"for_users_only_msg\">Samo registrovani korisnici mogu u\u010destvovati u anketi. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Prijavite se<\/a><\/noindex>, molim vas.<\/p>\n<h2 class=\"default-block__polling-title\">Ali uporabljate GitOps?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Da, pull pristop<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Da, push<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Da, pull + push<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Da, nekaj drugega<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ne<\/p>\n<\/li>\n<\/ul>\n<p>    Glasovalo je 30 uporabnikov. 10 uporabnikov se je vzdr\u017ealo.<br \/>\n<br \/>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/456754\/\">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.: \u0412 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435 Kubernetes \u044f\u0432\u043d\u0443\u044e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u0440\u0435\u043d\u0434 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c GitOps, \u0432 \u0447\u0451\u043c \u043c\u044b \u043b\u0438\u0447\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u043b\u0438\u0441\u044c, \u043f\u043e\u0441\u0435\u0442\u0438\u0432 KubeCon Europe 2019. \u042d\u0442\u043e\u0442 \u0442\u0435\u0440\u043c\u0438\u043d \u0431\u044b\u043b \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043d \u0433\u043b\u0430\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Weaveworks \u2014 Alexis Richardson \u2014 \u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 (\u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u2014 Git, \u043e\u0442\u043a\u0443\u0434\u0430 \u0438 \u0441\u0430\u043c\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435) \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438. \u0412 [&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-35594","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - 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\/sl\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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\udd47GitOps: \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 Pull \u0438 Push | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u043c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push\" \/>\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:05:15+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:05:15+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\udd47GitOps: primerjava metod Pull in Push | ProHoster","description":"Primer.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\udd47GitOps: \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 Pull \u0438 Push | ProHoster","og:description":"\u041f\u0440\u0438\u043c.","og:url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push","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:05:15+00:00","article:modified_time":"2019-10-31T19:05:15+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35594","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-21 23:54:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:05:10","updated":"2026-01-21 23:54:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/35594","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=35594"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/35594\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=35594"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=35594"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=35594"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}