GitOps
GitOps ist ein Paradigma rund um Kubernetes, das es Entwicklern und IT-Betriebsteams ermöglicht, Git für das Cluster-Management und die Anwendungsbereitstellung zu nutzen. Die Anwendung eines Git-Workflows auf Betriebs- und Entwicklungsteams ermöglicht es Entwicklern, Git-Pull-Requests zur Verwaltung der Infrastrukturbereitstellung und Softwarebereitstellung zu verwenden.
Git ist ein verteiltes Open-Source-Codeverwaltungs- und Versionskontrollsystem. Git wird verwendet, um Änderungen am Quellcode während der Softwareentwicklung zu verfolgen, und wird auch für das Konfigurations- und Inhaltsmanagement eingesetzt. Ein Teil von Git, der mit GitOps zusammenhängt, umfasst Pull Requests. Mit einer Pull-Anfrage können Benutzer anderen mitteilen, welche Änderungen sie über GitHub in einen neuen Zweig eines Repositorysverschoben haben. Wenn ein Benutzer eine Pull-Anfrage öffnet, kann er Commits überprüfen, diskutieren oder nachverfolgen, bevor die Änderungen in einen Basiszweig zusammengeführt werden.
GitOps wurde von WeaveWorks mit dem Ziel entwickelt, eine Single Source of Truth für die Infrastruktur und die Anwendungen zu schaffen. Um dies zu erreichen, hat WeaveWorks Git in den Mittelpunkt seiner Bereitstellungs-Pipeline gestellt, damit Entwickler Pull Requests nutzen können, um den Betrieb und die Softwarebereitstellung in Kubernetes zu vereinfachen.
GitOps verwendet Git wo immer möglich, von der Entwicklung bis zur Bereitstellung. Das bedeutet, dass GitOps zum Codieren und Schreiben von Anwendungen, zum Erstellen von Pipelines - in der Regel unter Verwendung von YAML -, zum Bereitstellen eines Kubernetes-Clusters und zum Bereitstellen von Arbeit auf Kubernetes-Clustern, Servern oder Container-Registries verwendet werden kann.
GitOps kann von Teams verwendet werden, die häufig mit Kubernetes arbeiten und den Übergang zu kontinuierlichen Modellen wie Continuous Integration (CI), Deployment oder Testing einleiten möchten.
Wie GitOps funktioniert
GitOps basiert auf Pull Requests. Sobald eine Pull-Anfrage initialisiert ist, sollte der Benutzer in der Lage sein, einen Überblick über die Änderungen in jedem Zweig in einer Repository-Basis zu sehen. Der Benutzer kann dann eine Zusammenfassung der vorgeschlagenen Änderungen hinzufügen, Änderungen überprüfen, Labels hinzufügen und andere Mitwirkende erwähnen. Nachdem die Pull-Anfrage erstellt wurde, kann eine Übergabe aus einem Themenzweig zu der Pull-Anfrage hinzugefügt werden - wo die Mitwirkenden dann alle vorgeschlagenen Änderungen selbst einsehen können. Sobald alle Beteiligten der Anfrage zugestimmt haben, können die Änderungen mit der Pull-Anfrage zusammengeführt werden.
Mögliche Änderungen an einer Anwendung oder einem Cluster können Aktualisierungen von Container-Images, Fehlerbehebungen in der Umgebung oder Aktualisierungen von Spezifikationen umfassen. Die Fehlerbehebung mit GitOps ist in der Regel schnell, da die Benutzer alle Probleme beheben können, die mit einer Pull-Anfrage und nicht im zugrunde liegenden System auftreten.
GitOps kann auch auf andere Tools für Git-Pushes, Entwicklung und kontinuierliche Integration (Continuous Integration, CI) zurückgreifen. GitOps funktioniert mit jedem CI- und Git-Server. Andere Tools wie Jenkins X arbeiten ebenfalls mit GitOps zusammen. Jenkins X ist ein Open-Source-Tool, das kontinuierliche Integration und kontinuierliche Bereitstellung (Continuous Deployment, CD) sowie andere automatisierte Test-Tools bietet, die für Cloud-native Anwendungen - insbesondere in einer Kubernetes-Umgebung - entwickelt wurden. Andere Tools wie GitHub, Bitbucket oder AWSCodeDeploy können ebenfalls in GitOps verwendet werden. Bitbucket ist ein Repository-Tool ähnlich wie GitHub. In der Vergangenheit hat es Mercurial-Repositorys gehostet, aber heute unterstützt es nur noch Git. AWS CodeDeploy kann verwendet werden, um Codebereitstellungen zu automatisieren.
Einsatzbereiche von GitOps
GitOps kann aus einer Reihe von Gründen verwendet werden, zum Beispiel um eine kontinuierliche Bereitstellung für Kubernetes zu ermöglichen. Die kontinuierliche Bereitstellung ermöglicht es einem Unternehmen nicht nur, Anwendungen schneller bereitzustellen, sondern macht auch individuelle Bereitstellungsmanagementsysteme überflüssig.
GitOps kann auch verwendet werden, um eine kontinuierliche Bereitstellung für Kubernetes zu implementieren. Die kontinuierliche Bereitstellung ermöglicht es Entwicklungsteams in der Regel, Software durch inkrementelle Updates in einem schnellen Tempo zu erstellen, zu testen und bereitzustellen. Die kontinuierliche Bereitstellung für Kubernetes ermöglicht auch eine kontinuierliche Integrations- und Laufzeit-Pipeline, die in der Lage sein sollte, Dateien in Git zu lesen und zu schreiben, Container-Repositories zu aktualisieren und Container-Images zu laden.
GitOps ermöglicht es einer Organisation, ein einziges Tool für die Kontrolle der Infrastruktur zu verwenden, das die Versionskontrolle für Konfigurationsänderungen sowie die Fähigkeit zur ständigen Überwachung von Änderungen und zur Ausgabe von Warnungen ermöglicht.
Vorteile von GitOps
Zu den Vorteilen der Implementierung von GitOps gehören:
- Gesteigerte Produktivität durch die Ermöglichung einer kontinuierlichen Lieferung und Bereitstellung
- Zuverlässigkeit durch Revert/Rollback- und Fork-Funktionen
- Standardisierte Arbeitsabläufe rund um Git
- Ermöglicht es einer Organisation, einen einzigen Satz von Tools zu verwenden
- Verringert die Anzahl potenzieller Variablen bei der Verwaltung der Infrastruktur
- Bietet zusätzliche Sichtbarkeit
- Geringere potenzielle Angriffsflächen
Nachteile von GitOps
Einige Nachteile von GitOps sind jedoch:
- Benutzer müssen auf fehlerhafte YAML-Manifeste achten, in denen die Syntax oder Objektreferenzen fehlerhaft sein können.
- Da die Entwicklung über einen Pull-Ansatz erfolgt, sind die Benutzer darauf beschränkt, nur Tools zu verwenden, die Pulls ausführen.
- Es besteht die Möglichkeit der API-Drosselung, da GitOps das Git-Repo ständig abfragt.
GitOps vs. DevOps
GitOps und DevOps sind sehr ähnlich klingende Begriffe, die gleichermaßen wichtige Ähnlichkeiten und Unterschiede aufweisen.
DevOps ist eine Kombination aus den Wörtern Entwicklung (Development) und Betrieb (Operations). Es handelt sich um einen kollaborativen Ansatz für Aufgaben, die von den Teams für Anwendungsentwicklung und IT-Betrieb eines Unternehmens ausgeführt werden. Einige der Hauptziele von DevOps sind die Förderung der Zusammenarbeit zwischen Entwicklungs- und Betriebsteams und die Einführung programmierbarer Softwareentwicklungs-, Automatisierungs- und Infrastrukturbereitstellungspraktiken.
GitOps ist eine Untergruppe oder Erweiterung von DevOps, die speziell das Tool Git nutzt. Eines der Hauptziele von GitOps ist die Automatisierung des Entwicklungsprozesses und die Beschleunigung der Release-Kadenzen, was ein gemeinsames Ziel von DevOps ist. Allerdings ist GitOps ein Paradigma oder eine Technik, während DevOps eher eine Kultur oder Philosophie ist. GitOps ist an die Verwendung von Git und Kubernetes gebunden, während DevOps nicht an die Verwendung eines einzigen Tools gebunden ist.
Die Zukunft von GitOps
Einige sind der Meinung, dass GitOps die Zukunft von DevOps sein könnte, weil GitOps sowohl ein deklarativer als auch ein Cloud-nativer Ansatz für das Konfigurationsmanagement ist. GitOps ist sicherlich in Fällen nützlich, in denen die Verwendung von Versionskontrolle zur Verwaltung von Infrastruktur und Anwendungsbereitstellung ansonsten schwierig wäre.
GitOps ist jedoch möglicherweise nicht für jeden geeignet, da nicht jedes Unternehmen die Abhängigkeit von einem einzigen Tool oder auch nur die Verwendung von Git-Pull-Requests als den optimalen Arbeitsablauf für seine Infrastrukturen betrachtet.