Flux
Flux ist ein Open-Source GitOps-Werkzeug, das dazu verwendet wird, Kubernetes-Cluster zu verwalten und Konfigurationen direkt aus Git-Repositories bereitzustellen. Im Gegensatz zu ArgoCD besticht fluxcd dadurch, dass alles via CLI Kommando gesteuert werden kann. Eine GUI wie ArgoCD bietet flux allerdings nicht.

Inhaltsverzeichnis
- Flux vs. ArgoCD
- Voraussetzungen
- Flux CLI installieren
- Prüfen ob Vorrausetzungen erfüllt sind:
- Namespace für Flux erstellen
- Bootstrap Flux mit einem privaten Forgejo-Repository
- Flux CRDs anwenden
- GitRepository und Kustomization konfigurieren
- Änderungen in Git pushen
- Debugging und Logs
- Flux Kommandos
- Kustomization.yaml erzeugen
- Links
Flux vs. ArgoCD
FluxCD und ArgoCD sind beide GitOps-Tools für die kontinuierliche Bereitstellung (CD) in Kubernetes-Clustern. Die Wahl zwischen ihnen hängt von den spezifischen Anforderungen deines Projekts ab. Hier ein Vergleich:
Merkmal | FluxCD | ArgoCD |
---|---|---|
Architektur | Agent-basiert, ohne UI | Web-UI + API + CLI |
Installation | Leichtgewichtig (nur Controller) | Eigenständige Applikation mit Web-Interface |
UI & Dashboard | Kein integriertes UI (extra Tool: Weave GitOps) | Integrierte, visuelle Web-UI |
Pull vs. Push | Rein Pull-basiert | Unterstützt Pull und optional Webhooks (Push) |
Helm & Kustomize | Unterstützt Helm, Kustomize & OCI | Helm, Kustomize & ApplicationSets |
Secret Management | SOPS, Sealed Secrets | Native Unterstützung für Kubernetes Secrets |
RBAC & Multi-Tenancy | Kein natives RBAC, Zugriff über Git-Repo geregelt | RBAC für UI und API-Zugriff |
Drift Detection | Automatische Korrektur von Abweichungen | Erkennung & manuelle oder automatische Korrektur |
Voraussetzungen
- Ein funktionierender Kubernetes-Cluster.
- kubectl installiert und konfiguriert, um mit dem Cluster zu kommunizieren.
- flux CLI installiert (Anleitung: Flux CLI installieren).
- Ein Git-Repository, in dem deine Kubernetes-Konfigurationen gespeichert werden sollen.
Flux CLI installieren
Falls du die flux CLI noch nicht installiert hast, kannst du das so machen:
curl -s https://fluxcd.io/install.sh | sudo bash
Unter Arch kann man die Flux CLI auch aus AUR repo installieren:
sudo pacman -S fluxcd
Prüfen, ob die Installation erfolgreich war:
flux --version
Prüfen ob Vorrausetzungen erfüllt sind:
flux check --pre
Namespace für Flux erstellen
Flux benötigt einen eigenen Namespace. Erstelle diesen Namespace:
kubectl create namespace flux-system
Bootstrap Flux mit einem privaten Forgejo-Repository
Da Forgejo eine eigene Git-Hosting-Lösung ist, wird der Befehl für den Bootstrap etwas anders konfiguriert. Du musst insbesondere sicherstellen, dass Flux Zugriff auf dein privates Forgejo-Repository hat.
Schritt 1: Access token erstellen
Generiere einen Access token und exportiere ihn in das Environment.
# Create a Gitea personal access token and export it as an env varexport GITEA_TOKEN=<my-token>
Schritt 2: Flux bootstrap ausführen
Führe den Bootstrap-Befehl mit deinem Gitea-Repository aus. Passe dabei die URL und Pfadangaben an:
flux bootstrap gitea \ --owner=murdoc \ --repository=flux \ --branch=main \ --hostname=git.bueraner.de \ --personal=true \ --token ${GITEA_TOKEN} \ --token-auth \ --path=clusters/production \
Erklärung der Parameter:
--owner
: Besitzer des Repos--repository
: Repository in dem Flux installiert werden soll--branch
: Der Branch, den Flux überwachen soll (z. B. main).--hostname
: URL der Forgejo Instanz--token
: Der Token als Zeichenkette--token-auth
: Nutze einen Authentifizierungs-Token--path
: Verzeichnis im Repository, das Flux für die Cluster-Konfiguration verwenden soll.
Weitere Details findest du hier: flux bootstrap gitea
Flux CRDs anwenden
kubectl apply -k github.com/fluxcd/flux2/manifests/install?ref=latest
GitRepository und Kustomization konfigurieren
Erstelle eine GitRepository
-Ressource, um dein Git-Repository mit Flux zu verbinden:
apiVersion: source.toolkit.fluxcd.io/v1beta2kind: GitRepositorymetadata: name: flux-system namespace: flux-systemspec: interval: 1m url: https://github.com/<GITHUB_USERNAME_OR_ORGANIZATION>/<REPOSITORY_NAME>.git ref: branch: main
Erstelle eine Kustomization-Ressource, um Flux anzuweisen, welche Konfigurationen angewendet werden sollen:
apiVersion: kustomize.toolkit.fluxcd.io/v1beta2kind: Kustomizationmetadata: name: flux-system namespace: flux-systemspec: interval: 1m path: "./clusters/<CLUSTER_NAME>" prune: true sourceRef: kind: GitRepository name: flux-system
Speichere diese Dateien im ./clusters/<CLUSTER_NAME>
Verzeichnis deines Git-Repositories.
Änderungen in Git pushen
Nachdem die oben genannten Konfigurationsdateien erstellt wurden, pushe sie in das Repository:
git add .git commit -m "chore: add initial Flux configuration"git push origin main```shell
Flux synchronisiert die Konfigurationen automatisch mit dem Cluster.
## Status überprüfen
Du kannst überprüfen, ob Flux korrekt funktioniert, indem du die folgenden Befehle ausführst:
* Zeige alle Flux-Komponenten an:
```shellflux get all -n flux-system
Überprüfe den Synchronisierungsstatus des Git-Repositories:
flux get sources git -n flux-system
Debugging und Logs
Falls Probleme auftreten, kannst du die Logs der Flux-Controller ansehen:
kubectl logs -n flux-system deploy/source-controllerkubectl logs -n flux-system deploy/kustomize-controller
Mit dieser Einrichtung kannst du nun deine Kubernetes-Cluster-Konfigurationen über Git verwalten. Alle Änderungen, die du in deinem Git-Repository vornimmst, werden von Flux automatisch auf den Cluster angewendet.
Flux Kommandos
Kommando | Beschreibung |
---|---|
flux check --pre | Führe pre-checks vor der Installation durch |
flux Logs | Flux Logs prüfen |
kubectl get helmrelease -A | HelmRelease Status |
flux get images all --all-namespace | Alle image Scan anzeigen lassen |
flux reconcile kustomization flux-system --with-source | Abgleich zwischen dem Repo und dem Cluster durchführen |
Kustomization.yaml erzeugen
Wenn der flux Cluster installiert wurde, führt flux automatisch den folgenden Befehl aus um sich eine Kustomization.yaml Datei zu erstellen. Um eine Kontrolle über die Ressourcen zu haben, erstelle ich mir einen Kustomization.yaml selbst mit dem folgenden Kommando.
cd clusters/productionkustomize create --autodetect --recursive