ArgoCD

In diesem Artikel lernen Sie die Grundlagen von ArgoCD.

Intro

ArgoCD ist ein deklaratives, GitOps-basiertes Continuous-Delivery-Tool für Kubernetes. Es automatisiert die Anwendungsbereitstellung und -verwaltung, indem es den gewünschten Zustand aus Git mit dem tatsächlichen Zustand im Cluster synchronisiert und so für Konsistenz sorgt. Zu den wichtigsten Funktionen gehören Selbstheilung, rollenbasierter Zugriff und Multi-Cluster-Unterstützung, die den Kubernetes-Betrieb vereinfachen. Weitere Informationen finden Sie hier: ArgoCD-Dokumentation.

Dieser Dienst befindet sich derzeit im Early Access. Kontaktieren Sie uns, um Zugang zu beantragen.

Installation

Die Installation von ArgoCD ist ganz einfach. Folgen Sie diesen Schritten, um zu beginnen:

1. Erstellen Sie einen Namespace für ArgoCD: 

kubectl create ns argocd

2. Wenden Sie das letzte stabile Manifest an:

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

Erste Anmeldung

Nach der Initialisierung wird ein Admin-Benutzer erstellt, dessen Passwort in einem Kubernetes-Geheimnis gespeichert ist. Um das Passwort abzurufen, verwenden Sie den folgenden Befehl:

kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath='{.data.password}' | base64 -d

Um auf die ArgoCD-Benutzeroberfläche zuzugreifen, können Sie den Dienst auf Ihren lokalen Rechner port-forwarden:

kubectl port-forward svc/argocd-server 8080:80 -n argocd

Jetzt können Sie auf die Benutzeroberfläche unter https://localhost:8080 zugreifen.

Melden Sie sich mit dem Benutzernamen  admin und dem aus dem Geheimnis abgeleiteten Passwort an.

Hinzufügen eines neuen Git-Repositorys

1. Melden Sie sich bei der ArgoCD-Webschnittstelle an.
2. Wenn Sie ein privates Repository hinzufügen:

a. Navigieren Sie zu „Einstellungen“ > „Repositories“.
b. Klicken Sie auf „+ Repositorium verbinden“.

3. Wir empfehlen aus Sicherheits- und Komfortgründen die Verbindung über SSH. Geben Sie die Details des Projektarchivs ein:

a. Name: Geben Sie dem Repository einen Namen.
b. Projekt: Wählen Sie ein Projekt aus.
c. Repository-URL: Beispiel: http://bitbucket.org:your-org/argocd-demo.git.
d. Privater SSH-Schlüssel: Fügen Sie die Daten Ihres privaten SSH-Schlüssels ein.
Schauen Sie in der Dokumentation Ihres Git-Anbieters nach, wie Sie einen SSH-Schlüssel erstellen und hinzufügen, falls nötig. Weitere Informationen zur Einrichtung privater Repositories finden Sie in der ArgoCD-Anleitung: Private Repositories - Argo CD - Declarative GitOps CD for Kubernetes

4. Klicken Sie auf „Verbinden“, überprüfen Sie, ob der Verbindungsstatus erfolgreich ist - wenn nicht, sollten Sie die Schritte oben nochmals  korrekt ausführen.

1c37c602-92cd-4681-8cd0-04d1472aff2d

Verwendung einer Manifest-Datei:

apiVersion: v1
kind: Secret
metadata:
  name: argo-demo-app-prod
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  url: ssh://git@bitbucket.org:22/xelonvdc/argocd-demo.git
  sshPrivateKey: |
      -----BEGIN OPENSSH PRIVATE KEY-----
      ...
      -----END OPENSSH PRIVATE KEY-----
  insecure: "true" # Do not perform a host key check for the server. Defaults to "false"
  enableLfs: "false" # Enable git-lfs for this repository. Defaults to "false"

Beachten Sie, dass Sie Ihren öffentlichen SSH-Schlüssel zu Ihrem Git-Repository hinzugefügt haben müssen. Es empfiehlt sich, für jeden Cluster ein neues Schlüsselpaar zu erzeugen.

Hinzufügen einer neuen Anwendung aus Git

Um eine neue Anwendung aus einem öffentlichen Git-Repository hinzuzufügen, können Sie in der Benutzeroberfläche einfach auf „+ New App“ klicken.

grafik-20240930-214231 (1)

Während die meisten Einstellungen in ArgoCD einfach sind, sind hier die wichtigsten Optionen, auf die Sie sich konzentrieren sollten:


ALLGEMEIN:

  • Name: Wählen Sie einen Namen, der zum Zweck Ihrer Anwendung passt. Zum Beispiel: argo-demo-app-prod.
  • Projektname: Wählen Sie in diesem Fall den Standard, es sei denn, Sie haben spezielle Projekte erstellt.
  • Sync-Richtlinie:
    • Manuelle Synchronisierung: Wählen Sie vorerst „Manuell“. Das bedeutet, dass Sie Änderungen manuell auf den Cluster anwenden müssen, obwohl ArgoCD Sie benachrichtigen wird, wenn der Cluster nicht mehr mit dem Git-Repository synchronisiert ist.
    • Automatische Synchronisierung: Wenn diese Option ausgewählt ist, wird ArgoCD automatisch Änderungen auf den Cluster anwenden, sobald sie im Repository entdeckt werden.
  • Synchronisations-Optionen:
    • Auto-Namensraum erstellen: Aktivieren Sie diese Option, damit ArgoCD den Namensraum automatisch anlegt, wenn er noch nicht existiert. Die anderen Sync-Optionen sind fortgeschrittener und können später nach Ihren Bedürfnissen konfiguriert werden.

QUELLE:

  • Repository-URL: Wenn Sie das Repository bereits früher konfiguriert haben, können Sie es einfach aus den verfügbaren Optionen auswählen.
  • Pfad: Wählen Sie den relativen Pfad zu Ihrer Anwendung. Zum Beispiel:
    cluster/demo-cluster/demo-app-prod/ArgoDemoApp

DESTINATION:

  • Cluster-URL: Verwenden Sie https://kubernetes.default.svc, d. h. die interne Kubernetes-Domäne, die auf den Kubernetes-API-Dienst (ClusterIP) im Standard-Namensraum verweist.
  • Namespace: Weisen Sie einen Namespace für die Bereitstellung zu. In diesem Beispiel können Sie demo-app-prod verwenden.

Verwendung einer Manifest-Datei:

Sie können ArgoCD-Anwendungen auch durch die Anwendung einer Manifestdatei konfigurieren. Da ArgoCD-Anwendungen benutzerdefinierte Ressourcendefinitionen (CRDs) sind, sind sie in der Standardinstallation enthalten.

Um die YAML-Konfiguration zu erhalten:
1. Navigieren Sie zum ArgoCD UI.
2. Klicken Sie auf „Als YAML bearbeiten“ in der Anwendung.
3. Es wird Ihnen die YAML-Datei angezeigt, die Sie ändern und zur deklarativen Konfiguration der Anwendung verwenden können.

grafik-20240930-220503

Manifest:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: argo-demo-app-prod
  namespace: argocd
spec:
  project: default
  source:
    repoURL: 'bitbucket.org:xelonvdc/argocd-demo.git'
    path: cluster/demo-cluster/demo-app-prod/ArgoDemoApp
    targetRevision: HEAD
  destination:
    server: 'https://kubernetes.default.svc'
    namespace: demo-app-prod
  syncPolicy:
    syncOptions:
      - CreateNamespace=true

Bereitstellung der ersten Anwendung

Für diese Demonstration werden wir einen einfachen Webserver und einen Load Balancer einsetzen. Befolgen Sie diese Schritte:

1. Bereiten Sie die Manifeste vor

a. Legen Sie die folgenden YAML-Dateien im richtigen Verzeichnis ab, je nach der Struktur, die Sie für Ihr ArgoCD-Repository verwenden.

b. Webserver.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: whoami
  labels:
    app: whoami
spec:
  replicas: 3
  selector:
    matchLabels:
      app: whoami
  template:
    metadata:
      labels:
        app: whoami
    spec:
      containers:
      - name: whoami
        image: traefik/whoami:latest
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"

c. Loadbalancer.yaml

apiVersion: v1
kind: Service
metadata:
  name: whoami-svc-lb
spec:
  selector:
    app: whoami
  ports:
    - port: 8002
      targetPort: 80
      protocol: TCP
  type: LoadBalancer

2. Änderungen in das Git-Repository übertragen
Sobald die YAML-Dateien fertig sind, schieben Sie sie in Ihr Git-Repository in den entsprechenden Ordner, der auf Ihrer Repository-Struktur basiert.

3. Synchronisierung der Änderungen in ArgoCD
Wenn Sie die automatische Synchronisierung für diese ArgoCD-Anwendung nicht aktiviert haben, müssen Sie die Änderungen manuell synchronisieren:

a. Gehen Sie zum ArgoCD Web-Interface.
b. Navigieren Sie zu „Anwendungen“.
c. Klicken Sie auf „Sync“ für die gewünschte Anwendung.
d. In dem neuen Fenster klicken Sie auf „Synchronisieren“, um die Änderungen zu 
übernehmen.

grafik-20240930-220325

Struktur des ArgoCD Git-Repositorys

Die Repository-Struktur in ArgoCD ist flexibel, aber hier ist ein empfohlener Aufbau:

  • Verwenden Sie ein eigenes Repository für alle Ihre ArgoCD-Konfigurationen.

  • Wenn Sie mehrere Kundinnen und Kunden oder Anwendungscluster verwalten, sollten Sie erwägen, das einzelne Mono-Repository in mehrere Repositories aufzuteilen. Auf diese Weise können alle Endkundinnen und -kunden eingeschränkten Zugriff auf ihre jeweiligen Repositories haben.

Beispiel für eine Verzeichnisstruktur:

<Repository>
    └── cluster
        └── <clustername>
            └── <namespace>
                └── <Applicationname>
                    └── <Manifestfiles>

Dieses Design mag für einfache Systeme zu komplex sein, ist aber skalierbar und einfach zu verwalten, wenn Ihre Infrastruktur wächst.