Einrichten von Argo CD in einem k3s-Cluster

Nachdem wir Vegard S. Hagens Artikel “Argo CD Kustomize with Helm” gelesen und entschieden haben, dass ihre Lösung nicht für unser Cluster geeignet ist, haben wir uns direkt in den Argo CD-Standardleitfaden “Getting started” gestürzt. Jetzt führen wir Euch durch den Einrichtungsvorgang von Argo CD auf
k3s und
Cilium, ausgehend vom Kapitel “Setup Certificate Manager with Cloudflare” unseres neuesten Beitrags “Setting up Kubernetes with Cilium and Cloudflare”. In genau diesem kürzlichen Beitrag haben wir auch
Keel am Ende aufgesetzt, aber dieser Schritt wird jetzt überflüssig, da wir Argo CD verwenden, um den neuesten Stand der Technik aus jedem
GitHub-Repository zu beziehen. Viel Spaß beim Lesen!
Wir gehen davon aus, dass Ihr unseren anderen Blogbeitrag befolgt habt.
Bevor wir beginnen können, müssen wir sicherstellen, dass kubectl
installiert ist, wir eine Kubeconfig-Datei haben (k3s speichert diese Datei hier:
flannel-backend: "none"disable-kube-proxy: truedisable-network-policy: truecluster-init: truedisable: - servicelb - traefik
) und CoreDNS (überprüft, ob CoreDNS vorhanden ist, indem Ihr diesen
kubectl get pods -n kube-system -l k8s-app=kube-dns
Befehl ausführt).
Zuerst wenden wir alle notwendigen Dienste, Deployments und viele andere verschiedene Kubernetes-Ressourcen an, indem wir Folgendes ausführen:
kubectl create namespace argocdkubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Zusätzlich benötigen wir ein Zertifikat:
apiVersion: cert-manager.io/v1kind: Certificatemetadata: name: argocd namespace: argocdspec: secretName: argocd issuerRef: name: acme-issuer kind: ClusterIssuer dnsNames: - "argo-cd.trueberryless.org"
Wendet diese Ressource an, indem Ihr kubectl apply -f certificate.yaml
ausführt.
Außerdem benötigen wir einen Ingress-Controller, der von Cilium verwaltet wird:
apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: argocd-ingress namespace: argocdspec: rules: - host: argo-cd.trueberryless.org http: paths: - path: / pathType: Prefix backend: service: name: argocd-server port: number: 80
tls: - hosts: - argo-cd.trueberryless.org secretName: argocd
Wendet diese Ressource an, indem Ihr kubectl apply -f argocd-ingress.yaml
ausführt.
Mit dem Zertifikat ist die Verbindung zwischen dem Client und dem Server gesichert. Allerdings gibt es immer noch ein selbstsigniertes Zertifikat innerhalb der Argo CD-Dienste, das wir nicht unbedingt benötigen. Wir können daher die Sicherheit des Argo CD-Servers deaktivieren, indem wir die Eigenschaft
server.insecure
bearbeiten.
Um dies zu tun, führen wir zuerst diesen Befehl aus:
kubectl edit cm argocd-cmd-params-cm -n argocd
der hoffentlich eine Datei in vim oder neovim öffnet (alles andere wäre aus unserer Sicht unangenehm, LOL). Die Datei sollte wie folgt aussehen:
# Please edit the object below. Lines beginning with a '#' will be ignored,# and an empty file will abort the edit. If an error occurs while saving this file will be# reopened with the relevant failures.#apiVersion: v1data: server.insecure: "true"kind: ConfigMapmetadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"v1","kind":"ConfigMap","metadata":{"annotations":{},"labels":{"app.kubernetes.io/name":"argocd-cmd-params-cm","app.kubernetes.io/part-of":"argocd"},"name":"arg creationTimestamp: "2024-07-27T11:15:28Z" labels: app.kubernetes.io/name: argocd-cmd-params-cm app.kubernetes.io/part-of: argocd name: argocd-cmd-params-cm namespace: argocd resourceVersion: "239710156" uid: 5f53d26b-3adf-4ed9-9807-c3da847335a2data: server.insecure: "true"
Die letzten beiden Zeilen werden wahrscheinlich zunächst nicht vorhanden sein, aber genau diese Einstellung möchten wir erreichen. Fügt diese beiden Zeilen (oben markiert) hinzu und speichert die Datei (Esc
→ :wq
, wenn Ihr cool seid).
Startet den Argo CD-Server neu, indem Ihr diesen Befehl ausführt, und wartet, bis der Rollout abgeschlossen ist:
kubectl rollout restart deploy argocd-server -n argocdkubectl rollout status deploy argocd-server -n argocd
Nach all diesen Schritten sollten wir die Benutzeroberfläche unter https://argo-cd.trueberryless.org
sehen (passwortgeschützt).
Die Anmeldedaten der Argo CD-Benutzeroberfläche bestehen aus einem Benutzer und einem Passwort. Der Benutzer ist immer admin
, und Ihr könnt Euer Passwort abrufen, indem Ihr Folgendes ausführt:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
Um in Argo CD eine neue Anwendung zu erstellen (entweder über die Benutzeroberfläche oder die CLI — wir verwenden die Benutzeroberfläche, da wir die CLI nicht eingerichtet haben), müssen wir das Git-Repository vorbereiten. Weil das Repository die einzige Quelle der Wahrheit ist, definieren wir hier auch alle Kubernetes-Ressourcen, die von Argo CD erstellt werden sollen.
Wir empfehlen, einen neuen Ordner im Git-Repository zu erstellen, der etwas wie manifest
heißt. In diesem Ordner legen wir ein paar Dateien an:
-
certificate.yaml
:apiVersion: cert-manager.io/v1kind: Certificatemetadata:name: mutanuqnamespace: mutanuqspec:secretName: mutanuqissuerRef:name: acme-issuerkind: ClusterIssuerdnsNames:- "mutanuq.trueberryless.org" -
deployment.yaml
:apiVersion: apps/v1kind: Deploymentmetadata:name: mutanuqnamespace: mutanuqlabels:app: mutanuqspec:replicas: 3selector:matchLabels:app: mutanuqtemplate:metadata:labels:app: mutanuqspec:containers:- name: mutanuqimage: "trueberryless/mutanuq"imagePullPolicy: Always -
service.yaml
:apiVersion: v1kind: Servicemetadata:name: mutanuqnamespace: mutanuqannotations:cert-manager.io/issuer: acme-issuerspec:selector:app: mutanuqports:- name: httpport: 80 -
ingress.yaml
:apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: mutanuqnamespace: mutanuqspec:rules:- host: mutanuq.trueberryless.orghttp:paths:- path: /pathType: Prefixbackend:service:name: mutanuqport:number: 80tls:- hosts:- mutanuq.trueberryless.orgsecretName: mutanuq
Diese Dateien sind im Grunde die gleichen Dateien, die im anderen Beitrag erwähnt wurden, jedoch in vier Dateien aufgeteilt, da dies uns den Vorteil gibt, das Manifest von GitHub Actions aus zu manipulieren. Aber der Reihe nach, im nächsten Beitrag erfahrt Ihr, wie Ihr das Manifest mit GitHub Actions einrichtet.
Ihr werdet wahrscheinlich den großen NEW APP
-Button in der Benutzeroberfläche von Argo CD sehen. Klickt darauf und erstellt eine neue Anwendung mit den folgenden angepassten Eigenschaften:
- Anwendungsname:
mutanuq
- Projektname:
default
- Sync-Policy: Mehr darüber erfahrt Ihr in diesem Beitrag / lasst es vorerst auf
Manuell
- Repository-URL:
https://github.com/trueberryless-org/mutanuq
- Revision:
HEAD
- Pfad:
manifest
- Cluster-URL:
https://kubernetes.default.svc
- Namespace:
mutanuq
Optional — wenn Ihr die CLI installiert habt — könnt Ihr diesen Befehl für denselben Output ausführen:
argocd app create mutanuq \ --project default \ --repo https://github.com/trueberryless-org/mutanuq \ --revision HEAD \ --path manifest \ --dest-server https://kubernetes.default.svc \ --dest-namespace mutanuq
Nun sollten Sie hoffentlich sehen, dass Ihre Website in der Benutzeroberfläche bereitgestellt wird. Dieser Vorgang kann einige Zeit in Anspruch nehmen, da beispielsweise die Zertifikatsanforderung genehmigt werden muss. Eine gesunde Anwendung sollte in etwa so aussehen:
Herzlichen Glückwunsch, Sie haben Argo CD erfolgreich auf einem
k3s-Cluster eingerichtet! Sie haben sich eine Kaffeepause verdient. Genießen Sie eine wohlverdiente Tasse, und wenn Sie mir virtuell einen Kaffee ausgeben möchten, können Sie gerne meine Arbeit auf Ko-fi unterstützen. Vielen Dank!
Bleiben Sie dran für unseren nächsten Blog, in dem beschrieben wird, wie Sie ein GitHub-Repository einrichten, das anschließend über Argo CD bereitgestellt werden kann.