{"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\/no\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push","title":{"rendered":"GitOps: sammenligning av Pull- og Push-metoder","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Obs. overs.<\/b>: I Kubernetes-samfunnet blir trenden kalt GitOps stadig mer popul\u00e6r, noe vi personlig fikk bekreftet da vi <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/454184\/\">bes\u00f8kte<\/a><\/noindex> KubeCon Europe 2019. Dette begrepet ble relativt nylig <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-operations-by-pull-request\">oppfunnet<\/a><\/noindex> av lederen for Weaveworks \u2014 Alexis Richardson \u2014 og inneb\u00e6rer bruk av de verkt\u00f8yene som utviklere kjenner godt (i f\u00f8rste rekke \u2014 Git, derav navnet) for \u00e5 l\u00f8se driftsoppgaver. Spesielt handler det om drift av Kubernetes gjennom \u00e5 lagre konfigurasjonene i Git og automatisk rulle ut endringer til klyngen. Matthias Jg forklarer de to tiln\u00e6rmingene til denne utrullingen i denne artikkelen.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"GitOps: sammenligning av Pull- og Push-metoder\" src=\"\/wp-content\/uploads\/2862627cedb4347679d0c14876a24869.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI fjor <i>(egentlig, formelt sett skjedde dette i august 2017 \u2014 anm. oversetter.)<\/i> Det har kommet en ny tiln\u00e6rming til distribusjon av applikasjoner i Kubernetes. Den kalles GitOps, og den er basert p\u00e5 det grunnleggende prinsippet om at versjonskontroll av distribusjoner skjer i et sikkert Git-repositorium.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><b>De viktigste fordelene med denne tiln\u00e6rmingen er som f\u00f8lger<\/b>:<\/p>\n<ol>\n<li> <b>Versjonskontroll av distribusjoner og endringshistorikk<\/b>. Tilstanden til hele klusteret lagres i Git-repositoriet, og distribusjoner oppdateres kun gjennom commits. I tillegg kan alle endringer spores med endringshistorikk.<\/li>\n<li> <b>Tilbakerullinger ved bruk av kjente Git-kommandoer<\/b>. En enkel <code>git reset<\/code> det muliggj\u00f8r tilbakestilling av endringer i distribusjoner; tidligere tilstander er alltid tilgjengelige.<\/li>\n<li> <b>Klar tilgangskontroll<\/b>. Vanligvis inneholder Git-systemet mange konfidentielle data, s\u00e5 de fleste selskaper legger stor vekt p\u00e5 \u00e5 beskytte det. Denne beskyttelsen gjelder derfor ogs\u00e5 for operasjoner med distribusjoner.<\/li>\n<li> <b>Retningslinjer for distribusjoner<\/b>. De fleste Git-systemer st\u00f8tter opprinnelig policyer for ulike grener \u2014 for eksempel kan bare pull-requests oppdatere master, og endringer m\u00e5 gjennomg\u00e5s og godkjennes av et annet teammedlem. Som med tilgangskontroll, anvendes de samme policyene p\u00e5 oppdateringer av distribusjoner.<\/li>\n<\/ol>\n<p>\nSom du ser, har GitOps-metoden mange fordeler. I l\u00f8pet av det siste \u00e5ret har to tiln\u00e6rminger blitt spesielt popul\u00e6re. Den ene er basert p\u00e5 push, den andre p\u00e5 pull. F\u00f8r vi ser n\u00e6rmere p\u00e5 dem, la oss f\u00f8rst se p\u00e5 hvordan typiske distribusjoner i Kubernetes ser ut.<\/p>\n<h2>Distributionsmetoder<\/h2>\n<p>\nI l\u00f8pet av de siste \u00e5rene har det etablert seg ulike metoder og verkt\u00f8y for distribusjoner i Kubernetes:<\/p>\n<ol>\n<li> <b>Basert p\u00e5 native maler Kubernetes\/Kustomize<\/b>Dette er den enkleste m\u00e5ten \u00e5 deployere applikasjoner i Kubernetes. Utvikleren lager grunnleggende YAML-filer og anvender dem. For \u00e5 unng\u00e5 \u00e5 m\u00e5tte skrive de samme malene om igjen, ble Kustomize utviklet (det omdanner Kubernetes-maler til moduler). <i><b>Obs. overs.<\/b>: Kustomize ble integrert i kubectl med <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/445196\/\">Kubernetes versjon 1.14<\/a><\/noindex>.<\/i><\/li>\n<li> <b>Helm Charts<\/b>. Helm-diagrammer tillater opprettelse av malsett, init-containere, sidecar-er osv., som brukes til distribusjon av applikasjoner med mer fleksible konfigurasjonsmuligheter enn i malbaserte tiln\u00e6rminger. Grunnlaget for denne metoden er templaterte YAML-filer. Helm fyller ut dem med ulike parametere og sender dem deretter til Tiller \u2014 den klyngesammenstillingskomponenten som distribuerer dem i klyngen og muliggj\u00f8r oppdateringer og tilbakestillinger. Det viktige er at Helm i hovedsak bare setter inn de n\u00f8dvendige verdiene i malene og bruker dem p\u00e5 samme m\u00e5te som i den tradisjonelle tiln\u00e6rmingen. <i>(for mer informasjon om hvordan dette fungerer og hvordan det kan brukes, se v\u00e5r <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/423239\/\">artikkel om Helm<\/a><\/noindex> \u2013 obs. overs.)<\/i>. Det finnes et stort mangfold av ferdige Helm-charts som dekker et bredt spekter av oppgaver.<\/li>\n<li> <b>Alternativer<\/b>. Det finnes mange alternative verkt\u00f8y. Alle deler det at de omdanner visse malfiler til forst\u00e5elige Kubernetes YAML-filer og deretter anvender dem.<\/li>\n<\/ol>\n<p>\nI v\u00e5rt arbeid bruker vi kontinuerlig Helm-charts for viktige verkt\u00f8y (siden mye allerede er klart, noe som betydelig forenkler livet) og 'rene' Kubernetes YAML-filer for \u00e5 deployere egne applikasjoner.<\/p>\n<h2>Pull &amp; Push<\/h2>\n<p>\nI et av mine nyere blogginnlegg presenterte jeg verkt\u00f8yet <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/weaveworks\/flux\">Weave Flux<\/a><\/noindex>, som gj\u00f8r det mulig \u00e5 commite maler i Git-repositoriet og oppdatere distribusjonen etter hver commit eller push av containeren. Min erfaring viser at dette verkt\u00f8yet er et av de viktigste i arbeidet med \u00e5 fremme pull-tiln\u00e6rmingen, s\u00e5 jeg vil ofte referere til det. Hvis du vil vite mer om hvordan du bruker det, her er <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@m.k.joerg\/gitops-weave-flux-in-detail-77ce36945646\">lenken til artikkelen<\/a><\/noindex>.<\/p>\n<p><i><b>NB!<\/b> Alle fordelene ved \u00e5 bruke GitOps gjelder for begge tiln\u00e6rminger.<\/i><\/p>\n<h2>Pull-baserte tiln\u00e6rminger<\/h2>\n<p>\n<img decoding=\"async\" alt=\"GitOps: sammenligning av Pull- og Push-metoder\" src=\"\/wp-content\/uploads\/4ed8e6de36bc37d0e747ff99027f8399.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nGrunnlaget for pull-tiln\u00e6rmingen ligger i det faktum at alle endringer blir anvendt fra innsiden av klyngen. Inne i klyngen finnes det en operat\u00f8r som regelmessig sjekker de tilknyttede Git-repositoriene og Docker Registry. Hvis det skjer noen endringer der, oppdateres tilstanden til klyngen fra innsiden. Det anses vanligvis for \u00e5 v\u00e6re ganske sikkert, ettersom ingen eksterne kunder har tilgang til administratorrettighetene til klyngen.<\/p>\n<p><b>Fordeler:<\/b><\/p>\n<ol>\n<li> Ingen eksterne kunder har rett til \u00e5 foreta endringer i klyngen, alle oppdateringer rulles ut fra innsiden.<\/li>\n<li> Noen verkt\u00f8y lar ogs\u00e5 synkronisere oppdateringer av Helm-diagrammer og knytte dem til klyngen.<\/li>\n<li> Docker Registry kan skannes for nye versjoner. Hvis et nytt bilde dukker opp, oppdateres Git-repositoriet og distribusjonen til den nye versjonen.<\/li>\n<li> Pull-verkt\u00f8y kan distribueres p\u00e5 forskjellige navnerom med ulike Git-repositorier og tilgangsrettigheter. Dette gj\u00f8r det mulig \u00e5 benytte en multitenant-modell. For eksempel kan Team A bruke navnerom A, Team B et navnerom B, mens teamet som jobber med infrastrukturen kan bruke et globalt navnerom.<\/li>\n<li> Generelt er verkt\u00f8yene ganske lette.<\/li>\n<li> I kombinasjon med verkt\u00f8y som operat\u00f8ren <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bitnami-labs\/sealed-secrets\">Bitnami Sealed Secrets<\/a><\/noindex>, kan hemmeligheter lagres i kryptert format i Git-repositoriet og hentes inne i klyngen.<\/li>\n<li> Det er ingen forbindelse til CD-pipelines, ettersom distribusjoner skjer inne i klyngen.<\/li>\n<\/ol>\n<p>\n<b>Ulemper<\/b>:<\/p>\n<ol>\n<li> \u00c5 h\u00e5ndtere hemmeligheter fra deployeringer i Helm-diagrammer er mer komplisert enn med vanlige hemmeligheter, siden de f\u00f8rst m\u00e5 genereres som for eksempel sealed secrets, deretter dekrypteres av den interne operat\u00f8ren, og f\u00f8rst etter dette blir de tilgjengelige for pull-verkt\u00f8y. Deretter kan du kj\u00f8re en utgivelse i Helm med verdiene i de allerede distribuert hemmelighetene. Den enkleste m\u00e5ten er \u00e5 lage en hemmelighet med alle Helm-verdiene som brukes til deployeringen, dekryptere den og commite den til Git.<\/li>\n<li> Ved \u00e5 bruke pull-tiln\u00e6rmingen blir du bundet til verkt\u00f8y som opererer med pull. Dette begrenser muligheten til \u00e5 tilpasse deployeringsprosessen i klyngen. For eksempel er det vanskeligere \u00e5 arbeide med Kustomize fordi det m\u00e5 kj\u00f8res f\u00f8r de endelige malene g\u00e5r til Git. Jeg sier ikke at separate verkt\u00f8y ikke kan brukes, men de er vanskeligere \u00e5 integrere i deployeringsprosessen.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Push-basert tiln\u00e6rming<\/h2>\n<p>\n<img decoding=\"async\" alt=\"GitOps: sammenligning av Pull- og Push-metoder\" src=\"\/wp-content\/uploads\/533fc0bd107c3338d323e908ae9e75ab.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI push-tiln\u00e6rmingen starter et eksternt system (for det meste CD-pipelines) distribusjonene i klyngen etter at det er gjort et commit i Git-repositoriet eller etter vellykket kj\u00f8ring av den foreg\u00e5ende CI-pipelinen. I denne tiln\u00e6rmingen har systemet tilgang til klyngen.<\/p>\n<p><b>Fordeler<\/b>:<\/p>\n<ol>\n<li> Sikkerheten bestemmes av Git-repositoriet og bygge-pipelinen.<\/li>\n<li> Det er enklere \u00e5 distribuere Helm-diagrammer, med st\u00f8tte for Helm-plugins.<\/li>\n<li> \u00c5 administrere hemmeligheter er enklere, siden man kan bruke hemmelighetene i pipeliner og oppbevare dem i Git i kryptert form (avhengig av brukerens preferanser).<\/li>\n<li> Ingen binding til spesifikke verkt\u00f8y, siden alle typer kan brukes.<\/li>\n<li> Oppdateringer av containerversjoner kan initieres av bygge-pipelinen.<\/li>\n<\/ol>\n<p>\n<b>Ulemper<\/b>:<\/p>\n<ol>\n<li> Data for \u00e5 f\u00e5 tilgang til klyngen er inne i byggesystemet.<\/li>\n<li> Oppdatering av containere i deployeringene er fortsatt enklere med en pull-prosess.<\/li>\n<li> Sterk avhengighet av CD-systemet, siden de n\u00f8dvendige pipeline-ene kanskje f\u00f8rst ble skrevet for Gitlab Runners, og s\u00e5 bestemmer teamet seg for \u00e5 g\u00e5 over til Azure DevOps eller Jenkins\u2026 og det m\u00e5 migreres mange bygge-pipelines.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Oppsummering: Push eller Pull?<\/h2>\n<p>\nSom vanlig har hver tiln\u00e6rming sine fordeler og ulemper. Noen oppgaver er lettere \u00e5 utf\u00f8re med \u00e9n l\u00f8sning, mens andre er vanskeligere med en annen. I starten utf\u00f8rte jeg distribusjoner manuelt, men etter \u00e5 ha kommet over noen artikler om Weave Flux, bestemte jeg meg for \u00e5 implementere GitOps-prosesser for alle prosjektene mine. For grunnleggende maler var dette enkelt, men jeg begynte deretter \u00e5 m\u00f8te utfordringer med Helm-diagrammer. Da tilb\u00f8d Weave Flux bare en tidlig versjon av Helm Chart Operator, men selv n\u00e5 er noen oppgaver vanskeligere p\u00e5 grunn av behovet for manuelt \u00e5 opprette hemmeligheter og bruke dem. Du kan si at pull-tiln\u00e6rmingen er mye sikrere, siden klyngelegitimasjonen ikke er tilgjengelig utenfor, noe som \u00f8ker sikkerheten s\u00e5 mye at det er verdt den ekstra innsatsen.<\/p>\n<p>Etter \u00e5 ha tenkt litt, kom jeg til den overraskende konklusjonen at dette ikke er tilfelle. N\u00e5r det gjelder komponenter som krever maksimal beskyttelse, vil lagre av hemmeligheter og CI\/CD-systemer, samt Git-repositorier, v\u00e6re i en slik liste. Informasjonen inni dem er sv\u00e6rt s\u00e5rbar og trenger maksimal beskyttelse. I tillegg, hvis noen bryter seg inn i Git-repositoriet ditt og kan pushe kode dit, kan de distribuere hva de vil (uavhengig av hvilken tiln\u00e6rming som brukes, enten det er pull eller push), og infiltrere systemene i klyngen. Dermed er de viktigste komponentene som krever beskyttelse, Git-repositoriet og CI\/CD-systemene, og ikke klyngelegitimasjonene. Hvis du har godt konfigurerte policyer og sikkerhetstiltak for slike systemer, og klyngelegitimasjonene hentes inn i pipeline bare som hemmeligheter, kan den ekstra sikkerheten fra pull-tiln\u00e6rmingen vise seg \u00e5 v\u00e6re mindre verdifull enn f\u00f8rst antatt.<\/p>\n<p>S\u00e5, hvis pull-tiln\u00e6rmingen er mer arbeidskrevende og ikke gir noen sikkerhetsfordel, er det ikke logisk \u00e5 bruke kun push-tiln\u00e6rmingen? Men noen kan hevde at med push-tiln\u00e6rmingen er du for avhengig av CI-systemet, og det kan v\u00e6re bedre \u00e5 unng\u00e5 det for \u00e5 gj\u00f8re fremtidige migrasjoner enklere.<\/p>\n<p>Etter min mening (som alltid) b\u00f8r man bruke det som passer best til den spesifikke situasjonen, eller kombinere. Jeg bruker personlig begge tiln\u00e6rmingene: Weave Flux for pull-baserte deployeringer som hovedsakelig inkluderer v\u00e5re egne tjenester, og push-tiln\u00e6rmingen med Helm og plugins som forenkler bruken av Helm-diagrammer til klyngen og lar deg enkelt opprette hemmeligheter. Jeg tror det aldri vil v\u00e6re \u00e9n l\u00f8sning som passer for alle tilfeller, fordi det alltid er mange nyanser og de avhenger av den spesifikke bruken. Jeg anbefaler sterkt GitOps \u2014 det gj\u00f8r livet mye enklere og \u00f8ker sikkerheten.<\/p>\n<p>Jeg h\u00e5per min erfaring med dette emnet kan hjelpe deg med \u00e5 avgj\u00f8re hvilken metode som passer best for din type deployeringer, og jeg ser frem til \u00e5 h\u00f8re din mening.<\/p>\n<h2>P.S. Merknad fra oversetteren<\/h2>\n<p>\nUlempen med pull-modellen er at det er vanskelig \u00e5 legge de rendert manifestene i Git, men det er ikke en ulempe at CD-pipeline i pull-modellen lever adskilt fra utrullingen og i praksis blir en pipeline av kategorien <i>Continuous Apply<\/i>. Dette krever derfor enda mer innsats for \u00e5 samle status fra alle deployeringene og gi tilgang til logger\/status, helst med tilknytning til CD-systemet.<\/p>\n<p>I denne forstand tillater push-modellen \u00e5 gi en viss garanti for utrulling, fordi levetiden til pipeline kan settes lik levetiden til utrullingen.<\/p>\n<p>Vi har testet begge modeller og kommet til de samme konklusjonene som forfatteren av artikkelen:<\/p>\n<ol>\n<li> Pull-modellen passer oss for \u00e5 organisere oppdatering av systemkomponenter p\u00e5 et stort antall klynger (se <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/455543\/\">artikkelen om addon-operator<\/a><\/noindex>).<\/li>\n<li> Push-modellen basert p\u00e5 GitLab CI passer godt for utrulling av applikasjoner ved hjelp av Helm-diagrammer. Utrullingen av deployeringene i pipeline er sporet med hjelp av verkt\u00f8yet <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">werf<\/a><\/noindex>. For \u00f8vrig, i konteksten av dette prosjektet h\u00f8rte vi stadig \u00abGitOps\u00bb da vi diskuterte aktuelle problemer for DevOps-ingeni\u00f8rer p\u00e5 v\u00e5r stand p\u00e5 KubeCon Europe 19.<\/li>\n<\/ol>\n<p><\/p>\n<h2>P.P.S. fra oversetteren<\/h2>\n<p>\nAlso read in our blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/441964\/\">Kubernetes tips &amp; tricks: oversette kj\u00f8rende ressurser i klyngen til Helm 2<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/434160\/\">Vi presenterer kubedog-biblioteket for overv\u00e5kning av Kubernetes-ressurser<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/449096\/\">Utvider og supplere Kubernetes (oversikt og video av foredraget)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436910\/\">Tips for \u00e5 lage tilpassede arbeidsflyter i GitLab CI<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p class=\"for_users_only_msg\">Kun registrerte brukere kan delta i unders\u00f8kelsen. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Logg inn<\/a><\/noindex>, v\u00e6r s\u00e5 snill.<\/p>\n<h2 class=\"default-block__polling-title\">Bruker du GitOps?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ja, pull-tiln\u00e6rmingen<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ja, push<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ja, pull + push<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ja, noe annet<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Nei<\/p>\n<\/li>\n<\/ul>\n<p>    30 brukere stemte. 10 brukere avholdt seg.<br \/>\n<br \/>Kilde: <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.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\/no\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"nn_NO\" \/>\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\/no\/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: sammenligning av Pull- og Push-metoder | ProHoster","description":"Note.","canonical_url":"https:\/\/prohoster.info\/no\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nn_NO","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\/no\/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\/no\/wp-json\/wp\/v2\/posts\/35594","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/comments?post=35594"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts\/35594\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/media?parent=35594"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/categories?post=35594"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/tags?post=35594"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}