{"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\/nl\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push","title":{"rendered":"GitOps: vergelijking van Pull- en Push-methoden","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Opmerking vertaler.<\/b>: In de Kubernetes-gemeenschap wint een trend genaamd GitOps duidelijk aan populariteit, iets wat wij persoonlijk hebben ervaren, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/454184\/\">door<\/a><\/noindex> KubeCon Europe 2019 bij te wonen. Deze term is relatief recentelijk <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-operations-by-pull-request\">uitgevonden<\/a><\/noindex> door de CEO van Weaveworks \u2014 Alexis Richardson \u2014 en betekent het gebruik van vertrouwde tools voor ontwikkelaars (vooral Git, waar de naam ook vandaan komt) voor operationele taken. Met name gaat het om het beheren van Kubernetes door zijn configuraties in Git op te slaan en automatische uitrol van wijzigingen naar de cluster te realiseren. Over twee benaderingen van deze uitrol vertelt Matthias Jg in dit artikel.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"GitOps: vergelijking van Pull- en Push-methoden\" src=\"\/wp-content\/uploads\/2862627cedb4347679d0c14876a24869.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVorig jaar <i>(eigenlijk gebeurde dit formeel in augustus 2017 \u2014 opmerking van de vertaler)<\/i> Er is een nieuwe aanpak voor het implementeren van applicaties in Kubernetes. Het wordt GitOps genoemd en de basisgedachte is dat versiebeheer van deployments plaatsvindt in een veilige omgeving van een Git-repository.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><b>De belangrijkste voordelen van deze aanpak zijn als volgt<\/b>:<\/p>\n<ol>\n<li> <b>Versiebeheer van deployments en wijzigingshistorie<\/b>. De staat van de hele cluster wordt opgeslagen in de Git-repository, en deployments worden alleen bijgewerkt door middel van commits. Bovendien kunnen alle wijzigingen worden bijgehouden met de commitgeschiedenis.<\/li>\n<li> <b>Rollback met behulp van vertrouwde Git-commando's<\/b>. Een eenvoudige <code>git reset<\/code> maakt het mogelijk om wijzigingen in deployments terug te draaien; vorige toestanden zijn altijd beschikbaar.<\/li>\n<li> <b>Klaar toegangsbeheer<\/b>. Gewoonlijk bevat een Git-systeem veel vertrouwelijke gegevens, daarom besteden de meeste bedrijven bijzondere aandacht aan de beveiliging ervan. Deze beveiliging is ook van toepassing op de operaties met deployments.<\/li>\n<li> <b>Beleid voor deployments<\/b>. De meeste Git-systemen ondersteunen van nature beleidsregels voor verschillende takken \u2014 bijvoorbeeld, alleen pull-requests mogen de master bijwerken, en wijzigingen moeten gecontroleerd en goedgekeurd worden door een ander teamlid. Net als bij toegangscontrole worden dezelfde beleidsregels toegepast op het bijwerken van deployments.<\/li>\n<\/ol>\n<p>\nZoals je ziet, heeft de GitOps-methode veel voordelen. Het afgelopen jaar zijn twee benaderingen bijzonder populair geworden. De ene is gebaseerd op push, de andere op pull. Voordat we deze bekijken, laten we eerst eens kijken naar hoe typische Kubernetes deployments eruitzien.<\/p>\n<h2>Deploymentmethoden<\/h2>\n<p>\nIn de afgelopen jaren zijn er verschillende manieren en tools voor deployments in Kubernetes ontstaan:<\/p>\n<ol>\n<li> <b>Gebaseerd op de native sjablonen van Kubernetes\/Kustomize<\/b>Dit is de eenvoudigste manier om applicaties in Kubernetes te implementeren. De ontwikkelaar maakt basis YAML-bestanden en past deze toe. Om het constante herschrijven van dezelfde sjablonen te vermijden, is Kustomize ontwikkeld (dit verandert Kubernetes-sjablonen in modules). <i><b>Opmerking vertaler.<\/b>: Kustomize is ge\u00efntegreerd in kubectl met <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/445196\/\">de release van Kubernetes 1.14.<\/a><\/noindex>.<\/i><\/li>\n<li> <b>Helm Charts<\/b>. Helm-charts maken het mogelijk om sets van sjablonen, init-containers, sidecars, enz. te cre\u00ebren, die worden gebruikt voor het deployen van applicaties met meer flexibele configuratiemogelijkheden dan bij de sjabloon-gebaseerde aanpak. De basis van deze methode zijn gemoduleerde YAML-bestanden. Helm vulde ze met verschillende parameters en stuurt ze vervolgens naar Tiller \u2014 het clustercomponent dat deze in de cluster implementeert en updates en terugdraaiingen mogelijk maakt. Belangrijk is dat Helm in wezen gewoon de juiste waarden in de sjablonen plaatst en deze vervolgens toepast zoals dat gebeurt in de traditionele benadering <i>(voor meer informatie over hoe dit allemaal werkt en hoe je het kunt gebruiken, lees onze <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/423239\/\">Helm-artikel<\/a><\/noindex> \u2013 opmerking vert.)<\/i>. Er is een grote verscheidenheid aan kant-en-klare Helm-charts die een breed scala aan taken dekken.<\/li>\n<li> <b>Alternatieve tools<\/b>. Er zijn tal van alternatieve tools. Wat hen verbindt, is dat ze bepaalde sjabloonbestanden omzetten in begrijpelijke Kubernetes YAML-bestanden en deze vervolgens toepassen.<\/li>\n<\/ol>\n<p>\nIn ons werk gebruiken we voortdurend Helm-charts voor belangrijke tools (omdat veel al vooraf is voorbereid, wat het leven aanzienlijk vergemakkelijkt) en 'schone' Kubernetes YAML-bestanden voor het implementeren van onze eigen applicaties.<\/p>\n<h2>Pull &amp; Push<\/h2>\n<p>\nIn een van mijn recente blogberichten heb ik een tool ge\u00efntroduceerd <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/weaveworks\/flux\">Weave Flux<\/a><\/noindex>, waarmee sjablonen in de Git-repository kunnen worden gecommit en de deployment kan worden bijgewerkt na elke commit of push van de container. Mijn ervaring laat zien dat dit hulpmiddel een van de belangrijkste is voor het bevorderen van de pull-aanpak, dus ik zal er vaak naar verwijzen. Als je meer wilt weten over hoe je het kunt gebruiken, hier is <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@m.k.joerg\/gitops-weave-flux-in-detail-77ce36945646\">de link naar het artikel<\/a><\/noindex>.<\/p>\n<p><i><b>NB!<\/b> Alle voordelen van het gebruik van GitOps blijven behouden voor beide benaderingen.<\/i><\/p>\n<h2>Pull-gebaseerde aanpak<\/h2>\n<p>\n<img decoding=\"async\" alt=\"GitOps: vergelijking van Pull- en Push-methoden\" src=\"\/wp-content\/uploads\/4ed8e6de36bc37d0e747ff99027f8399.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe pull-benadering is gebaseerd op het feit dat alle wijzigingen van binnenuit het cluster worden toegepast. Binnen het cluster is er een operator die regelmatig de gekoppelde Git- en Docker Registry-repositories controleert. Als er wijzigingen zijn, wordt de status van het cluster van binnenuit bijgewerkt. Deze methode wordt doorgaans als veilig beschouwd, aangezien geen enkele externe klant toegang heeft tot de beheerdersrechten van het cluster.<\/p>\n<p><b>Voordelen:<\/b><\/p>\n<ol>\n<li> Geen enkele externe klant heeft de rechten om wijzigingen in het cluster aan te brengen; alle updates worden vanuit het cluster doorgevoerd.<\/li>\n<li> Sommige tools maken het ook mogelijk om updates van Helm-charts te synchroniseren en deze aan het cluster te koppelen.<\/li>\n<li> Docker Registry kan worden gescand op nieuwe versies. Wanneer er een nieuw beeld verschijnt, worden de Git-repository en de deployment bijgewerkt naar de nieuwe versie.<\/li>\n<li> Pull-tools kunnen over verschillende namespaces worden verdeeld met verschillende Git-repositories en toegangsrechten. Dit maakt het mogelijk om een multitenant-model toe te passen. Bijvoorbeeld, team A kan namespace A gebruiken, team B namespace B, en het team dat verantwoordelijk is voor de infrastructuur kan de globale namespace gebruiken.<\/li>\n<li> Over het algemeen zijn tools tamelijk lichtgewicht.<\/li>\n<li> In combinatie met tools zoals de operator <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bitnami-labs\/sealed-secrets\">Bitnami Sealed Secrets<\/a><\/noindex>, kunnen geheimen in versleutelde vorm in de Git-repository worden opgeslagen en binnen het cluster worden opgehaald.<\/li>\n<li> Er is geen verbinding met CD-pijplijnen, aangezien deployments binnen het cluster plaatsvinden.<\/li>\n<\/ol>\n<p>\n<b>Nadelen<\/b>:<\/p>\n<ol>\n<li> Het beheren van secrets voor deployments vanuit Helm-charts is ingewikkelder dan bij reguliere secrets, omdat je ze eerst moet genereren als bijvoorbeeld sealed secrets, vervolgens decoderen met een interne operator en pas daarna worden ze beschikbaar voor het pull-instrument. Daarna kan je een release in Helm starten met de waarden die al in de uitgerolde secrets zijn. De eenvoudigste manier is om een secret te maken met alle Helm-waarden die voor de deployment worden gebruikt, deze te decoderen en in Git te commiten.<\/li>\n<li> Door een pull-aanpak te gebruiken, ben je gebonden aan tools die met pulls werken. Dit beperkt de mogelijkheid om het deployment-proces in het cluster aan te passen. Bijvoorbeeld, werken met Kustomize wordt moeilijker omdat het uitgevoerd moet worden voordat de uiteindelijke templates in Git komen. Ik zeg niet dat je geen aparte tools kunt gebruiken, maar het is moeilijker om ze in het deployment-proces te integreren.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Push-gebaseerde aanpak<\/h2>\n<p>\n<img decoding=\"async\" alt=\"GitOps: vergelijking van Pull- en Push-methoden\" src=\"\/wp-content\/uploads\/533fc0bd107c3338d323e908ae9e75ab.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBij de push-aanpak start een extern systeem (voornamelijk CD-pijplijnen) de deployments in het cluster na een commit in de Git-repository of na een succesvolle uitvoering van de vorige CI-pijplijn. In deze aanpak heeft het systeem toegang tot het cluster.<\/p>\n<p><b>Voordelen<\/b>:<\/p>\n<ol>\n<li> Beveiliging wordt bepaald door de Git-repository en de build-pijplijn.<\/li>\n<li> Het is eenvoudiger om Helm-charts te deployen, er is ondersteuning voor Helm-plugins.<\/li>\n<li> Het beheren van geheimen is gemakkelijker, omdat geheimen in pijplijnen kunnen worden toegepast en ook in Git versleuteld kunnen worden opgeslagen (afhankelijk van de voorkeur van de gebruiker).<\/li>\n<li> Geen binding aan een specifieke tool, omdat elk type kan worden gebruikt.<\/li>\n<li> Versie-updates van containers kunnen worden ge\u00efnitieerd door de build-pijplijn.<\/li>\n<\/ol>\n<p>\n<b>Nadelen<\/b>:<\/p>\n<ol>\n<li> Gegevens voor toegang tot het cluster bevinden zich binnen het build-systeem.<\/li>\n<li> Het bijwerken van container deployments is nog steeds eenvoudiger met een pull-proces.<\/li>\n<li> Sterke afhankelijkheid van het CD-systeem, aangezien de benodigde pijplijnen mogelijk aanvankelijk zijn geschreven voor GitLab Runners, en het team besluit misschien over te schakelen naar Azure DevOps of Jenkins\u2026 en er moet een migratie van een groot aantal build-pijplijnen plaatsvinden.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Conclusie: Push of Pull?<\/h2>\n<p>\nZoals gewoonlijk heeft elke benadering zijn eigen voor- en nadelen. Sommige taken zijn gemakkelijker uit te voeren met de ene methode en moeilijker met de andere. In het begin maakte ik deployments handmatig, maar nadat ik verschillende artikelen over Weave Flux had gelezen, besloot ik GitOps-processen voor alle projecten in te voeren. Voor de basis sjablonen bleek dit eenvoudig te zijn, maar daarna kwam ik moeilijkheden tegen bij het werken met Helm charts. In die tijd bood Weave Flux alleen een vroege versie van de Helm Chart Operator aan, maar zelfs nu zijn sommige taken moeilijker door de noodzaak om handmatig geheimen te cre\u00ebren en die toe te passen. Je zou kunnen zeggen dat de pull-benadering veel veiliger is, aangezien de clusterreferenties niet buiten het cluster toegankelijk zijn, en dat verhoogt de veiligheid zo veel dat het de extra moeite waard is.<\/p>\n<p>Na er even over nagedacht te hebben, kwam ik tot de onverwachte conclusie dat dit niet het geval is. Als we het hebben over componenten die maximale bescherming vereisen, omvat deze lijst secret repositories en CI\/CD-systemen, Git-repositories. De informatie daarin is behoorlijk kwetsbaar en heeft maximale bescherming nodig. Bovendien, als iemand je Git-repository binnendringt en in staat is om daar code te pushen, kan hij alles uitrollen wat hij wil (ongeacht de gekozen aanpak, hetzij pull of push) en binnenkomen in de cluster systemen. Daarmee zijn de belangrijkste componenten die bescherming vereisen de Git-repository en CI\/CD-systemen, niet de cluster credentials. Als je goede beveiligingsbeleid en -maatregelen hebt ingesteld voor systemen van dit type, en de cluster credentials alleen als secrets in de pipelines worden gehaald, kan de extra beveiliging van de pull-aanpak minder waardevol blijken te zijn dan oorspronkelijk gedacht.<\/p>\n<p>Dus, als de pull-benadering arbeidsintensiever is en geen beveiligingsvoordeel biedt, is het dan niet logisch om alleen de push-benadering te gebruiken? Maar iemand zou kunnen beweren dat je bij de push-benadering te afhankelijk bent van het CD-systeem en dat het misschien beter is om dat niet te doen, zodat het in de toekomst gemakkelijker is om migraties uit te voeren.<\/p>\n<p>Naar mijn mening (zoals altijd) moet je gebruiken wat het beste past bij de specifieke situatie of combineren. Persoonlijk gebruik ik beide benaderingen: Weave Flux voor deployments op basis van pull, die meestal onze eigen services omvatten, en de push-benadering met Helm en plugins, die het toepassen van Helm-templates op de cluster vereenvoudigt en het cre\u00ebren van geheimen probleemloos laat verlopen. Ik denk niet dat er ooit \u00e9\u00e9n oplossing zal zijn die voor alle gevallen geschikt is, omdat er altijd veel nuances zijn die afhankelijk zijn van de specifieke toepassing. Desondanks raad ik GitOps ten zeerste aan \u2014 het vergemakkelijkt het leven enorm en verhoogt de veiligheid.<\/p>\n<p>Ik hoop dat mijn ervaring op dit gebied helpt bij het bepalen welke methode het beste past bij jouw type deployments, en ik zou graag jouw mening horen.<\/p>\n<h2>P.S. Opmerking van de vertaler<\/h2>\n<p>\nEen nadeel van het pull-model is dat het moeilijk is om gerenderde manifesten in Git op te slaan, maar er is geen nadeel dat de CD-pipeline in het pull-model apart van de rollout leeft en in wezen een pipeline van de categorie <i>Continuous Apply<\/i>. Daarom zijn er nog meer inspanningen nodig om de status van alle deployments te verzamelen en op een of andere manier toegang te geven tot de logs\/status, het liefst gekoppeld aan het CD-systeem.<\/p>\n<p>In dit opzicht biedt het push-model enige garanties voor de uitrol, omdat de levensduur van de pipeline gelijk kan worden gemaakt aan de levensduur van de uitrol.<\/p>\n<p>We hebben beide modellen uitgeprobeerd en kwamen tot dezelfde conclusies als de auteur van het artikel:<\/p>\n<ol>\n<li> Het pull-model is geschikt voor het organiseren van updates van systeemcomponenten op een groot aantal clusters (zie <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/455543\/\">het artikel over addon-operator<\/a><\/noindex>).<\/li>\n<li> Het push-model op basis van GitLab CI is goed geschikt voor het uitrollen van applicaties met behulp van Helm-templates. Bij dit alles wordt de uitrol van deployments binnen de pipelines gevolgd met behulp van de tool <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">werf<\/a><\/noindex>. Trouwens, in de context van dit project hoorden we voortdurend 'GitOps' toen we de dringende problemen van DevOps-engineers bespraken bij onze stand op KubeCon Europe '19.<\/li>\n<\/ol>\n<p><\/p>\n<h2>P.P.S. van de vertaler<\/h2>\n<p>\nLees ook op onze blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/441964\/\">Kubernetes tips &amp; tricks: vertaling van werkende resources in een cluster onder beheer van Helm 2<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/434160\/\">Wij presenteren de kubedog-bibliotheek voor het volgen van Kubernetes-resources<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/449096\/\">We breiden Kubernetes uit en vullen het aan (overzicht en video van de presentatie)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436910\/\">Tips voor het cre\u00ebren van op maat gemaakte workflows in GitLab CI<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p class=\"for_users_only_msg\">Alleen geregistreerde gebruikers kunnen deelnemen aan de enqu\u00eate. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Log in<\/a><\/noindex>, alstublieft.<\/p>\n<h2 class=\"default-block__polling-title\">Gebruik jij GitOps?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ja, de pull-aanpak<\/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, iets anders<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    No<\/p>\n<\/li>\n<\/ul>\n<p>    30 gebruikers hebben gestemd. 10 gebruikers hebben zich onthouden.<br \/>\n<br \/>Bron: <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\/nl\/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=\"nl_NL\" \/>\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\/nl\/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: vergelijking van Pull- en Push-methoden | ProHoster","description":"Opmerking.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/35594","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=35594"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/35594\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=35594"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=35594"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=35594"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}