{"id":35941,"date":"2019-10-31T22:07:41","date_gmt":"2019-10-31T19:07:41","guid":{"rendered":"https:\/\/prohoster.info\/blog\/chto-zhe-takoe-gitops\/"},"modified":"2019-10-31T22:07:41","modified_gmt":"2019-10-31T19:07:41","slug":"chto-zhe-takoe-gitops","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/chto-zhe-takoe-gitops","title":{"rendered":"Was ist GitOps?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Hinweis.<\/b>: Nach der k\u00fcrzlichen Ver\u00f6ffentlichung <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/456754\/\">von Materialien<\/a><\/noindex> \u00fcber die Pull- und Push-Methoden in GitOps haben wir ein reges Interesse an diesem Modell insgesamt festgestellt. Allerdings gibt es nur sehr wenige russischsprachige Publikationen zu diesem Thema (auf Habr gibt es praktisch keine). Daher freuen wir uns, Ihnen die \u00dcbersetzung eines anderen Artikels anzubieten \u2013 auch wenn dieser bereits fast ein Jahr alt ist! \u2013 von Weaveworks, dessen Gr\u00fcnder den Begriff \u201eGitOps\u201c gepr\u00e4gt hat. Der Text erl\u00e4utert das Konzept und die wesentlichen Unterschiede zu bestehenden Ans\u00e4tzen.<\/i><\/p>\n<p>\nVor einem Jahr haben wir <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-operations-by-pull-request\">eine Einf\u00fchrung in GitOps ver\u00f6ffentlicht<\/a><\/noindex>. Damals haben wir berichtet, wie das Team von Weaveworks ein auf Kubernetes basierendes SaaS gestartet hat und einen Satz empfohlener Best Practices f\u00fcr Bereitstellung, Verwaltung und \u00dcberwachung in Cloud-Native-Umgebungen entwickelt hat.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Der Artikel war sehr beliebt. Andere begannen, \u00fcber GitOps zu sprechen, und ver\u00f6ffentlichten neue Werkzeuge f\u00fcr <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/hasura\/gitkube\">git push<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/dzone.com\/articles\/weaveworks-gitops-developer-toolkit-part-one-skaff\">Entwicklung<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/storing-secure-sealed-secrets-using-gitops\">Secrets<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.alexellis.io\/introducing-openfaas-cloud\/\">Funktionen<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/jenkins.io\/blog\/2018\/03\/19\/introducing-jenkins-x\/\">der kontinuierlichen Integration<\/a><\/noindex> usw. Auf unserer Website erschienen <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/category\/gitops\/\">viele<\/a><\/noindex> Ver\u00f6ffentlichungen und Anwendungsbeispiele f\u00fcr GitOps. Doch es blieben einige Fragen offen. Wie unterscheidet sich das Modell von traditionellem <noindex><a rel=\"nofollow\" href=\"https:\/\/puppet.com\/blog\/a-deployment-pipeline-for-infrastructure-a-devops-case-study-at-nbn\">Infrastructure as Code<\/a><\/noindex> und Continuous Delivery (<noindex><a rel=\"nofollow\" href=\"https:\/\/puppet.com\/blog\/a-deployment-pipeline-for-infrastructure-a-devops-case-study-at-nbn\">Continuous Delivery<\/a><\/noindex>Ist der Einsatz von Kubernetes zwingend erforderlich?<\/p>\n<p>Bald wurde uns klar, dass eine neue Beschreibung notwendig war, die Folgendes bietet:<\/p>\n<ol>\n<li> Eine Vielzahl von Beispielen und Geschichten;<\/li>\n<li> Eine klare Definition von GitOps;<\/li>\n<li> Einen Vergleich mit traditioneller Continuous Delivery.<\/li>\n<\/ol>\n<p>\nIn diesem Artikel haben wir versucht, all diese Themen zu behandeln. Sie finden hier eine aktualisierte Einf\u00fchrung in GitOps sowie einen Blick aus der Perspektive von Entwicklern und CI\/CD. Wir konzentrieren uns haupts\u00e4chlich auf Kubernetes, obwohl das Modell durchaus verallgemeinert werden kann.<\/p>\n<h2>Lernen Sie GitOps kennen:<\/h2>\n<p>\nStellen Sie sich Alice vor. Sie leitet die Firma Family Insurance, die Versicherungen f\u00fcr Gesundheit, Autos, Immobilien und Reisen f\u00fcr Menschen anbietet, die zu besch\u00e4ftigt sind, um die Feinheiten der Vertr\u00e4ge selbst zu verstehen. Ihr Unternehmen begann als Nebenprojekt, w\u00e4hrend Alice als Data Scientist in einer Bank arbeitete. Eines Tages erkannte sie, dass sie fortschrittliche Computeralgorithmen nutzen kann, um Daten effizienter zu analysieren und Versicherungspakete zu schn\u00fcren. Investoren finanzierten das Projekt und nun bringt ihr Unternehmen \u00fcber 20 Millionen Dollar j\u00e4hrlich ein und w\u00e4chst rasant. Momentan besch\u00e4ftigt es 180 Personen in verschiedenen Positionen. Dazu geh\u00f6rt ein Technikteam, das f\u00fcr die Entwicklung, Wartung der Website, Datenbanken und die Analyse der Kundenbasis zust\u00e4ndig ist. Das 60-k\u00f6pfige Team wird von Bob geleitet, dem technischen Direktor des Unternehmens.<\/p>\n<p>Bobs Team setzt Produktionssysteme in der Cloud ein. Ihre Hauptanwendungen laufen auf GKE und nutzen die Vorteile von Kubernetes in Google Cloud. Dar\u00fcber hinaus verwenden sie verschiedene Tools f\u00fcr Datenmanagement und Analytik.<\/p>\n<p>Die Family Insurance hatte urspr\u00fcnglich nicht vor, Container zu nutzen, aber die Begeisterung f\u00fcr Docker war ansteckend. Bald entdeckten die Fachleute des Unternehmens, dass GKE es erm\u00f6glicht, Cluster f\u00fcr die einfache und unkomplizierte Bereitstellung neuer Funktionen zu erstellen. Jenkins wurde f\u00fcr CI hinzugef\u00fcgt und Quay zur Organisation des Container-Registers, und es wurden Skripte f\u00fcr Jenkins geschrieben, die neue Container und Konfigurationen in GKE pushen.<\/p>\n<p>Einige Zeit ist vergangen. Alice und Bob waren frustriert \u00fcber die Leistung des gew\u00e4hlten Ansatzes und dessen Auswirkungen auf das Gesch\u00e4ft. Die Einf\u00fchrung von Containern hatte die Leistung nicht so gesteigert, wie das Team es sich erhofft hatte. Manchmal schlugen Deployments fehl, und es war unklar, ob die \u00c4nderungen im Code daf\u00fcr verantwortlich waren. Au\u00dferdem war es schwierig, die \u00c4nderungen in den Konfigurationen nachzuvollziehen. Oft musste ein neuer Cluster erstellt und die Anwendungen dorthin verschoben werden, weil es der einfachste Weg war, das Chaos zu beseitigen, in das das System geraten war. Alice machte sich Sorgen, dass sich die Situation mit der Weiterentwicklung der Anwendung verschlimmern w\u00fcrde (au\u00dferdem stand ein neues Projekt auf der Basis von maschinellem Lernen an). Bob hatte die meisten Arbeiten automatisiert, verstand jedoch nicht, warum die Pipeline weiterhin instabil war, schlecht skalierte und gelegentlich manuelles Eingreifen erforderte.<\/p>\n<p><b>Dann erfuhren sie von GitOps. Diese L\u00f6sung stellte sich als genau das heraus, was sie f\u00fcr einen sicheren Fortschritt ben\u00f6tigten.<\/b><\/p>\n<p>Alice und Bob haben seit vielen Jahren von Prozessen auf Basis von Git, DevOps und Infrastructure as Code geh\u00f6rt. Das Besondere an GitOps ist, dass es eine Reihe bew\u00e4hrter Praktiken \u2014 sowohl verbindlicher als auch normativer \u2014 f\u00fcr die Umsetzung dieser Ideen im Kontext von Kubernetes einf\u00fchrt. Dies ist ein Thema, <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/search?q=gitops&amp;src=typd\">das immer wieder angesprochen wurde<\/a><\/noindex>, auch in <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-high-velocity-cicd-for-kubernetes\">dem Weaveworks-Blog<\/a><\/noindex>.<\/p>\n<p>Family Insurance hat beschlossen, GitOps einzuf\u00fchren. Das Unternehmen verf\u00fcgt nun \u00fcber ein automatisiertes Betriebsmodell, das mit Kubernetes kompatibel ist und <i>Geschwindigkeit<\/i> , f\u00fcr <i>mit Stabilit\u00e4t<\/i>, da sie:<\/p>\n<ul>\n<li> festgestellt haben, dass die Produktivit\u00e4t des Teams sich verdoppelt hat, ohne dass dabei Stress entsteht;<\/li>\n<li> sie aufgeh\u00f6rt haben, Skripte zu verwalten. Stattdessen k\u00f6nnen sie sich jetzt auf neue Funktionen konzentrieren und die Ingenieurmethoden verbessern \u2014 zum Beispiel durch die Einf\u00fchrung von Canary-Releases und die Optimierung von Tests;<\/li>\n<li> sie den Bereitstellungsprozess verbessert haben \u2014 dieser bricht nun selten zusammen;<\/li>\n<li> Wir haben die M\u00f6glichkeit erhalten, Deployments nach teilweisen Ausf\u00e4llen ohne manuelles Eingreifen wiederherzustellen;<\/li>\n<li> sie gr\u00f6\u00dfere Sicherheit in den Lieferketten gewonnen haben. Alice und Bob haben festgestellt, dass sie das Team in Gruppen aufteilen k\u00f6nnen, die parallel an Mikrodiensten arbeiten;<i>gr\u00f6\u00dften<\/i>gr\u00f6\u00dferen Vertrauen in die Bereitstellungssysteme. Alice und Bob haben festgestellt, dass das Team in Gruppen aufgeteilt werden kann, die sich mit Mikrodiensten befassen und parallel arbeiten.<\/li>\n<li> k\u00f6nnen t\u00e4glich 30-50 \u00c4nderungen am Projekt durch jede Gruppe vornehmen und neue Techniken ausprobieren;<\/li>\n<li> Neue Entwickler k\u00f6nnen leicht auf das Projekt einsteigen und innerhalb weniger Stunden Updates auf der Produktionsumgebung \u00fcber Pull Requests einspielen;<\/li>\n<li> \u00fcberstehen problemlos eine SOC2-Pr\u00fcfung <i>(in Bezug auf die Einhaltung von Sicherheitsanforderungen f\u00fcr Datenmanagement durch Dienstleister; mehr dazu lesen Sie beispielsweise <noindex><a rel=\"nofollow\" href=\"https:\/\/www.imperva.com\/learn\/data-security\/soc-2-compliance\/\">hier<\/a><\/noindex> \u2014 Anmerkung des \u00dcbersetzers).<\/i>.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Was ist passiert?<\/h3>\n<p>\nGitOps \u2014 das sind zwei Dinge:<\/p>\n<ol>\n<li> Ein Betriebsmodell f\u00fcr Kubernetes und Cloud-native Anwendungen. Es bietet eine Sammlung bew\u00e4hrter Verfahren f\u00fcr die Bereitstellung, Verwaltung und \u00dcberwachung von in Containern bereitgestellten Clustern und Anwendungen. Eine elegante Definition in Form von <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/vitorsilva\/status\/999978906903080961\">einer Folie<\/a><\/noindex> ab <noindex><a rel=\"nofollow\" href=\"https:\/\/2018.agilept.org\/speaker_luis_faceira.html\">Luis Faceira<\/a><\/noindex>:\n<\/li>\n<li> Der Weg zur Schaffung einer entwicklerorientierten Umgebung f\u00fcr das Management von Anwendungen. Wir wenden den Git-Workflow sowohl auf den Betrieb als auch auf die Entwicklung an. Beachten Sie, dass es hier nicht nur um Git Push geht, sondern um die Organisation des gesamten Toolsatzes f\u00fcr CI\/CD und UI\/UX.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Ein paar Worte zu Git<\/h3>\n<p>\nWenn Sie mit Versionskontrollsystemen und einem Git-basierten Workflow nicht vertraut sind, empfehlen wir Ihnen dringend, sich damit auseinanderzusetzen. Zun\u00e4chst kann die Arbeit mit Branches und Pull-Requests wie schwarze Magie erscheinen, aber die Vorteile sind den Aufwand wert. Hier ist, <noindex><a rel=\"nofollow\" href=\"https:\/\/codeburst.io\/trunk-based-development-vs-git-flow-a0212a6cae64\">ein guter Artikel<\/a><\/noindex> zum Einstieg.<\/p>\n<h2>Wie funktioniert Kubernetes?<\/h2>\n<p>\nIn unserer Geschichte wandten sich Alice und Bob GitOps zu, nachdem sie eine Zeit lang mit Kubernetes gearbeitet hatten. Tats\u00e4chlich ist GitOps eng mit Kubernetes verbunden \u2013 es ist ein Betriebsmodell f\u00fcr Infrastrukturen und Anwendungen, die auf Kubernetes basieren.<\/p>\n<h3>Was bietet Kubernetes den Nutzern?<\/h3>\n<p>\nHier sind einige der Hauptfunktionen:<\/p>\n<ol>\n<li> In der Kubernetes-Modell k\u00f6nnen alle Ressourcen in deklarativer Form beschrieben werden.<\/li>\n<li> Der Kubernetes-API-Server akzeptiert diese Deklarationen als Eingabe und versucht kontinuierlich, den Cluster in den in der Deklaration beschriebenen Zustand zu versetzen.<\/li>\n<li> Die Deklarationen sind ausreichend, um eine Vielzahl von Arbeitslasten \u2013 'Anwendungen' \u2013 zu beschreiben und zu verwalten.<\/li>\n<li> Infolgedessen erfolgen \u00c4nderungen an Anwendungen und Clustern aufgrund von:\n<ul>\n<li> \u00c4nderungen der Container-Images;<\/li>\n<li> \u00c4nderungen der deklarativen Spezifikation;<\/li>\n<li> Fehler in der Umgebung \u2013 zum Beispiel Containerabst\u00fcrze.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><\/p>\n<h3>Au\u00dfergew\u00f6hnliche F\u00e4higkeiten von Kubernetes in der Konvergenz<\/h3>\n<p>\nWenn der Administrator \u00c4nderungen an der Konfiguration vornimmt, wird der Kubernetes-Orchestrator diese auf den Cluster anwenden, bis dessen Zustand <i>nah an der neuen Konfiguration ist<\/i>Dieses Modell funktioniert f\u00fcr jede Kubernetes-Ressource und wird durch Custom Resource Definitions (CRDs) erweitert. Daher haben Kubernetes-Deployments folgende gro\u00dfartige Eigenschaften:<\/p>\n<ul>\n<li> <b>Automatisierung<\/b>: Kubernetes-Updates bieten einen Mechanismus zur Automatisierung des Prozesses, um \u00c4nderungen korrekt und rechtzeitig anzuwenden.<\/li>\n<li> <b>Konvergenz<\/b>: Kubernetes wird weiterhin versuchen, Updates durchzuf\u00fchren, bis der Erfolg erreicht ist.<\/li>\n<li> <b>Idempotenz<\/b>: Wiederholte Anwendungen der Konvergenz f\u00fchren zum gleichen Ergebnis.<\/li>\n<li> <b>Determinismus<\/b>: Bei ausreichenden Ressourcen h\u00e4ngt der Zustand des aktualisierten Clusters lediglich vom gew\u00fcnschten Zustand ab.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Wie GitOps funktioniert<\/h2>\n<p>\nWir haben genug \u00fcber Kubernetes gelernt, um die Prinzipien von GitOps zu erkl\u00e4ren.<\/p>\n<p>Lassen Sie uns zu den Teams von Family Insurance zur\u00fcckkehren, die mit Microservices verbunden sind. Womit haben sie in der Regel zu tun? Sehen Sie sich die Liste unten an (wenn Ihnen einige Punkte seltsam oder unbekannt erscheinen, bitte z\u00f6gern Sie nicht mit Kritik und bleiben Sie bei uns). Das sind nur Beispiele f\u00fcr Arbeitsabl\u00e4ufe basierend auf Jenkins. Es gibt viele weitere Prozesse, die mit anderen Tools verbunden sind.<\/p>\n<p>Das Wichtigste ist, dass wir sehen, dass jedes Update mit \u00c4nderungen an den Konfigurationsdateien und Git-Repositories endet. Diese \u00c4nderungen in Git f\u00fchren dazu, dass der \"GitOps-Operator\" den Cluster aktualisiert:<\/p>\n<p>1. Arbeitsablauf: \u201e<i>Jenkins-Bau \u2013 master-Branch<\/i>\u00bb.<br \/>\nAufgabenliste:<\/p>\n<ul>\n<li> Jenkins schiebt getaggte Images nach Quay;<\/li>\n<li> Jenkins schiebt Konfigurationen und Helm-Charts in den Master-Speicher-Bucket;<\/li>\n<li> Eine Cloud-Funktion kopiert Konfiguration und Charts vom Master-Storage-Bucket ins Git-Repository des Masters;<\/li>\n<li> Der GitOps-Operator aktualisiert den Cluster.<\/li>\n<\/ul>\n<p>\n2. <i>Jenkins-Bau \u2013 release- oder hotfix-Branch<\/i>:<\/p>\n<ul>\n<li> Jenkins schiebt ungetaggte Images nach Quay;<\/li>\n<li> Jenkins schiebt Konfigurationen und Helm-Charts in den Staging-Speicher-Bucket;<\/li>\n<li> Eine Cloud-Funktion kopiert Konfiguration und Charts vom Staging-Storage-Bucket ins Git-Repository des Stagings;<\/li>\n<li> Der GitOps-Operator aktualisiert den Cluster.<\/li>\n<\/ul>\n<p>\n3. <i>Jenkins-Bau \u2013 develop- oder feature-Branch<\/i>:<\/p>\n<ul>\n<li> Jenkins schiebt ungetaggte Images nach Quay;<\/li>\n<li> Jenkins schiebt Konfigurationen und Helm-Charts in den Develop-Speicher-Bucket;<\/li>\n<li> Die Cloud-Funktion kopiert die Konfiguration und Charts aus dem develop-Speicherbunker in das Git-Repository develop;<\/li>\n<li>Der GitOps-Operator aktualisiert den Cluster.<\/li>\n<\/ul>\n<p>\n4. <i>Neuen Kunden hinzuf\u00fcgen<\/i>:<\/p>\n<ul>\n<li> Der Manager oder Administrator (LCM\/ops) ruft Gradle f\u00fcr das initiale Deployment und die Konfiguration der Network Load Balancer (NLB) auf;<\/li>\n<li> LCM\/Ops committet neue Konfigurationen zur Vorbereitung des Deployments auf Updates;<\/li>\n<li> Der GitOps-Operator aktualisiert den Cluster.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Kurze Beschreibung von GitOps<\/h3>\n<p><\/p>\n<ol>\n<li> Definieren Sie den gew\u00fcnschten Zustand des gesamten Systems mithilfe deklarativer Spezifikationen f\u00fcr jede Umgebung (in unserer Geschichte definiert Bob's Team die gesamte Systemkonfiguration in Git).\n<ul>\n<li> Das Git-Repository ist die einzige Quelle der Wahrheit bez\u00fcglich des gew\u00fcnschten Zustands des gesamten Systems.<\/li>\n<li> Alle \u00c4nderungen am gew\u00fcnschten Zustand erfolgen durch Commits in Git.<\/li>\n<li> Alle gew\u00fcnschten Clusterparameter sind ebenfalls im Cluster selbst beobachtbar. So k\u00f6nnen wir feststellen, ob der gew\u00fcnschte und der beobachtete Zustand \u00fcbereinstimmen (konvergieren, <i>converge<\/i>) oder voneinander abweichen (divergieren, <i>diverge<\/i>).<\/li>\n<\/ul>\n<\/li>\n<li> Wenn der gew\u00fcnschte und der beobachtete Zustand unterschiedlich sind, dann:\n<ul>\n<li> Es gibt einen Konvergenzmechanismus, der irgendwann automatisch den Ziel- und den beobachteten Zustand synchronisiert. Innerhalb des Clusters \u00fcbernimmt dies Kubernetes.<\/li>\n<li> Der Prozess wird sofort mit der Benachrichtigung \"\u00c4nderung best\u00e4tigt\" gestartet.<\/li>\n<li> Nach einem anpassbaren Zeitintervall kann eine Benachrichtigung \"Diff\" gesendet werden, falls die Zust\u00e4nde unterschiedlich sind.<\/li>\n<\/ul>\n<\/li>\n<li> So f\u00fchren alle Commits in Git \u00fcberpr\u00fcfbare und idempotente Aktualisierungen im Cluster herbei.\n<ul>\n<li>Ein Rollback ist die Konvergenz zu einem zuvor gew\u00fcnschten Zustand.<\/li>\n<\/ul>\n<\/li>\n<li> Die Konvergenz ist endg\u00fcltig. Anzeichen daf\u00fcr sind:\n<ul>\n<li> Das Fehlen von \"Diff\"-Benachrichtigungen \u00fcber einen bestimmten Zeitraum.<\/li>\n<li> Die Benachrichtigung \"konvergiert\" (zum Beispiel Webhook, Git Writeback-Ereignis).<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><\/p>\n<h3>Was ist Divergenz?<\/h3>\n<p>\nLassen Sie uns wiederholen: <i>alle gew\u00fcnschten Eigenschaften des Clusters m\u00fcssen im Cluster selbst beobachtbar sein.<\/i>.<\/p>\n<p>Einige Beispiele f\u00fcr Divergenz:<\/p>\n<ul>\n<li> \u00c4nderung in der Konfigurationsdatei aufgrund von Zusammenf\u00fchrungen von Branches in Git.<\/li>\n<li> \u00c4nderung in der Konfigurationsdatei aufgrund eines Git-Commits, der von einem GUI-Client durchgef\u00fchrt wurde.<\/li>\n<li> Mehrere \u00c4nderungen im gew\u00fcnschten Zustand aufgrund eines PR in Git mit anschlie\u00dfender Erstellung des Container-Images und \u00c4nderungen in der Konfiguration.<\/li>\n<li> \u00c4nderung des Clusterstatus aufgrund eines Fehlers, Ressourcen-Konflikts, der zu 'schlechtem Verhalten' f\u00fchrt, oder einfach einer zuf\u00e4lligen Abweichung vom urspr\u00fcnglichen Zustand.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Was ist der Konvergenzmechanismus?<\/h3>\n<p>\nEinige Beispiele:<\/p>\n<ul>\n<li> F\u00fcr Container und Cluster stellt der Konvergenzmechanismus Kubernetes zur Verf\u00fcgung.<\/li>\n<li> Der gleiche Mechanismus kann zur Verwaltung von Anwendungen und Konstrukten auf Basis von Kubernetes (zum Beispiel Istio und Kubeflow) verwendet werden.<\/li>\n<li> Der Mechanismus zur Verwaltung der Interaktion zwischen Kubernetes, Bild-Repositories und Git bietet <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/weaveworks\/flux\">dem GitOps-Operator Weave Flux<\/a><\/noindex>, der Teil von <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.weave.works\/\">Weave Cloud<\/a><\/noindex>.<\/li>\n<li> F\u00fcr Basismaschinen sollte der Konvergenzmechanismus deklarativ und autonom sein. Aus eigener Erfahrung k\u00f6nnen wir sagen, dass <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.gruntwork.io\/why-we-use-terraform-and-not-chef-puppet-ansible-saltstack-or-cloudformation-7989dad2865c\">Terraform<\/a><\/noindex> dieser Definition am n\u00e4chsten kommt, jedoch dennoch menschliche Kontrolle erfordert. In diesem Sinne erweitert GitOps die Traditionen von Infrastructure as Code.<\/li>\n<\/ul>\n<p>\nGitOps verbindet Git mit dem hervorragenden Konvergenzmechanismus von Kubernetes und bietet ein Modell f\u00fcr den Betrieb.<\/p>\n<p>GitOps erm\u00f6glicht es uns zu erkl\u00e4ren: <i>Automatisierung und Kontrolle gelten nur f\u00fcr Systeme, die beschrieben und \u00fcberwacht werden k\u00f6nnen.<\/i>.<\/p>\n<h3>GitOps ist f\u00fcr den gesamten Cloud-Native-Stack (zum Beispiel Terraform usw.) gedacht.<\/h3>\n<p>\nGitOps ist nicht nur Kubernetes. Wir m\u00f6chten, dass das gesamte System deklarativ verwaltet wird und Konvergenz nutzt. Unter dem gesamten System verstehen wir eine Vielzahl von Umgebungen, die mit Kubernetes arbeiten \u2013 wie zum Beispiel \u201edev cluster 1\u201c, \u201eProduktion\u201c usw. Jede Umgebung umfasst Maschinen, Cluster, Anwendungen sowie Schnittstellen zu externen Diensten, die Daten, Monitoring usw. bereitstellen.<\/p>\n<p>Beachten Sie, wie wichtig Terraform in diesem Fall f\u00fcr das Bootstrapping-Problem ist. Kubernetes muss irgendwo bereitgestellt werden, und die Verwendung von Terraform bedeutet, dass wir dieselben GitOps-Workflows anwenden k\u00f6nnen, um die Management-Schicht zu erstellen, die Kubernetes und die Anwendungen zugrunde liegt. Das ist eine n\u00fctzliche Best Practice.<\/p>\n<p>Es wird viel Wert auf die Anwendung der GitOps-Konzepte auf die Schichten \u00fcber Kubernetes gelegt. Derzeit gibt es GitOps-L\u00f6sungen f\u00fcr Istio, Helm, Ksonnet, OpenFaaS und Kubeflow, sowie zum Beispiel f\u00fcr Pulumi, die eine Schicht zur Anwendungsentwicklung f\u00fcr Cloud-Native schaffen.<\/p>\n<h2>Kubernetes CI\/CD: Vergleich von GitOps mit anderen Ans\u00e4tzen.<\/h2>\n<p>\nWie bereits erw\u00e4hnt, ist GitOps zwei Dinge:<\/p>\n<ol>\n<li> Ein Betriebsmodell f\u00fcr Kubernetes und Cloud-Native, wie oben beschrieben.<\/li>\n<li> Der Weg zu einer entwicklerorientierten Umgebung f\u00fcr das Management von Anwendungen.<\/li>\n<\/ol>\n<p>\nF\u00fcr viele ist GitOps vor allem ein auf Git-Push basierender Workflow. Dem stimmen wir ebenfalls zu. Aber das ist nicht alles: Lassen Sie uns nun einen Blick auf CI\/CD-Pipelines werfen.<\/p>\n<h3>GitOps erm\u00f6glicht Continuous Deployment (CD) unter Kubernetes.<\/h3>\n<p>\nGitOps bietet einen Mechanismus f\u00fcr kontinuierliches Deployment, der die Notwendigkeit separater 'Deployment-Management-Systeme' eliminiert. Kubernetes erledigt die gesamte Arbeit f\u00fcr Sie.<\/p>\n<ul>\n<li> Das Update einer Anwendung erfordert ein Update im Git. Dies ist ein transaktionales Update auf den gew\u00fcnschten Zustand. Das \"Deployment\" erfolgt dann innerhalb des Clusters selbst von Kubernetes basierend auf der aktualisierten Beschreibung.<\/li>\n<li> Aufgrund der spezifischen Arbeitsweise von Kubernetes sind diese Updates konvergent. Dies gew\u00e4hrleistet einen Mechanismus f\u00fcr kontinuierliches Deployment, bei dem alle Updates atomar sind.<\/li>\n<li> Hinweis: <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.weave.works\/\">Weave Cloud<\/a><\/noindex> bietet einen GitOps-Operator, der Git und Kubernetes integriert und es erm\u00f6glicht, CD durch Abstimmung des gew\u00fcnschten und des aktuellen Zustands des Clusters durchzuf\u00fchren.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Ohne kubectl und Skripte.<\/h3>\n<p>\nVermeiden Sie es, Kubectl zur Aktualisierung des Clusters zu verwenden, insbesondere Skripte zur Gruppierung von Kubectl-Befehlen. Stattdessen kann der Benutzer \u00fcber eine GitOps-Pipeline sein Kubernetes-Cluster \u00fcber Git aktualisieren.<\/p>\n<p>Die Vorteile umfassen:<\/p>\n<ol>\n<li> <b>Richtigkeit<\/b>. Mit einer Gruppe von Updates kann man anwenden, konvergieren und schlie\u00dflich validieren, was uns dem Ziel eines atomaren Deployments n\u00e4her bringt. Im Gegensatz dazu bieten Skripte keine Gew\u00e4hr f\u00fcr die Konvergenz (dazu weiter unten mehr).<\/li>\n<li> <b>Sicherheit<\/b>. <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/kelseyhightower\/status\/939003832805179392?lang=en\">Zitat von<\/a><\/noindex> Kelsey Hightower: \u201eBeschr\u00e4nken Sie den Zugriff auf den Kubernetes-Cluster auf Automatisierungstools und Administratoren, deren Aufgabe es ist, ihn zu debuggen oder betriebsf\u00e4hig zu halten.\u201c Siehe auch <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-compliance-and-secure-cicd\">meinen Beitrag<\/a><\/noindex> zur Sicherheit und Einhaltung technischer Anforderungen sowie <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@vesirin\/how-i-gained-commit-access-to-homebrew-in-30-minutes-2ae314df03ab\">den Artikel \u00fcber den Homebrew-Hack<\/a><\/noindex> durch das Stehlen von Anmeldeinformationen aus einem sorglos erstellten Jenkins-Skript.<\/li>\n<li> <b>Benutzererfahrung<\/b>. Kubectl zeigt die Mechanik des Kubernetes-Objektmodells, das ziemlich komplex ist. Idealerweise sollten Benutzer auf einer h\u00f6heren Abstraktionsebene mit dem System interagieren. Hier verweise ich erneut auf Kelsey und empfehle, sich anzusehen <noindex><a rel=\"nofollow\" href=\"http:\/\/superuser.openstack.org\/articles\/kubernetes-boring\/\">so ein Lebenslauf<\/a><\/noindex>.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Der Unterschied zwischen CI und CD<\/h3>\n<p>\nGitOps verbessert bestehende CI\/CD-Modelle.<\/p>\n<p>Ein moderner CI-Server ist ein Werkzeug f\u00fcr die Orchestrierung, insbesondere f\u00fcr die Orchestrierung von CI-Pipelines. Dazu geh\u00f6ren Build, Test, Merge zum Stamm und mehr. CI-Server automatisieren die Verwaltung komplexer, mehrstufiger Pipelines. Ein verbreiteter Irrtum ist, ein Skript f\u00fcr eine Reihe von Kubernetes-Updates zu erstellen und es als Teil der Pipeline auszuf\u00fchren, um \u00c4nderungen in den Cluster zu pushen. Viele Fachleute handeln tats\u00e4chlich so. Doch dies ist nicht optimal, und das ist der Grund daf\u00fcr.<\/p>\n<p>CI sollte verwendet werden, um Updates in den Hauptzweig einzuf\u00fcgen, und der Kubernetes-Cluster sollte sich basierend auf diesen Updates \u00e4ndern, um CD \"intern\" zu verwalten. Wir nennen das <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-compliance-and-secure-cicd\">das Pull-Modell f\u00fcr CD<\/a><\/noindex>, im Gegensatz zum Push-Modell von CI. CD ist Teil der <i>Runtime-Orchestrierung<\/i>.<\/p>\n<h3>Warum CI-Server CD nicht durch direkte Updates in Kubernetes durchf\u00fchren sollten<\/h3>\n<p>\n<i>Verwenden Sie den CI-Server nicht zur Orchestrierung direkter Updates in Kubernetes in Form einer Reihe von CI-Jobs. Dies ist ein Anti-Pattern, \u00fcber das wir <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/kubernetes-anti-patterns-let-s-do-gitops-not-ciops\">bereits berichtet haben<\/a><\/noindex> in unserem Blog.<\/i><\/p>\n<p>Lassen Sie uns zu Alice und Bob zur\u00fcckkehren.<\/p>\n<p>Welche Probleme traten auf? Der CI-Server von Bob wendet \u00c4nderungen auf den Cluster an, aber wenn er dabei abst\u00fcrzt, wei\u00df Bob nicht, in welchem Zustand sich der Cluster befindet oder befinden sollte und wie er ihn reparieren kann. Dasselbe gilt im Erfolgsfall.<\/p>\n<p>Nehmen wir an, Bob's Team hat ein neues Image erstellt und dann ihre Deployments angepasst, um das Image bereitzustellen (alles innerhalb der CI-Pipeline).<\/p>\n<p>Wenn das Image erfolgreich erstellt wird, aber die Pipeline abst\u00fcrzt, muss das Team Folgendes kl\u00e4ren:<\/p>\n<ul>\n<li> Wurde das Update erfolgreich bereitgestellt?<\/li>\n<li> Starten wir einen neuen Build? F\u00fchrt das zu unerw\u00fcnschten Nebeneffekten \u2014 besteht die M\u00f6glichkeit, dass zwei Builds des gleichen unver\u00e4nderten Images erstellt werden? <\/li>\n<li> Sollten wir auf das n\u00e4chste Update warten, bevor wir den Build starten?<\/li>\n<li> Was genau ist schiefgegangen? Welche Schritte m\u00fcssen wiederholt werden (und welche k\u00f6nnen sicher wiederholt werden)?<\/li>\n<\/ul>\n<p>\n<i>Die Organisation eines Git-basierten Workflows garantiert nicht, dass Bob's Team nicht auf diese Probleme st\u00f6\u00dft. Sie k\u00f6nnen weiterhin beim Pushen von Commits, Tags oder anderen Parametern Fehler machen; dieser Ansatz kommt jedoch dem expliziten Alles-oder-Nichts wesentlich n\u00e4her.<\/i><\/p>\n<p>Zusammenfassend l\u00e4sst sich sagen, warum CI-Server nicht f\u00fcr CD zust\u00e4ndig sein sollten:<\/p>\n<ul>\n<li> Update-Skripte sind nicht immer deterministisch; Fehler sind leicht gemacht.<\/li>\n<li> CI-Server konvergieren nicht zu einem deklarativen Cluster-Modell.<\/li>\n<li> Es ist schwierig, die Idempotenz zu garantieren. Benutzer m\u00fcssen sich mit der tiefen Semantik des Systems auseinandersetzen.<\/li>\n<li> Die Wiederherstellung nach einem teilweisen Ausfall ist komplizierter.<\/li>\n<\/ul>\n<p>\n<i>Hinweis zu Helm: Wenn Sie Helm verwenden m\u00f6chten, empfehlen wir, es mit einem GitOps-Operator wie [GitOps-Operator] zu kombinieren. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/managing-helm-releases-the-gitops-way\">Flux-Helm<\/a><\/noindex>. Dadurch wird die Konvergenz sichergestellt. Helm allein ist weder deterministisch noch atomar.<\/i><\/p>\n<h2>GitOps als besten Ansatz f\u00fcr Continuous Delivery bei Kubernetes<\/h2>\n<p>\nDas Team von Alice und Bob implementiert GitOps und stellt fest, dass die Arbeit mit Softwareprodukten wesentlich einfacher geworden ist, w\u00e4hrend die Leistung und Stabilit\u00e4t hoch bleibt. Lassen Sie uns diesen Artikel mit Illustrationen abschlie\u00dfen, die zeigen, wie ihr neuer Ansatz aussieht. Beachten Sie, dass wir haupts\u00e4chlich \u00fcber Anwendungen und Services sprechen, jedoch kann GitOps zur Verwaltung der gesamten Plattform eingesetzt werden.<\/p>\n<h3>Betriebsmodell f\u00fcr Kubernetes<\/h3>\n<p>\nWerfen Sie einen Blick auf das folgende Diagramm. Es zeigt Git und Container-Images als gemeinsame Ressourcen f\u00fcr die beiden orchestrierten Lebenszyklen:<\/p>\n<ul>\n<li> den Continuous Integration-Pipeline, die Dateien in Git liest und schreibt und das Container-Image-Repository aktualisieren kann.<\/li>\n<li> die Runtime GitOps-Pipeline, die Deployment mit Management und Observability kombiniert. Sie liest und schreibt Dateien in Git und kann Container-Images hochladen.<\/li>\n<\/ul>\n<h3>Was sind die wichtigsten Erkenntnisse?<\/h3>\n<p><\/p>\n<ol>\n<li> <b>Probleme trennen<\/b>: Beachten Sie, dass beide Pipelines Daten austauschen k\u00f6nnen, indem sie lediglich Git oder das Image-Repository aktualisieren. Anders ausgedr\u00fcckt, es gibt eine Firewall zwischen der CI- und der Runtime-Umgebung. Wir nennen es \u201eImmutable Firewall\u201c <i>(Immutable Firewall)<\/i>, da alle Updates der Repositories neue Versionen erstellen. F\u00fcr weitere Informationen zu diesem Thema wenden Sie sich bitte an die Folien 72-87 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.slideshare.net\/weaveworks\/continuous-lifecycle-london-2018-event-keynote-97418556\">dieser Pr\u00e4sentation<\/a><\/noindex>.<\/li>\n<li> <b>Jeder CI- und Git-Server kann verwendet werden.<\/b>: GitOps funktioniert mit allen Komponenten. Sie k\u00f6nnen weiterhin Ihre bevorzugten CI- und Git-Server, Container-Repositorys und Testsets verwenden. Nahezu alle anderen Tools f\u00fcr Continuous Delivery auf dem Markt erfordern ihren eigenen CI-\/Git-Server oder Container-Repositorys. Dies kann ein hemmender Faktor f\u00fcr die Entwicklung von cloud-native Anwendungen sein. Bei GitOps k\u00f6nnen Sie jedoch gewohnte Werkzeuge nutzen.<\/li>\n<li> <b>Ereignisse als Integrationswerkzeug<\/b>: Sobald die Daten in Git aktualisiert werden, informiert Weave Flux (oder der Weave Cloud Operator) die Laufzeit dar\u00fcber. Jedes Mal, wenn Kubernetes eine Menge von \u00c4nderungen akzeptiert, wird Git aktualisiert. Dies bietet ein einfaches Integrationsmodell f\u00fcr die Arbeitsabl\u00e4ufe von GitOps, wie unten dargestellt.<\/li>\n<\/ol>\n<h2>Fazit<\/h2>\n<p>\nGitOps bietet gewichtige Garantien f\u00fcr Updates, die jedem modernen CI\/CD-Tool erforderlich sind:<\/p>\n<ul>\n<li> Automatisierung;<\/li>\n<li> Konvergenz;<\/li>\n<li> Idempotenz;<\/li>\n<li> Determinismus.<\/li>\n<\/ul>\n<p>\nDies ist wichtig, da es ein Betriebsmodell f\u00fcr Entwickler im Bereich cloud-native Anwendungen bereitstellt.<\/p>\n<ul>\n<li> Traditionelle Werkzeuge zur Verwaltung und \u00dcberwachung von Systemen sind mit Betriebsteams verkn\u00fcpft, die im Rahmen eines Runbooks agieren. <i>(einer Sammlung von Routineverfahren und -operationen \u2014 Anmerkung des \u00dcbersetzers)<\/i>, das an ein bestimmtes Deployment gebunden ist.<\/li>\n<li> Bei der Verwaltung von cloud-nativen Systemen ist ein \u00dcberwachungstool der beste Weg, um die Ergebnisse von Deployments zu bewerten, sodass das Entwicklerteam schnell darauf reagieren kann.<\/li>\n<\/ul>\n<p>\nStellen Sie sich viele Cluster vor, die auf verschiedene Clouds verteilt sind, und zahlreiche Dienste mit eigenen Teams und Deployment-Pl\u00e4nen. GitOps bietet ein skalierbares, invariantes Modell zur Verwaltung all dieser Vielfalt.<\/p>\n<h2>P.S. vom \u00dcbersetzer<\/h2>\n<p>\nLesen Sie auch in unserem Blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/456754\/\">GitOps: Vergleich von Pull- und Push-Methoden<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/434160\/\">Wir stellen die Bibliothek kubedog zur \u00dcberwachung von Kubernetes-Ressourcen vor<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/449096\/\">Erweiterung und Erg\u00e4nzung von Kubernetes (\u00dcberblick und Video-Pr\u00e4sentation)<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p class=\"for_users_only_msg\">Nur registrierte Benutzer k\u00f6nnen an der Umfrage teilnehmen. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Bitte melden Sie sich an.<\/a><\/noindex>Sind Sie an Contour interessiert?<\/p>\n<h2 class=\"default-block__polling-title\">Wussten Sie schon von GitOps, bevor diese beiden \u00dcbersetzungen auf Habr ver\u00f6ffentlicht wurden?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ja, ich wusste es.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Nur oberfl\u00e4chlich.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Nein<\/p>\n<\/li>\n<\/ul>\n<p>    35 Benutzer haben abgestimmt. 10 Benutzer haben sich enthalten.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/458878\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043e \u043c\u0435\u0442\u043e\u0434\u0430\u0445 pull \u0438 push \u0432 GitOps \u043c\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043a \u044d\u0442\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u0446\u0435\u043b\u043e\u043c, \u043e\u0434\u043d\u0430\u043a\u043e \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0445 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439 \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u043c\u0430\u043b\u043e (\u043d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0438\u0445 \u043f\u043e\u043f\u0440\u043e\u0441\u0442\u0443 \u043d\u0435\u0442). \u041f\u043e\u0441\u0435\u043c\u0443 \u0440\u0430\u0434\u044b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u043f\u0443\u0441\u0442\u044c \u0438 \u0443\u0436\u0435 \u043f\u043e\u0447\u0442\u0438 \u0433\u043e\u0434\u0438\u0447\u043d\u043e\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438! \u2014 \u043e\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Weaveworks, \u0433\u043b\u0430\u0432\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-35941","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043e \u043c\u0435\u0442\u043e\u0434\u0430\u0445 pull \u0438 push \u0432 GitOps \u043c\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043a \u044d\u0442\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u0446\u0435\u043b\u043e\u043c, \u043e\u0434\u043d\u0430\u043a\u043e \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0445 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439 \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u043c\u0430\u043b\u043e (\u043d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0438\u0445 \u043f\u043e\u043f\u0440\u043e\u0441\u0442\u0443 \u043d\u0435\u0442). \u041f\u043e\u0441\u0435\u043c\u0443 \u0440\u0430\u0434\u044b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u043f\u0443\u0441\u0442\u044c \u0438 \u0443\u0436\u0435 \u043f\u043e\u0447\u0442\u0438 \u0433\u043e\u0434\u0438\u0447\u043d\u043e\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438! \u2014 \u043e\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Weaveworks, \u0433\u043b\u0430\u0432\u0430\" \/>\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\/de\/blog\/administrirovanie\/chto-zhe-takoe-gitops\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0427\u0442\u043e \u0436\u0435 \u0442\u0430\u043a\u043e\u0435 GitOps? | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043e \u043c\u0435\u0442\u043e\u0434\u0430\u0445 pull \u0438 push \u0432 GitOps \u043c\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043a \u044d\u0442\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u0446\u0435\u043b\u043e\u043c, \u043e\u0434\u043d\u0430\u043a\u043e \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0445 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439 \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u043c\u0430\u043b\u043e (\u043d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0438\u0445 \u043f\u043e\u043f\u0440\u043e\u0441\u0442\u0443 \u043d\u0435\u0442). \u041f\u043e\u0441\u0435\u043c\u0443 \u0440\u0430\u0434\u044b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u043f\u0443\u0441\u0442\u044c \u0438 \u0443\u0436\u0435 \u043f\u043e\u0447\u0442\u0438 \u0433\u043e\u0434\u0438\u0447\u043d\u043e\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438! \u2014 \u043e\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Weaveworks, \u0433\u043b\u0430\u0432\u0430\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/chto-zhe-takoe-gitops\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:07:41+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:07:41+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47 Was ist GitOps? | ProHoster","description":"Anmerkung des \u00dcbersetzers: Nach der k\u00fcrzlichen Ver\u00f6ffentlichung von Materialien \u00fcber Pull- und Push-Methoden im GitOps haben wir ein Interesse an diesem Modell insgesamt festgestellt. Es gibt jedoch kaum russischsprachige Ver\u00f6ffentlichungen zu diesem Thema (auf Habr sind sie einfach nicht vorhanden). Daher freuen wir uns, Ihnen die \u00dcbersetzung eines anderen Artikels anzubieten \u2013 auch wenn er bereits fast ein Jahr alt ist \u2013 von Weaveworks, Kapitel.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/chto-zhe-takoe-gitops","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0427\u0442\u043e \u0436\u0435 \u0442\u0430\u043a\u043e\u0435 GitOps? | ProHoster","og:description":"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043e \u043c\u0435\u0442\u043e\u0434\u0430\u0445 pull \u0438 push \u0432 GitOps \u043c\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043a \u044d\u0442\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u0446\u0435\u043b\u043e\u043c, \u043e\u0434\u043d\u0430\u043a\u043e \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0445 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439 \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u043c\u0430\u043b\u043e (\u043d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0438\u0445 \u043f\u043e\u043f\u0440\u043e\u0441\u0442\u0443 \u043d\u0435\u0442). \u041f\u043e\u0441\u0435\u043c\u0443 \u0440\u0430\u0434\u044b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u043f\u0443\u0441\u0442\u044c \u0438 \u0443\u0436\u0435 \u043f\u043e\u0447\u0442\u0438 \u0433\u043e\u0434\u0438\u0447\u043d\u043e\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438! \u2014 \u043e\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Weaveworks, \u0433\u043b\u0430\u0432\u0430","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/chto-zhe-takoe-gitops","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:07:41+00:00","article:modified_time":"2019-10-31T19:07:41+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35941","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 01:21:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:53:31","updated":"2026-01-22 01:21:19"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/35941","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=35941"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/35941\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=35941"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=35941"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=35941"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}