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 kubectl CLI 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:

Wechseln Sie in das Verzeichnis 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:

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:

http://127.0.0.1:8080

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 Anwendungs­konfiguration 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:

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:

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.

Quelle: vultr.com

Jetzt 200€ Guthaben sichern

Registrieren Sie sich jetzt in unserer ccloud³ und erhalten Sie 200€ Startguthaben für Ihr Projekt.

Das könnte Sie auch interessieren: