Argo CD Installation und Nutzung auf Kubernetes
Argo CD ist ein Kubernetes-natives, deklaratives GitOps-Tool, das für die Verwaltung der Bereitstellung von groß angelegten Anwendungen auf Kubernetes entwickelt wurde. Im Vergleich zu anderen Continuous-Delivery-Werkzeugen ist es leichtgewichtig, effizient und benutzerorientiert. Es kann Quellcode direkt aus einem Git-Repository abrufen und in einem Kubernetes-Cluster bereitstellen. Argo CD unterstützt verschiedene Konfigurationsmanagement-Ansätze wie YAML, Kustomize, Jsonnet und Helm. Außerdem stellt es ein integriertes Web-Interface bereit, über das Synchronisationen und der Status der Anwendungen überwacht werden können.
In dieser Anleitung installieren Sie Argo CD in Ihrem Kubernetes-Cluster, greifen auf das Web-Interface zu und deployen Anwendungen über die Argo CD UI und das CLI.
Voraussetzungen
Bevor Sie beginnen, stellen Sie sicher, dass folgende Bedingungen erfüllt sind:
- Zugriff auf einen Kubernetes-Cluster mit mindestens drei Nodes.
- Eine Linux-basierte lokale oder Remote-Instanz zum Testen des Argo CD CLI-Tools.
- Das
kubectlCLI ist auf Ihrem lokalen Rechner installiert und konfiguriert. - Der Helm-Client ist auf Ihrem lokalen Rechner installiert.
- Ein Domainname steht für Ihre Argo CD-Installation zur Verfügung, zum Beispiel: argo.example.com.
Argo CD installieren
Erstellen Sie ein Namespace für Argo CD:
$ kubectl create namespace argocd
Erstellen Sie in Ihrem Home-Verzeichnis ein neues Verzeichnis für Argo CD:
$ mkdir ~/argocd
Wechseln Sie in das Verzeichnis argocd:
$ cd ~/argocd
Klonen Sie das Argo CD Helm-Repository:
$ git clone https://github.com/argoproj/argo-helm.git
Wechseln Sie in das Verzeichnis argo-cd aus dem geklonten Repository:
$ cd argo-helm/charts/argo-cd/
Aktualisieren Sie die Helm-Abhängigkeiten:
$ helm dependency up
Installieren Sie Argo CD im Namespace argocd mit Helm:
$ helm install argocd . -f values.yaml -n argocd
Nach erfolgreicher Installation zeigt Helm eine ähnliche Ausgabe:
NAME: argocd
LAST DEPLOYED: Sun Jun 11 18:13:17 2023
NAMESPACE: argocd
STATUS: deployed
...
Überprüfen Sie, ob Argo CD-Pods im Namespace argocd laufen:
$ kubectl get pods -n argocd
Die Ausgabe sollte Pods mit dem Präfix argocd- auflisten, die den verschiedenen Argo CD-Komponenten entsprechen.
Listen Sie die Services im Namespace auf, um laufende Endpunkte zu prüfen:
$ kubectl get services -n argocd
Beispielausgabe:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
...
argocd-server ClusterIP 10.101.247.167 80/TCP,443/TCP 53s
Der Service argocd-server stellt die Argo CD Web-Oberfläche bereit.
Zugriff auf die Argo CD Web-Oberfläche
Auch wenn Argo CD läuft, ist die Weboberfläche standardmäßig nicht von außerhalb des Clusters erreichbar. Sie können jedoch den Port des Services argocd-server auf einen Port Ihres lokalen Rechners weiterleiten, um die Oberfläche ohne externe Veröffentlichung zugänglich zu machen.
Rufen Sie zunächst das Standard-Admin-Passwort ab, das im Secret argocd-initial-admin-secret gespeichert ist:
$ kubectl get secrets -n argocd argocd-initial-admin-secret -o yaml
Die Ausgabe enthält ein verschlüsseltes Passwort, beispielsweise:
apiVersion: v1
data:
password: TU1DaWRNQVJXNWJ3S1FBNA==
kind: Secret
...
Kopieren Sie den verschlüsselten Wert und entschlüsseln Sie ihn:
$ echo TU1DaWRNQVJXNWJ3S1FBNA== | base64 --decode
Leiten Sie anschließend den Port 443 des argocd-server-Services auf den Port 8080 Ihrer lokalen Maschine weiter:
$ kubectl port-forward svc/argocd-server -n argocd 8080:443
Beispielausgabe:
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080
Dieser Befehl blockiert das aktuelle Terminal. Öffnen Sie im Browser die Adresse:
Geben Sie auf der Login-Seite admin als Benutzernamen ein, fügen Sie das entschlüsselte Passwort ein und klicken Sie auf Anmelden. Wenn die Zugangsdaten korrekt sind, werden Sie zum Argo CD Dashboard weitergeleitet.
Hinweis: Das Argo CD Dashboard ist nur so lange erreichbar, wie das Port-Forwarding aktiv ist. Drücken Sie Ctrl + C im Terminal, um die Port-Weiterleitung zu beenden.
Anwendungen über Dashboard und CLI-Tool erstellen und deployen
Öffnen Sie das Argo CD UI-Dashboard. Klicken Sie auf NEW APP, um den Bildschirm zur Anwendungskonfiguration zu öffnen.
- Allgemeine Konfiguration: Geben Sie den Anwendungsnamen, das Projekt und die Synchronisationsrichtlinie an.
- Source-Bereich: Tragen Sie Repository-URL, Revision und Pfad ein. Verwenden Sie beispielsweise das Repository argocd-example-apps und wählen Sie dort die Anwendung helm-guestbook im Feld Path.
- Destination-Bereich: Geben Sie die Cluster-URL und den Namespace ein. Klicken Sie anschließend auf CREATE, um die Anwendung bereitzustellen.
Nach der Bereitstellung erscheint die Argo CD Guestbook-Anwendung im Dashboard.
Überprüfen Sie den Status mit dem CLI:
$ argocd app get guestbook
Beispielausgabe:
Name: argocd/guestbook
Project: default
Server: https://kubernetes.default.svc
Namespace: argocd
URL: https://argocd.example.com/applications/guestbook
Repo: https://github.com/argoproj/argocd-example-apps.git
Target: HEAD
Path: helm-guestbook
SyncWindow: Sync Allowed
Sync Policy:
Sync Status: OutOfSync from HEAD (4773b9f)
Health Status: Missing
GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
Service argocd guestbook-helm-guestbook OutOfSync Missing
apps Deployment argocd guestbook-helm-guestbook OutOfSync Missing
Die Anwendung ist zwar bereitgestellt, wird jedoch als OutOfSync angezeigt. Um sie zu synchronisieren, führen Sie folgenden Befehl aus:
$ argocd app sync guestbook
Dieser Befehl lädt die erforderlichen Manifeste aus dem Repository und wendet sie mit kubectl an. Überprüfen Sie anschließend im Argo CD Dashboard den Gesundheitsstatus Ihrer Anwendung. Klicken Sie auf den Eintrag, um weitere Details anzuzeigen.
Argo CD mit TLS-Verschlüsselung absichern
In diesem Abschnitt wird erläutert, wie Sie Ihren Argo CD-Server über einen Nginx Ingress-Controller mit TLS-Verschlüsselung bereitstellen.
Installieren Sie den Nginx Ingress-Controller im Cluster:
$ helm install my-ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace
Dies installiert den Nginx Ingress-Controller im Namespace ingress-nginx und benennt die Ressourcen mit dem Präfix my-ingress-nginx-.
Überprüfen Sie die Ingress-Services, um die LoadBalancer-IP-Adresse zu erhalten:
$ kubectl get services -n ingress-nginx
Beispielausgabe:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-ingress-nginx-controller LoadBalancer 10.97.77.219 192.0.2.10 80:31808/TCP,443:30834/TCP 5m50s
my-ingress-nginx-controller-admission ClusterIP 10.108.64.48 443/TCP 5m50s
Notieren Sie den Wert von EXTERNAL-IP des Services my-ingress-nginx-controller und erstellen Sie einen DNS-A-Record für Ihre Domain, zum Beispiel argo.example.com.
Hinweis: Es kann einige Zeit dauern, bis der Service eine externe IP erhält. Solange wird der Wert als <pending> angezeigt.
Installieren Sie nun cert-manager:
$ kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.17.2/cert-manager.yaml
Damit wird die Version 1.17.2 von cert-manager im Namespace cert-manager installiert. Prüfen Sie auf der offiziellen Release-Seite, ob eine neuere Version verfügbar ist.
Erstellen Sie ein Manifest für eine Issuer-Ressource:
$ nano issuer.yaml
Fügen Sie folgenden Inhalt ein:
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: tls-certificate-issuer
namespace: default
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: admin@example.com
privateKeySecretRef:
name: letsencrypt-private-key
solvers:
- http01:
ingress:
class: nginx
Ersetzen Sie admin@example.com durch Ihre eigene E-Mail-Adresse, sonst funktioniert der Issuer nicht. Speichern und schließen Sie die Datei.
Erstellen Sie nun ein Manifest für die Ingress-Ressource des Services argocd-server:
$ nano ingress.yaml
Fügen Sie folgende Konfiguration hinzu:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-argocd
namespace: argocd
annotations:
cert-manager.io/issuer: tls-certificate-issuer
spec:
ingressClassName: nginx
rules:
- host: argo.example.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: argocd-server
port:
number: 80
tls:
- hosts:
- argo.example.com
secretName: argocd-tls
Speichern und schließen Sie die Datei.
Überprüfen Sie den Status des TLS-Zertifikats:
$ kubectl get certificate -n argocd
Beispielausgabe:
NAME READY SECRET AGE
argocd-tls False argocd-tls 5m43s
Nach einiger Zeit wechselt der Status auf True.
Öffnen Sie Ihren Browser und rufen Sie https://argo.example.com auf, um die Konfiguration zu überprüfen.
Fazit
Sie haben Argo CD erfolgreich in einem Kubernetes-Cluster installiert und gelernt, wie Sie Anwendungen über die Argo CD UI, das CLI und YAML-Manifeste bereitstellen. Weitere Informationen finden Sie in der offiziellen Argo CD-Dokumentation.


