Was ist GitOps?
GitOps ist ein Konzept, das über einen deklarativen Ansatz Infrastrukturen und Anwendungen verwaltet und mit Git kontrolliert. Die Ziele dieser Idee sind automatisierte Abläufe, Zeitersparnis und eine bessere sowie sicherere Zusammenarbeit einzelner Teams an den Repositories.
Was ist GitOps?
Im Bereich der Software-Entwicklung spielt Automatisierung eine große Rolle. Dies ist einer der Gründe, warum DevOps ein solch durchschlagender Erfolg beschieden war. Die Basis hierfür ist die Idee der „Infrastructure as Code (IaC)“, die Infrastrukturen und Konfigurationen eines IT-Systems abbilden und damit reproduzierbar machen soll. GitOps ist eine logische Erweiterung dieses Ansatzes. Seit 2017 steuert die Open-Source-Software Git den gesamten Verwaltungsprozess einer Anwendung von der Administration bis zur letztendlichen Software-Entwicklung als „Single Source of Truth“. Dafür wird bei GitOps ein Zielzustand definiert und die Infrastruktur so lange überprüft und ggf. angepasst, bis dieser Zustand erreicht wird.
Weaveworks stellt dafür eine Reihe von Best Practices für die Vereinheitlichung der einzelnen Monitoring-Methoden für Container bereit. Diese lassen sich auf Kubernetes und andere Technologien mit Cloud-Background anwenden und so einfacher managen. Git geht dabei auf ein Versionskontrollsystem zurück, das Linus Torvald 2005 entwickelt hat. Dieses erlaubt es unterschiedlichen Entwicklerteams, gemeinsam und parallel an einem Projekt zu arbeiten. Dabei werden Änderungen erst nach gemeinsamer Abstimmung übernommen und ältere Entwicklungsstände bewahrt. Entwicklerinnen und Entwickler können gleichzeitig an unterschiedlichen Aspekten arbeiten und diese am Ende zusammenführen. Ein umfangreiches Git-Tutorial finden Sie in unserem Digital Guide.
Wie funktioniert GitOps in der Praxis?
Bei GitOps wird zunächst der Zielzustand eines Systems deklarativ beschrieben. Änderungen werden dann nach dem Prinzip von Git über Pull-Requests vorgenommen. Werden diese durchgeführt, ändern sie das Git-Repository. Wenn nun eine Pull-Anfrage in einem Umfeld mit GitOps gestellt wird, aktiviert sich der GitOps-Operator, erfasst den Commit und erfragt den aktuellen Zustand über Git. Diesen vergleicht er mit dem gewünschten Zustand im Repository. Sind die Änderungen abgesegnet, werden sie mit dem bisherigen Zustand zusammengeführt und direkt für die Live-Infrastruktur übernommen. Dies führt zu schnelleren und reibungslosen Abläufen, sorgt gleichzeitig aber auch für die Stabilität und Zuverlässigkeit des Systems.
Welche Prinzipien verfolgt GitOps?
Durch klar definierte und unabänderliche Prinzipien sollen GitOps-Workflows immer verlässlich funktionieren. Das betrifft zuerst die beschriebenen deklarativen Systeme, die bereits von anderen Cloud Natives bekannt sind. Die deklarative Beschreibung sorgt dafür, dass das gesamte System als Code behandelt und versioniert werden kann. Dies dient der Sicherheit und Stabilität des gesamten Systems, da auch Abweichungen von der Git-Version so sofort erkannt und gemeldet werden können. Zusätzlich sorgen SSH-Keys dafür, dass der Ursprung eines Codes immer nachverfolgt werden kann. Durch die vorherige Deklaration können Änderungen auch automatisiert und eventuelle Fehlerquellen frühzeitig entdeckt und behoben werden.
GitOps, DevOps und Continuous Delivery
Der primäre Ansatz von DevOps ist und war es, Entwicklung und Ausführung näher zusammenzubringen und so Arbeitsabläufe zu vereinfachen. Weil die einzelnen Teams enger zusammenarbeiten, verbessert sich das Endprodukt und Änderungen können schneller und präziser durchgeführt werden. Diesen Ansatz greift GitOps auf und wendet ihn konsequent auf den Ausführungsteil (Operations) an. GitOps konzentriert sich dabei voll und ganz auf Git, während DevOps und DevSecOps eher als grundsätzlicher Gedanke zu verstehen sind, der die Zusammenarbeit ehemals getrennter Bereiche vorantreibt und auf CI- und CD-Pipelines setzt. Beide Ansätze können allerdings auch miteinander verbunden werden.
Im Unterschied zu Continuous Delivery und Continuous Integration zieht GitOps alle benötigten Informationen nach dem Pull-Prinzip direkt von Git und verzichtet dabei auf das Deployment über einen CI-Server. Dieser kann zwar nach wie vor auch mit GitOps verwendet werden, ist allerdings nur noch für Aufbau und Tests zuständig. Mehr zum Thema Continuous Integration vs. Continuous Delivery vs. Continuous Deployment erfahren Sie im Digital Guide.
GitOps und Kubernetes
Kubernetes ist durch seine Vielseitigkeit die wahrscheinlich wichtigste Plattform für die Verwaltung containerbasierter Anwendungen. Auch Kubernetes funktioniert deklarativ und betrachtet den Zielzustand eines Systems. Daher kann Kubernetes mit GitOps sehr gut funktionieren und auch als Operator agieren. Wichtig ist dabei aber, dass Quellcode und Konfiguration zur besseren Übersicht und aus Sicherheitsgründen getrennt werden. Der Ist-Zustand kann dann in einem eigenen Git-Repository gespeichert werden. Wichtig ist außerdem der Einsatz der passenden Synchronisationstools, die unerlaubte Zugriffe und eventuelle Fehler verhindern.
Welche Tools gibt es für GitOps?
Mittlerweile gibt es für GitOps zahlreiche Tools, die die Automatisierung deutlich vereinfachen und verbessern sollen – z. B. Werkzeuge für die Arbeit mit Kubernetes, die als Operatoren fungieren und die Implementierung von GitOps übernehmen. Der bekannteste Operator (oder Custom Controller) ist Flux. Alternativen sind ArgoCD oder Fleet. Zu den wichtigsten Tools für mehr Sicherheit gehören SOPS von Mozilla und Sealed Secrets von Bitnami. Für den Einsatz mit Kubernetes Clustern eignen sich vor allem Cluster API oder Fleet. Insgesamt ist der Markt vergleichsweise groß, sodass es für beinahe jeden Einsatzzweck auch das passende Werkzeug gibt.
Vor- und Nachteile des Konzepts
Will man die Frage, wie gut und passend für die eigenen Zwecke GitOps wirklich ist, abschließend beantworten, lohnt ein Blick auf die Vor- und Nachteile des Konzepts.
Vorteile
- Produktivität: Durch die Automatisierung können deutlich mehr Änderungen in kürzerer Zeit durchgeführt werden. Entwicklerinnen und Entwickler treiben dadurch Projekte viel effektiver voran.
- Sicherheit und Stabilität: Durch die genauen Kontrollen werden Fehler schneller entdeckt und sogar automatisch behoben. Das trägt zu mehr Sicherheit und Stabilität bei. Durch belastbare Rollbacks ist die Wiederherstellung älterer Stände außerdem deutlich einfacher und der Pull-Ansatz verhindert ungewollte Komplikationen.
- Einheitlichkeit: Arbeitsabläufe werden durch GitOps vereinheitlicht. Das führt zu einer besseren und einfacheren Zusammenarbeit und erlaubt neuen Mitarbeitenden außerdem einen schnelleren Einstieg.
Nachteile
- Trennung von CI und CD: Durch die strikte Trennung von CI und CD beim GitOps-Ansatz kann es schwierig sein, Tests nach dem Deployment durchzuführen.
- Übersicht: Gerade bei der Arbeit mit mehreren Umgebungen kann es mit GitOps schnell unübersichtlich werden. Zahlreiche Repositories und Konfigurationen können zur Verwirrung beitragen.