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.
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.
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.
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.
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.