↓ Zum Hauptinhalt springen

GitOps mit ArgoCD

·2344 Wörter·12 min
Ing. Gerhard Sulzberger
Autor
Ing. Gerhard Sulzberger

GitOps mit ArgoCD

Ursprünglich veröffentlicht auf LinkedIn am 2023-05-12.

Einführung
#

Im Jahr 2007, als ich anfing, in der Technologiebranche zu arbeiten, verließen sich IT-Administratoren oft auf Shell-Skripte, um ihre Workflows zu automatisieren. Virtualisierung war noch nicht so verbreitet, und Tools wie PXE-Boot und Bootstrap-Dateien wurden verwendet, um die Installation von Betriebssystemen auf mehreren Servern gleichzeitig zu automatisieren. Die Netzwerkebene wurde sehr oft ohne Automatisierung betrieben. Später gewann auch KVM an Beliebtheit und ermöglichte Administratoren, virtuelle Maschinen zu erstellen und zu verwalten. Als die Infrastruktur komplexer wurde, wurden Konfigurationsmanagement-Tools wie Chef und Ansible beliebt, die es Administratoren ermöglichten, Infrastruktur als Code zu definieren und Konfigurationsänderungen schnell und einfach auf mehreren Servern anzuwenden.

OpenNebula, eine Open-Source-Cloud-Computing-Plattform, entstand 2008 als beliebte Alternative zu kommerziellen Cloud-Anbietern. OpenNebula bot IT-Administratoren eine Möglichkeit, private Cloud-Infrastrukturen aufzubauen, was es Organisationen ermöglichte, die vollständige Kontrolle über ihre Daten zu behalten. OpenNebula bietet eine einfache und flexible Lösung zum Aufbau und zur Verwaltung virtualisierter Infrastrukturen in beiden, privaten und hybriden Cloud-Umgebungen.

Mit dem Aufstieg des Cloud Computing führte zur Entwicklung von Infrastructure-as-Code(IaC)-Tools wie Terraform und Packer. Terraform machte es möglich, Infrastruktur als Code zu definieren und Cloud-Ressourcen über mehrere Cloud-Anbieter hinweg zu verwalten, während Packer es IT-Administratoren ermöglichte, Maschinen-Images für verschiedene Cloud-Plattformen zu erstellen.

Mit dem Aufkommen der Containerisierung wandten sich IT-Administratoren Container-Orchestrierungstools wie Kubernetes zu. Kubernetes bot Funktionen wie automatische Skalierung, Lastverteilung und Selbstheilung, was es möglich machte, Container im großen Maßstab zu verwalten.

Um sensible Informationen wie Passwörter und API-Schlüssel zu verwalten, wandten sich IT-Administratoren Tools wie Vault zu. Vault ist ein Open-Source-Tool, das es IT-Administratoren ermöglicht, Geheimnisse sicher zu speichern und zu verwalten und sicherzustellen, dass sensible Informationen sicher aufbewahrt und nur für autorisierte Benutzer zugänglich sind.

Kubernetes-Operatoren wie cloudnative-pg und external-secrets-operator waren besonders hilfreich bei der Verwaltung von Kubernetes-Anwendungen und Geheimnissen, die in externen Systemen gespeichert sind. Der cloudnative-pg-Operator automatisiert die Verwaltung von PostgreSQL-Datenbanken, während der external-secrets-operator es IT-Administratoren ermöglicht, Geheimnisse zu verwalten, die in externen Systemen wie Vault gespeichert sind.

Schließlich haben IT-Administratoren GitOps-Workflows mit Tools wie ArgoCD übernommen, um ihre Infrastruktur als Code zu verwalten. Mit GitOps wird die gesamte Konfiguration in einem Git-Repository gespeichert, und ArgoCD ermöglicht es IT-Administratoren, ihre Infrastruktur als Code zu definieren und sie mit Git zu verwalten.

Zusammenfassend lässt sich sagen, dass der Aufbau und die Verwaltung von IT-Infrastrukturen in den letzten zwei Jahrzehnten komplexer geworden sind, aber das Aufkommen neuer Tools und Technologien hat es möglich gemacht, hoch effiziente, sichere und skalierbare Infrastrukturen aufzubauen. Von PXE und KVM bis hin zu OpenNebula und GitOps mussten sich IT-Administratoren an neue Tools und Technologien anpassen, um mit der sich ständig verändernden IT-Landschaft Schritt zu halten.

GitOps mit ArgoCD
#

GitOps ist ein moderner Ansatz zur Verwaltung von IT-Infrastrukturen, der die Verwendung von Git-Repositorys zur Speicherung und Verwaltung von Konfigurationen betont. Die Idee ist, alles, was mit Infrastruktur zu tun hat, als Code in einem Git-Repository zu speichern, einschließlich Konfigurationen, Richtlinien und sogar Anwendungscode. Dadurch können IT-Teams alle Aspekte ihrer Infrastruktur einfach verwalten und versionieren, was sie zuverlässiger, konsistenter und sicherer macht.

ArgoCD ist ein Open-Source-GitOps-Tool, das die Bereitstellung und Verwaltung von Kubernetes-Anwendungen erleichtert. ArgoCD kann verwendet werden, um die Bereitstellung von Anwendungen in Kubernetes-Clustern zu automatisieren, den Zustand der bereitgestellten Anwendungen zu überwachen und Änderungen bei Bedarf rückgängig zu machen.

Der Workflow beginnt mit der Erstellung eines Git-Repositorys, das alle Konfigurationsdateien für die Kubernetes-Infrastruktur enthält. Dieses Git-Repository wird dann mit ArgoCD verbunden, das so konfiguriert ist, dass es auf Änderungen im Repository achtet. Wann immer es eine Änderung gibt, stellt ArgoCD automatisch die neue Version der Infrastruktur in der Zielumgebung bereit.

Eines der Hauptmerkmale von ArgoCD ist das Konzept der ApplicationSets. ApplicationSets sind eine Möglichkeit, mehrere ähnliche Anwendungen mit einer einzigen Konfiguration bereitzustellen. Dies ist besonders nützlich, wenn Anwendungen in mehreren Umgebungen oder Clustern bereitgestellt werden, wobei jede Umgebung oder jeder Cluster eine leicht unterschiedliche Konfiguration erfordert. Mit ApplicationSets können IT-Teams eine einzelne Konfiguration definieren, die für jede Umgebung oder jeden Cluster angepasst werden kann, was das Verwalten und Bereitstellen mehrerer ähnlicher Anwendungen erleichtert.

ArgoCD bietet auch mehrere andere Funktionen, die das Verwalten und Bereitstellen von Kubernetes-Anwendungen erleichtern, darunter:

  • Rollouts: ArgoCD bietet eine integrierte Rollout-Funktion, die es IT-Teams ermöglicht, die Bereitstellung neuer Versionen von Anwendungen zu verwalten und sicherzustellen, dass Updates schrittweise und sicher ausgerollt werden.
  • Gesundheitsüberwachung: ArgoCD bietet Echtzeit-Überwachung der Gesundheit bereitgestellter Anwendungen, sodass IT-Teams Probleme schnell identifizieren und beheben können, sobald sie auftreten.
  • Automatisierte Bereitstellung: ArgoCD kann automatisch neue Versionen von Anwendungen bereitzustellen, sobald sie im Git-Repository verfügbar sind, und stellt sicher, dass die Infrastruktur immer auf dem neuesten Stand ist.

Insgesamt bietet ArgoCD ein leistungsstarkes und flexibles GitOps-Tool zur Verwaltung von Kubernetes-Anwendungen. Durch die Verwendung von ApplicationSets können IT-Teams mehrere ähnliche Anwendungen einfach bereitzustellen und verwalten, was das Verwalten großer und komplexer Infrastrukturen erleichtert. Mit seinen fortgeschrittenen Funktionen wie Rollouts und Gesundheitsüberwachung macht ArgoCD das Bereitstellen und Verwalten von Anwendungen mit Zuversicht einfach, in dem Wissen, dass sie immer auf dem neuesten Stand sind und reibungslos laufen.

Kustomize Overlays
#

Kustomize ist ein Tool für Kubernetes, mit dem Sie Ihre Kubernetes-Anwendungen durch die Verwendung deklarativer Konfigurationsdateien anpassen und konfigurieren können. Es wird für die Verwaltung komplexer Bereitstellungen verwendet, die eine Anpassung von Ressourcen in verschiedenen Umgebungen erfordern.

Kustomize verwendet eine einfache Verzeichnisstruktur, um Ihre Kubernetes-Ressourcen zu organisieren. Durch die Verwendung von Overlays und Patches kann es Änderungen an einer Basiskonfiguration vornehmen, ohne die Basis direkt zu ändern. Dadurch lässt sich die Wartung und Wiederverwendung gemeinsamer Konfigurationen vereinfachen, während weiterhin umgebungsspezifische Anpassungen möglich sind.

Einer der Hauptvorteile von Kustomize ist, dass Sie Konfigurationsdateien auf skalierbare und wartbare Weise verwalten können. Anstatt mehrere Kopien derselben Konfigurationsdateien für verschiedene Umgebungen zu erstellen, ermöglicht es Kustomize, eine einzelne Basiskonfiguration zu warten und Overlays für jede Umgebung zu erstellen. Dadurch wird die Menge an Duplikaten reduziert und die Verwaltung von Konfigurationsdateien erleichtert, wenn sie sich im Laufe der Zeit ändern.

Kustomize-Overlay-Verzeichnisstruktur für umgebungsspezifische Konfigurationen
Kustomize-Overlay für Umgebungen

Kustomize bietet auch eine einfache Möglichkeit, umgebungsspezifische Variablen und Geheimnisse zu verwalten. Durch die Verwendung von Kubernetes ConfigMaps und Secrets können Sie umgebungsspezifische Werte erstellen, die zur Laufzeit zur Anpassung Ihrer Anwendung verwendet werden können.

Ein weiterer Vorteil von Kustomize ist, dass es in andere Kubernetes-Tools integriert ist, wie z.B. kubectl. Das bedeutet, dass Sie Kustomize zusammen mit anderen Tools verwenden können, um Ihre Kubernetes-Ressourcen zu verwalten.

Insgesamt ist Kustomize ein leistungsstarkes Tool, das die Verwaltung von Kubernetes-Konfigurationen vereinfacht. Durch die Verwendung eines deklarativen Ansatzes für das Konfigurationsmanagement wird die Wartung und Skalierung Ihrer Kubernetes-Anwendungen erleichtert.

App of Apps
#

Das “App of Apps”-Muster ist ein Entwurfsmuster, das in Kubernetes verwendet wird, um komplexe Anwendungen und Umgebungen zu verwalten. Es ermöglicht Ihnen, mehrere verwandte Anwendungen oder Komponenten in eine einzige übergeordnete Anwendung zu organisieren, die als Ganzes verwaltet werden kann.

Die grundlegende Idee hinter dem App-of-Apps-Muster besteht darin, eine Anwendung der obersten Ebene zu erstellen, die für die Bereitstellung und Verwaltung mehrerer untergeordneter Anwendungen oder “Sub-Anwendungen” verantwortlich ist. Jede Sub-Anwendung kann eine komplexe Anwendung mit eigener Bereitstellung, Diensten und anderen Kubernetes-Ressourcen sein.

Durch die Verwendung des App-of-Apps-Musters können Sie Ihren gesamten Anwendungsstapel als einzelne Einheit verwalten. Dies erleichtert das Bereitstellen und Verwalten komplexer Anwendungen und Umgebungen, insbesondere in Fällen, in denen Sie viele voneinander abhängige Komponenten haben.

ArgoCD-Anwendungsressourcendefinition für GitOps-Bereitstellung

Visuelle Darstellung des ArgoCD-App-of-Apps-Musters
App-of-Apps-Muster

Geheimnisverwaltung
#

HashiCorp Vault ist ein Tool zum Verwalten von Geheimnissen und sensiblen Daten in modernen IT-Umgebungen. Es bietet eine sichere und zentralisierte Möglichkeit, Geheimnisse wie Passwörter, Verschlüsselungsschlüssel, API-Schlüssel und andere sensible Daten zu speichern, zuzugreifen und zu verwalten.

Das Hauptziel von Vault ist es, ein sicheres Speichersystem für Geheimnisse bereitzustellen und gleichzeitig fein abgestufte Zugriffskontrolle und Prüfungsfähigkeiten zu bieten. Vault verwendet verschiedene Verschlüsselungstechniken, wie Verschlüsselung im Ruhezustand und Verschlüsselung während der Übertragung, um die Sicherheit der verwalteten Daten zu gewährleisten. Es bietet auch eine Reihe von Zugriffskontrollfunktionen, wie z.B. rollenbasierte Zugriffskontrolle (RBAC), mit denen IT-Teams verwalten können, wer Zugriff auf welche Geheimnisse hat.

HashiCorp Vault UI, die Schnittstelle zur Geheimnisverwaltung und Versionierung zeigt
Verwalten und Versionieren von Geheimnissen mit Vault-UI

Vault bietet eine einfache API zum Zugriff und zur Verwaltung von Geheimnissen, was die Integration in andere Tools und Anwendungen erleichtert. IT-Teams können die API von Vault verwenden, um Geheimnisse programmgesteuert abzurufen und zu verwalten, sodass sie sichere und automatisierte Workflows aufbauen können.

Eines der Hauptmerkmale von Vault ist seine Fähigkeit, dynamische Geheimnisse zu generieren. Mit dynamischen Geheimnissen kann Vault temporäre Anmeldedaten für verschiedene Systeme und Dienste generieren und verwalten, wie z.B. Datenbanken, Cloud-Anbieter und SSH. Dadurch können IT-Teams automatisch Anmeldedaten für diese Systeme und Dienste generieren und rotieren, was das Risiko von Diebstahl und Missbrauch von Anmeldedaten verringert.

Insgesamt ist Vault ein leistungsstarkes und flexibles Tool zur Verwaltung von Geheimnissen in modernen IT-Umgebungen. Durch die Bereitstellung einer sicheren und zentralisierten Möglichkeit zur Verwaltung sensibler Daten ermöglicht Vault IT-Teams, sichere und automatisierte Workflows aufzubauen, während das Risiko von Datenverletzungen und Diebstahl von Anmeldedaten verringert wird.

Externe Geheimnisse innerhalb von Kubernetes
#

Der External Secrets Operator ist ein Kubernetes-Operator, der es dem Kubernetes-Cluster ermöglicht, sicher auf Geheimnisse zuzugreifen, die außerhalb des Clusters gespeichert sind, wie z.B. in HashiCorp Vault oder AWS Secrets Manager. Er vereinfacht den Prozess der Geheimnisverwaltung, indem er eine deklarative Möglichkeit bietet, externe Geheimniszuordnungen zu definieren, und Geheimnisse automatisch zwischen dem externen Speicher und Kubernetes synchronisiert.

Der External Secrets Operator verwendet die Kubernetes Custom Resource Definition (CRD), um externe Geheimnisse zu definieren. Diese CRDs beschreiben die Metadaten eines externen Geheimnisses, wie z.B. Name, Schlüssel-Wert-Paare und wo das Geheimnis gespeichert ist. Sobald diese CRDs erstellt sind, ruft der External Secrets Operator die Geheimnisse aus dem externen Speicher ab und speichert sie in einem Kubernetes-Geheimnis. Dadurch wird sichergestellt, dass die Geheimnisse für Kubernetes-Workloads zugänglich sind, ohne dass direkter Zugriff auf den externen Speicher erforderlich ist.

Kubernetes-Manifest für ExternalSecret Custom Resource Definition
Manifest zur Definition von ExternalSecret

Einer der Hauptvorteile des External Secrets Operators ist, dass er die Verwaltung von Geheimnissen vereinfacht. Er beseitigt die Notwendigkeit für Entwickler, Geheimnisse manuell zu verwalten, und bietet einen zentralen Ort zur Verwaltung und Prüfung von Geheimnissen. Zudem müssen Entwickler, da Geheimnisse extern verwaltet werden, keinen direkten Zugriff auf den Geheimnis-Speicher haben, was die Sicherheit verbessert und das Risiko von Geheimnis-Leaks verringert.

Ein weiterer Vorteil des External Secrets Operators ist, dass er sehr flexibel ist und leicht mit einer Vielzahl externer Geheimnis-Speicher integriert werden kann, einschließlich HashiCorp Vault, AWS Secrets Manager und Azure Key Vault. Dadurch können Kubernetes-Cluster sicher auf Geheimnisse zugreifen, die in verschiedenen Umgebungen gespeichert sind.

Insgesamt ist der External Secrets Operator ein leistungsstarkes Tool, das die Verwaltung von Geheimnissen in Kubernetes-Clustern vereinfacht. Durch die Fähigkeit von Kubernetes-Clustern, sicher auf externe Geheimnisse zuzugreifen, erleichtert er Entwicklern den Aufbau sicherer und skalierbarer Anwendungen.

Monitoring
#

Der Prometheus Operator ist ein Tool zum Verwalten und Bereitstellen von Prometheus-Instanz in Kubernetes-Clustern. Er vereinfacht den Prozess des Einrichtens, Konfigurierens und Skalierens von Prometheus und erleichtert das Überwachen von Kubernetes-Anwendungen und -Infrastrukturen.

Eine der wichtigsten Komponenten des Prometheus Operators ist kube-prometheus. Kube-prometheus ist ein Bündel von Kubernetes-Manifesten und Grafana-Dashboards, die verwendet werden, um Prometheus und Grafana in Kubernetes-Clustern bereitzustellen und zu konfigurieren. Es bietet eine Reihe von vorkonfigurierten Dashboards, die verwendet werden können, um Kubernetes-Komponenten wie Nodes, Pods und Services sowie die Gesundheit und Leistung von Kubernetes-Anwendungen zu überwachen.

Kube-prometheus umfasst Prometheus selbst, das für das Sammeln von Metrikdaten aus verschiedenen Quellen wie Kubernetes-API-Servern, Nodes und Anwendungen verantwortlich ist. Es umfasst auch Alertmanager, der verwendet wird, um Warnungen basierend auf den von Prometheus gesammelten Metriken zu verwalten und zu senden.

Zusätzlich umfasst kube-prometheus Grafana, das verwendet wird, um die von Prometheus gesammelten Metriken zu visualisieren und zu analysieren. Grafana bietet eine reichhaltige Reihe von Visualisierungsoptionen, einschließlich Diagrammen, Graphen und Dashboards, die Betreibern und Entwicklern helfen können, die Leistung und Gesundheit ihrer Kubernetes-Anwendungen und -Cluster zu verstehen.

Kube-prometheus umfasst auch eine Reihe von Kubernetes-Manifesten, die die verschiedenen Komponenten der Prometheus- und Grafana-Bereitstellungen definieren. Diese Manifeste werden verwendet, um die Bereitstellungen zu konfigurieren und anzupassen, um den Anforderungen des Kubernetes-Clusters gerecht zu werden.

Insgesamt ist kube-prometheus ein leistungsstarkes Tool, das das Einrichten und Verwalten von Prometheus und Grafana in Kubernetes-Clustern erleichtert. Es bietet eine Reihe von vorkonfigurierten Dashboards und Tools, die verwendet werden können, um Kubernetes-Anwendungen und -Infrastrukturen zu überwachen, was es Betreibern und Entwicklern erleichtert, Probleme zu beheben und die Leistung ihrer Kubernetes-Bereitstellungen zu optimieren.

Prometheus-Operator- und kube-prometheus-Überwachungsstapel-Architektur

Logs
#

Loki ist ein horizontal skalierbares, hochverfügbares, multi-mandantenfähiges Log-Aggregationssystem, das sehr kosteneffektiv entwickelt wurde. Es ermöglicht Benutzern, Log-Daten aus ihren Anwendungen und Diensten auf sehr effiziente und anpassbare Weise zu sammeln, zu speichern und abzufragen. Loki verwendet eine einzigartige Indizierungs- und Speicherstrategie, die es ermöglicht, schnell durch Logs zu suchen und diese abzurufen, was es zu einer idealen Lösung für die Verwaltung großer Mengen an Log-Daten in einer cloud-nativen Umgebung macht. Zudem integriert sich Loki nahtlos in andere beliebte Logging- und Überwachungstools wie Prometheus und Grafana.

Ich betreibe Loki seit einiger Zeit außerhalb von Kubernetes, eines meiner nächsten Projekte wird sein, herauszufinden, wie man loki-operator verwendet und in meine Kubernetes-Umgebungen integriert.

Fazit
#

Das Aufkommen von GitOps und Tools wie ArgoCD und Kustomize hat den Prozess der Verwaltung und Bereitstellung von Infrastruktur weiter vereinfacht und es Administratoren ermöglicht, komplexe Anwendungen und Umgebungen auf einfache und skalierbare Weise zu definieren und zu verwalten. Das App-of-Apps-Muster hat sich ebenfalls als leistungsstarke Methode zur Verwaltung komplexer Bereitstellungen herausgestellt und ermöglicht es Administratoren, gesamte Anwendungsstapel als einzelne Einheit zu definieren und zu verwalten.

Während all dieser Veränderungen ist die Rolle des IT-Administrators weiterhin von entscheidender Bedeutung. Während sich die Tools und Technologien weiterentwickelt haben, bleibt der Bedarf an qualifizierten Fachleuten, die komplexe IT-Umgebungen entwerfen, aufbauen und verwalten können, konstant. Wenn wir uns in eine zunehmend digitale und automatisierte Welt bewegen, wird die Rolle des IT-Administrators nur weiter an Bedeutung gewinnen.

Es ist sehr willkommen, wenn Sie Ihre Erfahrungen mit diesen Themen teilen möchten. Schreiben Sie einfach einen Kommentar oder eine Nachricht an mich.

Durch KI generiertes Kuhbild, das als Platzhalter im Artikel verwendet wird
KuhKI

Ja, einige Teile dieses Artikels wurden von KI geschrieben, ich bin Techniker und kein Schriftsteller. Und als praktischer IT-Admin/DevOps-Ingenieur mag ich es, Tools zu verwenden. ;-)

Links#

Es gibt viele Tutorials und Quellen zu diesen Themen. Vielleicht können einige dieser Links helfen, ein besseres Verständnis zu entwickeln.