{"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\/da\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push","title":{"rendered":"GitOps: sammenligning af Pull- og Push-metoder","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Bem. overs.<\/b>: I Kubernetes-f\u00e6llesskabet vinder en trend kaldet GitOps tydelig popularitet, hvilket vi personligt har erfaret, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/454184\/\">da vi bes\u00f8gte<\/a><\/noindex> KubeCon Europe 2019. Denne betegnelse blev forholdsvis for nylig <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-operations-by-pull-request\">opfundet<\/a><\/noindex> af lederen af Weaveworks \u2014 Alexis Richardson \u2014 og refererer til anvendelsen af velkendte v\u00e6rkt\u00f8jer for udviklere (prim\u00e6rt Git, hvilket ogs\u00e5 er grunden til navnet) til at l\u00f8se driftsm\u00e6ssige opgaver. Specifikt handler det om driften af Kubernetes ved at opbevare dets konfigurationer i Git og automatisk udrulning af \u00e6ndringer til klusteret. Om to tilgange til denne udrulning fort\u00e6ller Matthias Jg i denne artikel.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"GitOps: sammenligning af Pull- og Push-metoder\" src=\"\/wp-content\/uploads\/2862627cedb4347679d0c14876a24869.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI sidste \u00e5r <i>(det skete faktisk formelt i august 2017 \u2014 bem. fra overs.)<\/i> en ny tilgang til udrulning af applikationer i Kubernetes er blevet introduceret. Den kaldes GitOps, og dens fundamentale koncept er, at versionssporing af deployment'er foreg\u00e5r i et sikkert Git-repositorium.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><b>De vigtigste fordele ved denne tilgang er som f\u00f8lger<\/b>:<\/p>\n<ol>\n<li> <b>Versionsstyring af deployment'er og \u00e6ndringshistorik<\/b>. Tilstanden for hele klyngen opbevares i Git-repositoriet, og deployment'er opdateres kun via commits. Derudover kan alle \u00e6ndringer spores ved hj\u00e6lp af commit-historikken.<\/li>\n<li> <b>Tilbagef\u00f8rsel ved hj\u00e6lp af velkendte Git-kommandoer<\/b>. En simpel <code>git reset<\/code> giver mulighed for at nulstille \u00e6ndringer i deployment'er; tidligere tilstande er altid tilg\u00e6ngelige.<\/li>\n<li> <b>F\u00e6rdig adgangskontrol<\/b>. Normalt indeholder Git-systemer mange fortrolige data, s\u00e5 de fleste virksomheder l\u00e6gger stor v\u00e6gt p\u00e5 deres beskyttelse. F\u00f8lgelig g\u00e6lder denne beskyttelse ogs\u00e5 for operationer med deployment'er.<\/li>\n<li> <b>Politikker for udrulninger<\/b>. De fleste Git-systemer har oprindeligt politikker for forskellige grene \u2014 for eksempel kan kun pull requests opdatere master, og \u00e6ndringer skal gennemg\u00e5s og godkendes af et andet teammedlem. Som med adgangskontrol anvendes de samme politikker for opdateringer af deployment'er.<\/li>\n<\/ol>\n<p>\nSom du kan se, har GitOps-metoden mange fordele. I det seneste \u00e5r er to tilgange blevet s\u00e6rligt popul\u00e6re. En er baseret p\u00e5 push, den anden p\u00e5 pull. F\u00f8r vi ser n\u00e6rmere p\u00e5 dem, lad os f\u00f8rst tage et kig p\u00e5, hvordan typiske Kubernetes-deployment'er ser ud.<\/p>\n<h2>Metoder til implementering<\/h2>\n<p>\nI l\u00f8bet af de seneste \u00e5r er der i Kubernetes blevet etableret forskellige metoder og v\u00e6rkt\u00f8jer til udrulninger:<\/p>\n<ol>\n<li> <b>Baseret p\u00e5 Kubernetes\/Kustomizes indf\u00f8dte skabeloner<\/b>. Det er den nemmeste m\u00e5de at implementere applikationer i Kubernetes p\u00e5. Udvikleren opretter grundl\u00e6ggende YAML-filer og anvender dem. For at undg\u00e5 konstant oml\u00e6gning af de samme skabeloner blev Kustomize udviklet (det omdanner Kubernetes-skabeloner til moduler). <i><b>Bem. overs.<\/b>: Kustomize er blevet integreret i kubectl med <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/445196\/\">udgivelsen af Kubernetes 1.14<\/a><\/noindex>.<\/i><\/li>\n<li> <b>Helm Charts<\/b>. Helm-diagrammer giver mulighed for at oprette s\u00e6t af skabeloner, init-containere, sidecar'er osv., som anvendes til at deploye applikationer med mere fleksible konfigurationsmuligheder end i den skabelonbaserede tilgang. Grundlaget for denne metode er skabeloniserede YAML-filer. Helm udfylder dem med forskellige parametre og sender dem derefter til Tiller \u2014 den klyngens komponent, der implementerer dem i klyngen og muligg\u00f8r opdateringer og tilbagef\u00f8ringer. Det vigtige er, at Helm i bund og grund blot inds\u00e6tter de n\u00f8dvendige v\u00e6rdier i skabelonerne og anvender dem p\u00e5 samme m\u00e5de som i den traditionelle tilgang <i>(l\u00e6s mere om, hvordan det hele fungerer, og hvordan du kan bruge det, i vores <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/423239\/\">artikel om Helm<\/a><\/noindex> \u2014 red. anm.)<\/i>. Der findes et stort udvalg af f\u00e6rdige Helm-charts, der d\u00e6kker et bredt spektrum af opgaver.<\/li>\n<li> <b>Alternative v\u00e6rkt\u00f8jer<\/b>. Der er mange alternative v\u00e6rkt\u00f8jer. F\u00e6lles for dem alle er, at de omdanner nogle skabelonfiler til forst\u00e5elige Kubernetes YAML-filer og derefter anvender dem.<\/li>\n<\/ol>\n<p>\nI vores arbejde bruger vi konstant Helm-charts til vigtige v\u00e6rkt\u00f8jer (da meget allerede er klar, hvilket g\u00f8r livet betydeligt lettere) og \u00abrene\u00bb YAML-filer fra Kubernetes til implementering af vores egne applikationer.<\/p>\n<h2>Pull &amp; Push<\/h2>\n<p>\nI et af mine nylige blogindl\u00e6g pr\u00e6senterede jeg et v\u00e6rkt\u00f8j <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/weaveworks\/flux\">Weave Flux<\/a><\/noindex>, der tillader at commite skabeloner til Git-repositoriet og opdatere deployment efter hver commit eller push af containere. Min erfaring viser, at dette v\u00e6rkt\u00f8j er et af de vigtigste i fremme af pull-tilgangen, s\u00e5 jeg vil ofte referere til det. Hvis du vil vide mere om, hvordan man bruger det, her er <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@m.k.joerg\/gitops-weave-flux-in-detail-77ce36945646\">linket til artiklen<\/a><\/noindex>.<\/p>\n<p><i><b>NB!<\/b> Alle fordelene ved at bruge GitOps bevares for begge tilgange.<\/i><\/p>\n<h2>Pull-baseret tilgang<\/h2>\n<p>\n<img decoding=\"async\" alt=\"GitOps: sammenligning af Pull- og Push-metoder\" src=\"\/wp-content\/uploads\/4ed8e6de36bc37d0e747ff99027f8399.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI kernen af pull-tilgangen ligger det faktum, at alle \u00e6ndringer anvendes indefra klyngen. Inden i klyngen er der en operat\u00f8r, der regelm\u00e6ssigt tjekker de tilknyttede Git- og Docker Registry-repositorier. Hvis der sker \u00e6ndringer i dem, opdateres klyngets tilstand indefra. Det betragtes generelt som en sikker proces, da ingen ekstern klient har adgang til administratorrettigheder i klyngen.<\/p>\n<p><b>Fordele:<\/b><\/p>\n<ol>\n<li> Ingen ekstern klient har rettigheder til at foretage \u00e6ndringer i klyngen; alle opdateringer anvendes indefra.<\/li>\n<li> Nogle v\u00e6rkt\u00f8jer tillader ogs\u00e5 synkronisering af opdateringer af Helm-diagrammer og knytter dem til klyngen.<\/li>\n<li> Docker Registry kan scannes for nye versioner. Hvis der kommer et nyt billede, opdateres Git-repositoriet og deployment til den nye version.<\/li>\n<li> Pull-v\u00e6rkt\u00f8jer kan distribueres p\u00e5 forskellige navnerum med forskellige Git-repositories og adgangsrettigheder. Dette muligg\u00f8r en multitenant-model. For eksempel kan team A bruge navnerum A, team B navnerum B, mens teamet, der arbejder med infrastrukturen, kan bruge et globalt rum.<\/li>\n<li> Generelt er v\u00e6rkt\u00f8jerne meget letv\u00e6gts.<\/li>\n<li> I kombination med v\u00e6rkt\u00f8jer som operat\u00f8ren <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bitnami-labs\/sealed-secrets\">Bitnami Sealed Secrets<\/a><\/noindex>, kan hemmeligheder opbevares krypteret i Git-repositoriet og hentes inden i klyngen.<\/li>\n<li> Der er ingen forbindelse til CD-pipelines, da deployment finder sted inden i klyngen.<\/li>\n<\/ol>\n<p>\n<b>Ulemper<\/b>:<\/p>\n<ol>\n<li> At styre hemmeligheder fra deployment'er i Helm-diagrammer er mere komplekst end almindelige, da de f\u00f8rst skal genereres som, lad os sige, sealed secrets, derefter dekrypteres af en intern operator og f\u00f8rst derefter er de tilg\u00e6ngelige for pull-v\u00e6rkt\u00f8jet. Herefter kan en release i Helm startes med v\u00e6rdier i allerede deployerede hemmeligheder. Den nemmeste m\u00e5de er at oprette en hemmelighed med alle Helm-v\u00e6rdier, der bruges til deployment, dekryptere den og commite den til Git.<\/li>\n<li> Ved at anvende pull-tilgangen er du bundet til v\u00e6rkt\u00f8jer, der arbejder med pulls. Dette begr\u00e6nser muligheden for at tilpasse deployeringsprocessen i klyngen. For eksempel er arbejdet med Kustomize kompliceret, da det skal udf\u00f8res, f\u00f8r de endelige skabeloner n\u00e5r Git. Jeg siger ikke, at du ikke kan bruge separate v\u00e6rkt\u00f8jer, men de er sv\u00e6re at integrere i deployeringsprocessen.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Push-baseret tilgang<\/h2>\n<p>\n<img decoding=\"async\" alt=\"GitOps: sammenligning af Pull- og Push-metoder\" src=\"\/wp-content\/uploads\/533fc0bd107c3338d323e908ae9e75ab.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI push-tilgangen igangs\u00e6tter det eksterne system (prim\u00e6rt CD-pipelines) deployment i klyngen efter commit i Git-repositoriet eller i tilf\u00e6lde af, at den foreg\u00e5ende CI-pipeline er blevet udf\u00f8rt med succes. I denne tilgang har systemet adgang til klyngen.<\/p>\n<p><b>Fordele<\/b>:<\/p>\n<ol>\n<li> Sikkerheden defineres af Git-repositoriet og bygge-pipelinen.<\/li>\n<li> Det er lettere at deployere Helm-charter, da der er st\u00f8tte for Helm-plugins.<\/li>\n<li> Det er lettere at administrere hemmeligheder, da hemmeligheder kan anvendes i pipelines og ogs\u00e5 opbevares i Git i krypteret form (afh\u00e6ngigt af brugerens pr\u00e6ferencer).<\/li>\n<li> Der er ingen binding til et specifikt v\u00e6rkt\u00f8j, da man kan bruge enhver type.<\/li>\n<li> Opdateringer af container-versioner kan initieres af bygge-pipelinen.<\/li>\n<\/ol>\n<p>\n<b>Ulemper<\/b>:<\/p>\n<ol>\n<li> Dataene til adgang til klyngen er inde i byggesystemet.<\/li>\n<li> Opdatering af containere i deployment'er er stadig lettere at udf\u00f8re med pull-processen.<\/li>\n<li> Der er en st\u00e6rk afh\u00e6ngighed af CD-systemet, da de n\u00f8dvendige pipelines muligvis oprindeligt er skrevet til Gitlab Runners, og s\u00e5 beslutter teamet at skifte til Azure DevOps eller Jenkins... og skal migrere mange bygge-pipelines.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Sammenfatning: Push eller Pull?<\/h2>\n<p>\nSom vanligt er der fordele og ulemper ved hver tilgang. Nogle opgaver er lettere at udf\u00f8re med den ene, mens det er sv\u00e6rere med den anden. I starten udf\u00f8rte jeg deployment manuelt, men efter at jeg st\u00f8dte p\u00e5 nogle artikler om Weave Flux, besluttede jeg at implementere GitOps-processer for alle projekter. For de grundl\u00e6ggende skabeloner var det nemt, men senere begyndte jeg at st\u00f8de p\u00e5 udfordringer med Helm-diagrammer. P\u00e5 det tidspunkt tilb\u00f8d Weave Flux kun en tidlig version af Helm Chart Operator, men selv nu er nogle opgaver mere komplekse p\u00e5 grund af behovet for manuelt at oprette hemmeligheder og anvende dem. Man kan sige, at pull-tilgangen er meget mere sikker, da klyngetr\u00e6k-kontooplysningerne ikke er tilg\u00e6ngelige uden for det, hvilket \u00f8ger sikkerheden s\u00e5 meget, at det er v\u00e6rd at g\u00f8re en ekstra indsats.<\/p>\n<p>Efter lidt overvejelse kom jeg til den overraskende konklusion, at det ikke er tilf\u00e6ldet. N\u00e5r det kommer til komponenter, der kr\u00e6ver maksimal beskyttelse, vil s\u00e5dan en liste inkludere hemmelighedslager og CI\/CD-systemer, Git-repositorier. Informationen inden i dem er meget s\u00e5rbar og har brug for maksimal beskyttelse. Desuden, hvis nogen f\u00e5r adgang til dit Git-repositorie og kan pushe kode der, s\u00e5 kan de deploye hvad de \u00f8nsker (uanset om det er pull eller push-tilgangen), og infiltrere klyngens systemer. S\u00e5ledes er de mest kritiske komponenter, der kr\u00e6ver beskyttelse, Git-repositoriet og CI\/CD-systemerne, ikke klynge legitimationsoplysninger. Hvis du har godt konfigurerede politikker og sikkerhedsforanstaltninger for denne type systemer, og klynge legitimationsoplysninger kun tr\u00e6kkes ind i pipelines som hemmeligheder, s\u00e5 kan den ekstra sikkerhed ved pull-tilgangen vise sig at v\u00e6re mindre v\u00e6rdifuld end f\u00f8rst antaget.<\/p>\n<p>S\u00e5 hvis pull-tilgangen er mere besv\u00e6rlig og ikke giver sikkerhedsfordele, er det s\u00e5 ikke logisk kun at bruge push-tilgangen? Men nogen kunne m\u00e5ske h\u00e6vde, at i push-tilgangen er du for afh\u00e6ngig af CD-systemet, og det kan v\u00e6re bedre at undg\u00e5 det for at g\u00f8re fremtidige migreringer lettere.<\/p>\n<p>Efter min mening (som altid) b\u00f8r man anvende det, der bedst passer til den konkrete situation eller kombinere dem. Personligt bruger jeg begge tilgange: Weave Flux til deployment baseret p\u00e5 pull, som prim\u00e6rt inkluderer vores egne tjenester, og push-tilgangen med Helm og plugins, der forenkler implementeringen af Helm-diagrammer til klyngen og g\u00f8r det muligt at oprette hemmeligheder uden problemer. Jeg tror aldrig, der vil v\u00e6re \u00e9n l\u00f8sning, der passer til alle tilf\u00e6lde, da der altid er mange nuancer, og de afh\u00e6nger af den specifikke anvendelse. Jeg anbefaler st\u00e6rkt GitOps - det g\u00f8r livet meget lettere og forbedrer sikkerheden.<\/p>\n<p>Jeg h\u00e5ber, at min erfaring med emnet kan hj\u00e6lpe med at bestemme, hvilken metode der passer bedst til din type deployment, og jeg vil v\u00e6re glad for at h\u00f8re din mening.<\/p>\n<h2>P.S. Notat fra overs\u00e6tteren<\/h2>\n<p>\nUlempen ved pull-modellen er, at det er sv\u00e6rt at l\u00e6gge de rendere manifeste i Git, men der er ikke nogen ulempe ved, at CD-pipelinen i pull-modellen lever separat fra udrulningen og i virkeligheden bliver en pipeline af kategorien <i>Continuous Apply<\/i>. Derfor vil der kr\u00e6ves endnu mere indsats for at indsamle statussen fra alle deployment og give adgang til logs\/status, helst med tilknytning til CD-systemet.<\/p>\n<p>I denne forstand giver push-modellen nogle garantier for udrulning, fordi levetiden for pipelinen kan g\u00f8res lig med levetiden for udrulningen.<\/p>\n<p>Vi har afpr\u00f8vet begge modeller og er n\u00e5et til de samme konklusioner som forfatteren af artiklen:<\/p>\n<ol>\n<li> Pull-modellen passer os til at organisere opdateringer af systemkomponenter p\u00e5 et stort antal klynger (se <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/455543\/\">artiklen om addon-operator<\/a><\/noindex>).<\/li>\n<li> Push-modellen baseret p\u00e5 GitLab CI er velegnet til udrulning af applikationer ved hj\u00e6lp af Helm-diagrammer. Udrulningen af deployment i pipeline overv\u00e5ges med v\u00e6rkt\u00f8jet <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">werf<\/a><\/noindex>. For at sige det s\u00e5dan, s\u00e5 h\u00f8rte vi konstant om \"GitOps\" i konteksten af dette projekt, n\u00e5r vi diskuterede de presserende problemer for DevOps-ingeni\u00f8rer ved vores stand p\u00e5 KubeCon Europe '19.<\/li>\n<\/ol>\n<p><\/p>\n<h2>P.P.S. fra overs\u00e6tteren<\/h2>\n<p>\nL\u00e6s ogs\u00e5 p\u00e5 vores blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/441964\/\">Kubernetes tips &amp; tricks: overs\u00e6ttelse af fungerende ressourcer i klyngen til styring af Helm 2<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/434160\/\">Vi pr\u00e6senterer kubedog-biblioteket til overv\u00e5gning af Kubernetes-ressourcer<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/449096\/\">Udvikler Kubernetes (oversigt og videopr\u00e6sentation)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436910\/\">Tips til at oprette tilpassede arbejdsprocesser i GitLab CI<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p class=\"for_users_only_msg\">Kun registrerede brugere kan deltage i unders\u00f8gelsen. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Log ind<\/a><\/noindex>, please.<\/p>\n<h2 class=\"default-block__polling-title\">Bruger 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-tilgang<\/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, noget andet<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Nej<\/p>\n<\/li>\n<\/ul>\n<p>    30 brugere har stemt. 10 brugere har afholdt sig fra at stemme.<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.3 - 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\/da\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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 af Pull- og Push-metoder | ProHoster","description":"Bem.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/35594","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=35594"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/35594\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=35594"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=35594"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=35594"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}