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.

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:

MerkmalFluxCDArgoCD
ArchitekturAgent-basiert, ohne UIWeb-UI + API + CLI
InstallationLeichtgewichtig (nur Controller)Eigenständige Applikation mit Web-Interface
UI & DashboardKein integriertes UI (extra Tool: Weave GitOps)Integrierte, visuelle Web-UI
Pull vs. PushRein Pull-basiertUnterstützt Pull und optional Webhooks (Push)
Helm & KustomizeUnterstützt Helm, Kustomize & OCIHelm, Kustomize & ApplicationSets
Secret ManagementSOPS, Sealed SecretsNative Unterstützung für Kubernetes Secrets
RBAC & Multi-TenancyKein natives RBAC, Zugriff über Git-Repo geregeltRBAC für UI und API-Zugriff
Drift DetectionAutomatische Korrektur von AbweichungenErkennung & manuelle oder automatische Korrektur

Voraussetzungen

Flux CLI installieren

Falls du die flux CLI noch nicht installiert hast, kannst du das so machen:

Terminal window
curl -s https://fluxcd.io/install.sh | sudo bash

Unter Arch kann man die Flux CLI auch aus AUR repo installieren:

Terminal window
sudo pacman -S fluxcd

Prüfen, ob die Installation erfolgreich war:

Terminal window
flux --version

Prüfen ob Vorrausetzungen erfüllt sind:

Terminal window
flux check --pre

Namespace für Flux erstellen

Flux benötigt einen eigenen Namespace. Erstelle diesen Namespace:

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

Terminal window
# Create a Gitea personal access token and export it as an env var
export 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:

Terminal window
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:

Weitere Details findest du hier: flux bootstrap gitea

Flux CRDs anwenden

Terminal window
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:

Terminal window
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: GitRepository
metadata:
name: flux-system
namespace: flux-system
spec:
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:

Terminal window
apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
kind: Kustomization
metadata:
name: flux-system
namespace: flux-system
spec:
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:

Terminal window
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:
```shell
flux get all -n flux-system

Überprüfe den Synchronisierungsstatus des Git-Repositories:

Terminal window
flux get sources git -n flux-system

Debugging und Logs

Falls Probleme auftreten, kannst du die Logs der Flux-Controller ansehen:

Terminal window
kubectl logs -n flux-system deploy/source-controller
kubectl 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

KommandoBeschreibung
flux check --preFühre pre-checks vor der Installation durch
flux LogsFlux Logs prüfen
kubectl get helmrelease -AHelmRelease Status
flux get images all --all-namespaceAlle image Scan anzeigen lassen
flux reconcile kustomization flux-system --with-sourceAbgleich 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.

Terminal window
cd clusters/production
kustomize create --autodetect --recursive
Gemacht mit ❤️ und Astro
© 2025
Impressum
Datenschutz