Was ist GitOps? Ausweitung der Entwickler auf Kubernetes und darüber hinaus

In den letzten zehn Jahren der Programmierung gab es eine Reihe revolutionärer Veränderungen. Eine davon ist aus einer Reihe von Praktiken rund um Entwickler entstanden, die Entwicklungs- und Betriebsteams in einem gemeinsamen Arbeitsprozess ausrichten, sowie aus kontinuierlicher Integration und kontinuierlicher Bereitstellung (CI / CD), in der Entwicklerteams eine Codebasis ständig inkrementell aktualisieren. Eine weitere Transformation ergab sich aus der damit verbundenen Umstellung von monolithischen Codebasen auf Cloud-basierte Mikrodienste, die in Containern ausgeführt werden, die von Orchestrierungsplattformen wie Kubernetes verwaltet werden.

Containerbasierte Anwendungen, die auf Clustersystemen oder in der Cloud ausgeführt werden, können komplex und schwierig bereitzustellen und zu verwalten sein, selbst wenn eine Plattform wie Kubernetes Dinge orchestriert. GitOps ist eine neue Reihe von Methoden, die darauf abzielen, diese Verwaltungsaufgabe durch Anwendung von Techniken aus der Devop- und CI / CD-Welt zu vereinfachen.

Der Schlüssel zu GitOps ist die Idee der Infrastruktur als Code, die denselben Ansatz für die Bereitstellung der Infrastruktur verfolgt wie Devops für die Bereitstellung von Anwendungen. Daher werden nicht nur die Anwendung, sondern auch die zugrunde liegenden Host-Computer und -Netzwerke in Dateien beschrieben, die wie jeder andere Code innerhalb eines Versionskontrollsystems behandelt werden können. Dabei arbeiten automatisierte Prozesse daran, die reale Anwendung mit der in diesen beschriebenen zu konvergieren Dateien.

Im GitOps-Sprachgebrauch ist der Code im Versionskontrollsystem die einzige Quelle der Wahrheit darüber, wie die Anwendung in der Produktion aussehen sollte

GitOps definiert 

Weaveworks ist das Unternehmen, das am meisten getan hat, um das Konzept von GitOps bekannt zu machen. Wir werden gleich auf die Details der Rolle von Weaveworks eingehen, aber zuerst werfen wir einen Blick auf die zweifache Definition von GitOps durch das Unternehmen:

  • Ein Betriebsmodell für Kubernetes und andere native Cloud-Technologien, das eine Reihe von Best Practices bereitstellt, die die Bereitstellung, Verwaltung und Überwachung für containerisierte Cluster und Anwendungen vereinheitlichen.
  • Ein Weg zu einer Entwicklererfahrung für die Verwaltung von Anwendungen; Dabei werden End-to-End-CI / CD-Pipelines und Git-Workflows sowohl auf den Betrieb als auch auf die Entwicklung angewendet.

Mit anderen Worten, GitOps ist eine spezielle Reihe von Methoden zur Verwaltung von Kubernetes und ähnlichen Plattformen, die sich auch für eine mögliche breitere Anwendung eignen, da immer mehr Entwicklungsbetriebe Entwicklungspraktiken anwenden und Code in die Cloud migrieren. Aber um die geheime Sauce von GitOps und die damit verbundenen Probleme zu verstehen, müssen wir über die Komponenten sprechen, die darin enthalten sind.

Git Definition 

Die Git in GitOps beziehen sich auf das sehr beliebte verteiltes Versionskontrollsystem , entwickelt von Linus Torvalds in 2005. Git ist ein Werkzeug , das Entwicklerteam zu arbeiten gemeinsam an einer Anwendung Code - Basis, Speicher verschiedener ermöglicht Zweige von Code , dass sie basteln , bevor sie in verschmelzenden produktionscode. Ein Schlüsselkonzept innerhalb von Git ist die Pull-Anfrage, bei der ein Entwickler formell darum bittet, dass Code, an dem er gearbeitet hat, in einen anderen Zweig innerhalb der Codebasis integriert wird.

Eine Git-Pull-Anfrage bietet Teammitgliedern die Möglichkeit, zusammenzuarbeiten und zu diskutieren, bevor ein Konsens darüber erzielt wird, ob der neue Code zur Anwendung hinzugefügt werden soll. Git speichert auch ältere Codeversionen, wodurch es einfach ist, auf die letzte gute Version zurückzugreifen, wenn etwas schief geht, und Sie schnell sehen können, was sich zwischen den Revisionen geändert hat. Git ist vielleicht am besten als Grundlage von GitHub bekannt, einem in der Cloud gehosteten Versionskontrollsystem, aber Git selbst ist Open-Source-Software, die überall eingesetzt werden kann, von internen Unternehmensservern bis zu Ihrem PC.

Beachten Sie, dass Git normalerweise als Computerprogrammierwerkzeug betrachtet wird, es jedoch unabhängig davon ist, für welchen Inhalt Sie es verwenden. Git behandelt jeden Satz von Textdateien gerne als Ihre „Codebasis“ und kann beispielsweise von Autoren verwendet werden, die Änderungen an einer gemeinsamen Arbeit nachverfolgen möchten. Dies ist wichtig, da ein Großteil der Codebasis im Kern von GitOps aus deklarativen Konfigurationsdateien und nicht aus ausführbarem Code besteht.

Eine letzte Sache, die wir sagen müssen, bevor wir weitermachen: Obwohl "Git" genau dort im Namen steht, erfordert GitOps nicht die Verwendung von Git. Geschäfte, die bereits in andere Versionskontrollsoftware wie Subversion investiert sind, können auch GitOps implementieren. Git wird jedoch in der Devops-Welt häufig zur Implementierung von CI / CD verwendet, sodass die meisten GitOps-Projekte Git verwenden.

Was ist der CI / CD-Prozess?

Ein vollständiger Blick auf CI / CD würde den Rahmen dieses Artikels sprengen - siehe die Erläuterung zu diesem Thema -, aber wir müssen ein paar Worte zu CI / CD sagen, da dies der Kern der Funktionsweise von GitOps ist. Die kontinuierliche Integrationshälfte von CI / CD wird durch Versionskontroll-Repositorys wie Git: Developer ermöglicht. Sie können ihre Codebasis ständig verbessern, anstatt alle paar Monate oder Jahre große, monolithische neue Versionen herauszubringen. Die kontinuierliche Bereitstellung wird durch automatisierte Systeme ermöglicht, die als Pipelines bezeichnet werden und den neuen Code erstellen, testen und für die Produktion bereitstellen.

Auch hier sprechen wir immer wieder über Code , der normalerweise Visionen von ausführbarem Code hervorruft, der in einer Programmiersprache wie C oder Java oder JavaScript geschrieben ist. In GitOps besteht der von uns verwaltete „Code“ jedoch hauptsächlich aus Konfigurationsdateien. Dies ist nicht nur ein kleines Detail - es ist das Herzstück dessen, was GitOps tut. Diese Konfigurationsdateien sind, wie gesagt, die „einzige Quelle der Wahrheit“, die beschreibt, wie unser System aussehen soll. Sie sind eher deklarativ als lehrreich. Das bedeutet, dass in der Konfigurationsdatei anstelle von "Starten von zehn Servern" einfach "Dieses System enthält zehn Server" steht.

Mit der CI- Hälfte der GitOps-Gleichung können Entwickler schnell Optimierungen und Verbesserungen an diesen Konfigurationsdateien vornehmen. die CD Hälfte passiert , wenn automatisierte Software - Agenten ihr Bestes tun , die Beschreibungen in den Konfigurationsdateien , um sicherzustellen , dass die Live - Version der Anwendung Spiegel - , dass es konvergiert zu dem Vereinbarungsmodell, in der Sprache der GitOps.

GitOps und Kubernetes

Wie bereits erwähnt, wurden die Konzepte von GitOps ursprünglich für die Verwaltung von Kubernetes-Anwendungen entwickelt. Mit dem, was wir jetzt über GitOps wissen, wollen wir uns die GitOps-Diskussion von Weaveworks noch einmal ansehen und sehen, wie sie beschreiben, wie Sie Aktualisierungen an Kubernetes vornehmen würden, die nach GitOps-Prinzipien verwaltet werden. Hier ist eine Zusammenfassung:

  1. Ein Entwickler stellt eine Git-Pull-Anfrage für eine neue Funktion.
  2. Der Code wird überprüft und genehmigt und dann in die Hauptcodebasis eingefügt.
  3. Durch die Zusammenführung wird die CI / CD-Pipeline ausgelöst, die den neuen Code automatisch testet, neu erstellt und in einer Registrierung bereitstellt.
  4. Ein Software-Agent bemerkt das Update, zieht den neuen Code aus der Registrierung und aktualisiert die Konfigurationsdatei (in YAML geschrieben) im Konfigurations-Repository.
  5. Ein Software-Agent im Kubernetes-Cluster erkennt anhand der Konfigurationsdatei, dass der Cluster veraltet ist, ruft die Änderungen ab und stellt die neue Funktion bereit.

Weaveworks und GitOps

Offensichtlich machen die Schritte 4 und 5 hier einen Großteil des schweren Hebens. Die Software-Agenten, die die „Quelle der Wahrheit“ im Git-Repository auf magische Weise mit der realen Kubernetes-Anwendung synchronisieren, sind die Magie, die GitOps ermöglicht. Wie bereits erwähnt, wird in GitOps-Begriffen der Prozess, Live-Systeme den in Konfigurationsdateien beschriebenen idealen Systemen ähnlicher zu machen, als Konvergenz bezeichnet . (Wenn das Live-System und das ideale System nicht synchron sind, ist dies eine Divergenz. ) Im Idealfall wird die Konvergenz durch automatisierte Prozesse erreicht, aber die Möglichkeiten der Automatisierung sind begrenzt, und manchmal ist ein menschliches Eingreifen erforderlich.

Wir haben den Prozess hier allgemein beschrieben. Wenn Sie sich jedoch die Weaveworks-Seite ansehen, sind die genannten „Software-Agenten“ Teil der Weave Cloud-Plattform des Unternehmens. Der Begriff „GitOps“ wurde von Alexis Richardson, CEO von Weaveworks, geprägt und dient teilweise dazu, die Weaveworks-Plattform für Entwickler attraktiv zu machen, die bereits in der Devop- und CI / CD-Welt tätig sind.

Weaveworks hat jedoch nie ein Monopol auf GitOps beansprucht, das eher eine Philosophie und eine Reihe von Best Practices als ein bestimmtes Produkt ist. Als Blog für CloudBees, ein Unternehmen, das CI / CD-Lösungen anbietet, stellt GitOps ein offenes, herstellerneutrales Modell dar, das als Reaktion auf verwaltete proprietäre Kubernetes-Lösungen entwickelt wurde, die von großen Cloud-Anbietern wie Amazon, Google und Microsoft eingeführt wurden . CloudBees bietet seine eigenen GitOps-Lösungen an, ebenso wie eine Reihe von Spielern in diesem Bereich.

GitOps und Devops

Atlassian, ein Unternehmen, das eine Reihe von Tools für agile Entwickler herstellt, hat einen ausführlichen Blog-Beitrag über die Geschichte und den Zweck von GitOps veröffentlicht, der Ihre Zeit wert ist. Aus ihrer Sicht stellt GitOps eine logische Erweiterung der Ideen dar, die als Entwickler zusammenkamen. Insbesondere ist GitOps eine Ausarbeitung des Konzepts der Infrastruktur als Code, selbst eine Idee, die aus dem Umfeld der Entwickler hervorgegangen ist. GitOps hat nach Ansicht von Atlassian die entscheidende Lücke zwischen den vorhandenen Devops-Techniken, die zur Lösung von Problemen bei der Systemadministration entwickelt wurden, und den spezifischen Anforderungen verteilter Cloud-Hosting-Anwendungen geschlossen. Die automatisierte Konvergenz, die von verschiedenen Cloud-Anbietern angeboten wird, macht GitOps zu etwas Besonderem.

Und während sich GitOps auch heute noch auf Kubernetes konzentriert, hoffen wir, dass wir klargestellt haben, wie dies auf die viel breitere Welt verteilter, Cloud-basierter Apps zutrifft. Ein Blog-Beitrag des Open-Source-Sicherheitsanbieters WhiteSource beschreibt die Vorteile von GitOps:

  • Beobachtbarkeit : GitOps-Systeme bieten Überwachung, Protokollierung, Nachverfolgung und Visualisierung in komplexen Anwendungen, sodass Entwickler sehen können, was wo kaputt geht.
  • Versionskontrolle und Änderungsmanagement : Dies ist natürlich ein wesentlicher Vorteil der Verwendung eines Versionskontrollsystems wie Git. Fehlerhafte Updates können problemlos zurückgesetzt werden.
  • Einfache Einführung : GitOps baut auf den Fähigkeiten der Entwickler auf, über die viele Entwickler bereits verfügen.
  • Produktivität : GitOps bietet die Produktivitätssteigerungen, die Entwickler und CI / CD in andere Bereiche gebracht haben.
  • Auditing: Dank Git kann jede Aktion auf ein bestimmtes Commit zurückgeführt werden, sodass die Fehlerursache leicht aufgespürt werden kann.

Selbst wenn Sie keine Kubernetes verwenden, stehen die Chancen gut, dass GitOps früher oder später Teil Ihres Workflows wird.