Suchen

Argo CD und Git in Aktion Continuous Delivery in GitOps-Manier

Autor / Redakteur: Mirco Lang / Stephan Augsten

GitOps ist aktuell ein großes Thema – als Konzept aber eben reine Theorie. Schaut man sich aber mal ein konkretes Tool an, wird GitOps greifbar. Und dafür eignet sich die Open-Source-Software Argo CD sehr gut.

Firma zum Thema

Ein vollständig synchrones GitOps Repository unter Argo CD.
Ein vollständig synchrones GitOps Repository unter Argo CD.
(Bild: Lang / Argo CD)

Einen ausführlichen Einblick in das GitOps-Konzept haben wir bereits gegeben. Für diesen Artikel ist vor allem der technische Part relevant: GitOps stellt Git-Repositories in das Zentrum von Entwicklung einerseits und Continuous Delivery/Deployment (CD) andererseits.

Da es im Wesentlichen um Cloud-native Anwendungen geht, findet der CD-Part in einem Kubernetes-Cluster statt. Nun wird Kubernetes deklarativ über simple YAML-Dateien gesteuert – und diese werden aus dem Git-Repository bezogen.

Die Repo fungiert also gewissermaßen als Ausgabedatei für die Entwickler/Betreiber und als Eingabedatei für das Cluster. Und Argo CD setzt diesen Prozess klar strukturiert in die Praxis um.

Argo CD

Argo CD aktualisiert Cluster über ein Git-Repository – die Grundfunktion von GitOps.
Argo CD aktualisiert Cluster über ein Git-Repository – die Grundfunktion von GitOps.
(Bild: Lang / Argo CD)

Argo CD schaltet sich zwischen ein vorhandenes Git-Repo und ein vorhandenes Kubernetes-Cluster. Im Repo liegen YAML-Dateien, die unter anderem Deployments und Services beschreiben, die Anzahl der Pods bestimmen, Namensräume festlegen und so weiter. Repos lassen sich in Argo CD einfach über ihre URLs registrieren und anschließend per Klick synchronisieren.

Argo CD selbst läuft auch auf dem lokalen oder einem externen Kubernetes-Cluster. Zur Steuerung dienen das Kommandozeilen-Tool „argocd” und eine Weboberfläche. Letztere steht standardmäßig zur Verfügung, ist komfortabel und bekommt daher hier den Vorzug.

Über die GUI lassen sich anschließend relativ einfach „Apps” aus den Inhalten des Git-Repos anlegen. Wird nun eine neu angelegte App synchronisiert, triggert Argo CD das Update für das Cluster über die YAML-Dateien. Pods werden angelegt und verteilt, die Anwendung steht zur Nutzung bereit.

Was noch fehlt? Genau, die Anwendung! Die Anwendung selbst wird Kubernetes-üblich als Docker-Container aus einer Registry geladen und spielt im Argo-CD-Kontext im Grunde keine Rolle. Für einen kompletten GitOps-Workflow müssten natürlich auch die weiteren Bereiche auf Git-Repos zentriert werden, etwa Testing, Image-Erstellung, die Hauptentwicklung und so weiter.

Das ist also das recht simple Kerngeschäft von Argo CD: Konfigurationsdateien, also den Soll-Zustand, im Auge behalten und einen abweichenden Ist-Zustand entsprechend zu korrigieren. Natürlich lässt sich die Synchronisierung komplett automatisieren. Einige weitere Features:

  • Konfigurationsdateien als YAML, Kustomize, Helm, Ksonnet, Jsonnet
  • Verwaltung mehrerer Cluster
  • Single Sign On (OAuth2, LDAP, GitHub, Microsoft etc.)
  • Diff-Werkzeug
  • Webhook-Integration (GitHub, GitLab, BitBucket)
  • Automatisierungs-Token
  • Vorher-/Nachher-Scripting

Argo CD einrichten

Ein komplettes GitOps-Testlabor lässt sich nicht ohne weiteres aufsetzen, aber über das Test-Repo von Argo CD können Sie binnen einer Stunde verstehen, wie das Tool funktioniert. Allerdings unter einer Voraussetzung: Es muss ein Kubernetes-Cluster vorhanden sein.

Eine relativ simple Variante, um lokal mit einem richtigen Cluster zu testen, bietet das bereits von uns beleuchtete Tool Rancher. Das Schöne daran: Sie können direkt in der Weboberfläche von Rancher auch mit dem Standard-Kubernetes-Werkzeug „kubectl” arbeiten, ohne sich erst um Konfigurationsdateien und dergleichen kümmern zu müssen.

Öffnen Sie also einen Terminal mit eingerichtetem kubectl und installieren Sie Argo CD auf dem gewünschten Cluster über

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

Standardmäßig wird kein Port exponiert, daher müssen Sie zunächst für den (Web-)Zugriff auf Argo CD sorgen. Das offizielle Tutorial spricht an dieser Stelle von Auswahlmöglichkeiten, hier hat aber die Kombination zweier „Alternativen” zum Erfolg geführt: Zunächst wird der Service-Typ auf „Load Balancer” geändert, dann die Portweiterleitung aufgesetzt:

kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
kubectl port-forward svc/argocd-server -n argocd 8080:443

Bei der Installation ist automatisch ein Passwort für den Nutzer „admin” angelegt worden. Lesen Sie dieses mit folgendem Befehl aus:

kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2

Jetzt können Sie sich im Browser unter „localhost:8080” als Nutzer „admin” mit dem ausgelesenen Passwort an der Argo-CD-Oberfläche anmelden. Tipp: Wenn Sie die Shell der Rancher-GUI nutzen und keine Seite zu Gesicht bekommen, schauen Sie mal mit „ip a” nach, ob der aktuelle Rechner auch wirklich der „localhost” ist!

Test-Repo einrichten

In der Weboberfläche rufen Sie zunächst mal aus der Hauptnavigation links die Einstellungen auf und fügen dann unter „Repositories/Connect Repo Using HTTPS” folgende URL hinzu: https://github.com/argoproj/argocd-example-apps.git

Wechseln Sie dann wieder oben in den Bereich Apps, weiter geht es über „+ New App”. Im folgenden Dialog geben Sie nun einige Daten an – nicht erwähnte Felder können Sie ignorieren:

Application Name: guestbook
Project: default
Repository URL: https://github.com/argoproj/argocd-example-apps.git
Path: guestbook
Destination: in-cluster (https://kubernetes.default.svc)
Namespace: default

Eine neu aufgesetzte App in Argo CD.
Eine neu aufgesetzte App in Argo CD.
(Bild: Lang / Argo CD)

Erstellen Sie die App anschließend über „Create”. Auf der Apps-Startseite bekommen Sie nun eine Box zur App mit Statusdaten – weitere Details gibt es per Klick auf die Box. Über „Refresh” wird nun der Abgleich mit der Quelle/dem Repo durchgeführt – gibt es Abweichungen, ist die App „Out of Sync”. Über „Sync” wird das Cluster dann entsprechend der Konfigurationsdateien im Reop aktualisiert.

Das war nun der schnellste und einfachste Weg, um mit Argo CD interagieren zu können. Wenn Sie einen GitHub-Account haben, lohnt es sich, das Test-Repo mit der guestbook-Anwendung zunächst zu forken – Sie müssten dann nur oben in der URL „https://github.com/ARGOPROJ/argocd-example-apps.git” den Teil „ARGOPROJ” durch Ihren Nutzernamen ersetzen.

Anschließend können Sie mal einen ganz praktischen Anwendungsfall testen: Rufen Sie im Repo die Datei „/guestbook/guestbook-ui-deployment.yaml” und setzen Sie den Wert für die Anzahl der Pods von 1 auf 2:

replicas: 2

Committen – und gegebenenfalls pushen – Sie die Änderung und führen Sie in Argo CD einen „Refresh” durch – die App ist „Out of Sync”. Nach einer erneuten Synchronisierung sehen Sie einen weiteren Pod – die Aktualisierung kann dann einige Zeit dauern.

Sieht man Argo CD und somit GitOps hier mal in der Praxis, fällt schnell auf, wie simpel der Urgedanke dahinter ist – es werden lediglich Aktualisierungen von Konfigurationsdateien über ein Git-Repo im laufenden Betrieb eingespielt.

Argo CD erledigt hier in einem simplen Testaufbau alles sehr zuverlässig und ist recht einfach zu bedienen – dazu ein Beispiel: Natürlich taucht die guestbook-Anwendung auch in der Rancher-Oberfläche auf. Und da stellt sich doch die Frage, wie Argo CD reagiert, wenn die Anzahl der Pods hier erhöht wird, statt im Repo.

Die Erwartungshaltung wird erfüllt: Argo CD meldet umgehend „Out of Sync” und die Synchronisierung lässt ebenso umgehend den dritten Pod in der Rancher-Oberfläche verschwinden. Dass mehrere Verwaltungswerkzeuge so reibungslos zusammenwirken, ist nun wirklich nicht alltäglich.

Es lohnt sich, Argo CD im Auge zu behalten: GitOps-Erfinder Weaveworks hat Ende 2019 eine Integration von Argo CD mit dem hauseigenen Flux CD angekündigt. Wenn es „nur” um das automatische Bereitstellen von Anwendungen via Kubernetes geht, ist Argo CD aber auch in der jetzigen Form spannend.

(ID:46575773)

Über den Autor

 Mirco Lang

Mirco Lang

Freier Journalist & BSIler