OMNI52
Flux Cheatsheet OMNI52™ GmbH

Flux
auf einem Blatt.

Dichte Referenz für Senior Platform Engineers und SREs zu Flux, dem CNCF-graduated GitOps-Werkzeug für Kubernetes. GitOps-Toolkit, Bootstrap, Kustomization, HelmRelease, Image Automation, Multi-Tenancy, SOPS-Secrets, Diagnose und Anti-Patterns. Keine Einsteiger-Folien.

Vorschau (2 Seiten A4 quer + Brand-Rückseite)

Flux Cheatsheet Seite 1: GitOps-Toolkit, Bootstrap, Sources, Kustomization
Flux Cheatsheet Seite 2: HelmRelease, Image Automation, Multi-Tenancy, SOPS, Diagnose, Anti-Patterns

PDF herunterladen

Direkter Download, keine Mail-Adresse nötig. CC BY-SA 4.0 — kopieren, drucken, weiterverteilen ist ausdrücklich erlaubt, solange die Quellenangabe sichtbar bleibt.

Flux Cheatsheet (PDF, ~100 KB)

Was drin steht

GitOps-Toolkit

Pull statt Push, Controller-Landschaft (source, kustomize, helm, notification, image-*) mit allen CRDs, flux bootstrap als idempotenter Install- und Upgrade-Pfad.

Sources

GitRepository, OCIRepository (inkl. cosign/notation-Verify), HelmRepository (HTTP/S und OCI), Bucket. ref per branch/tag/semver/commit/digest.

Kustomization

path, prune, dependsOn, wait/healthChecks, retryInterval, serviceAccountName, targetNamespace, postBuild.substituteFrom für cluster-spezifische Werte.

HelmRelease

Chart-Referenz via sourceRef/chartRef, SemVer-Ranges als kontrolliertes Auto-Update, install/upgrade-Remediation, driftDetection, Helm-Tests.

Automation & Tenancy

ImageRepository/ImagePolicy/ImageUpdateAutomation mit Setters-Markern. Multi-Tenancy-Lockdown: no-cross-namespace-refs + Default-ServiceAccount.

Secrets & Diagnose

SOPS/age-Verschlüsselung im Repo, Decryption im kustomize-controller. flux check/get/trace/events/logs, suspend/resume. Anti-Patterns aus der Praxis.

Cheatsheet im Volltext

Derselbe Inhalt wie im PDF — zum Mitlesen, Durchsuchen und direkten Kopieren der YAML-Snippets. Stand: Flux v2.9 (Edition 2026.07).

Architektur & GitOps-Toolkit

Pull statt Push

Flux zieht den deklarierten Zustand aus Git, OCI-Registries oder S3-Buckets und wendet ihn kontinuierlich an. Quelle = Wahrheit: was nicht im Repo steht, gehört nicht in den Cluster. Jede Ressource trägt ihr eigenes interval; Änderungen laufen über Git-Push, nicht über kubectl.

Controller & CRDs

source-controller: GitRepository, OCIRepository, HelmRepository, HelmChart, Bucket. kustomize-controller: Kustomization (inkl. SOPS-Decryption). helm-controller: HelmRelease.

notification-controller: Provider, Alert, Receiver (Webhooks). image-reflector-/image-automation-controller: ImageRepository, ImagePolicy, ImageUpdateAutomation.

flux check              # Prereqs + Controller-Status
flux get all -A         # Status aller Flux-Ressourcen
kubectl get fluxcd -A   # alle Flux-CRs (Resource-Kategorie)

Bootstrap

flux bootstrap

Installiert die Controller nach flux-system, pusht die eigenen Manifeste unter --path ins Repo und synct sich ab dann selbst. Idempotent: erneuter Lauf mit gleichen Argumenten ist der Upgrade-Pfad. Danach läuft jede Änderung am Cluster — inkl. Flux-Upgrades — per Git-Push.

export GITHUB_TOKEN=<pat>
flux bootstrap github \
  --owner=example-org --repository=fleet \
  --branch=main --path=clusters/prod \
  --token-auth

Repo-Layout pro Cluster

--path=clusters/<name> gibt jedem Cluster einen eigenen Einstiegspunkt im selben Repo. Infrastruktur (CRDs, Operatoren, Ingress) und Apps als getrennte Kustomizations verketten — dependsOn erzwingt die Reihenfolge.

Sources

GitRepository & OCIRepository

url + interval + ref: Git per branch, tag, semver oder commit; OCI per tag, semver oder digest. Auth via secretRef, tokenlos via provider (z.B. github, azure). OCIRepository liefert Manifeste als OCI-Artefakt inkl. Signatur-Prüfung (verify: cosign/notation).

HelmRepository & Bucket

HelmRepository: klassischer HTTP/S-Index oder type: oci für Charts aus OCI-Registries. Bucket: S3-kompatibler Objektspeicher als Quelle. Jede Source produziert ein versioniertes Artefakt, auf das Kustomization/HelmRelease per sourceRef zeigen.

apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata: {name: platform, namespace: flux-system}
spec:
  interval: 1m
  url: https://github.com/example-org/platform
  ref: {branch: main}   # oder tag/semver/commit
  secretRef: {name: git-auth}
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: OCIRepository
metadata: {name: manifests, namespace: flux-system}
spec:
  interval: 5m
  url: oci://ghcr.io/example-org/manifests
  ref: {semver: ">=1.0.0 <2.0.0"}

Kustomization

Spec-Kern

path: Verzeichnis im Source-Artefakt. prune: true: Garbage-Collection gelöschter Manifeste. sourceRef: GitRepository, OCIRepository oder Bucket.

retryInterval steuert Fehler-Retries getrennt vom regulären interval; serviceAccountName erzwingt Impersonation (RBAC-Grenze), targetNamespace zwingt alle Objekte in einen Namespace.

apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata: {name: apps, namespace: flux-system}
spec:
  interval: 10m
  retryInterval: 2m
  path: ./apps/production
  prune: true            # Garbage Collection
  sourceRef: {kind: GitRepository, name: platform}
  dependsOn:
    - name: infrastructure
  wait: true             # Health aller Objekte
  timeout: 5m
  postBuild:
    substituteFrom:
      - kind: ConfigMap
        name: cluster-vars

Health & Reihenfolge

wait: true prüft die Health aller applizierten Objekte, healthChecks gezielt einzelne (Deployment, HelmRelease, …). dependsOn gated nachgelagerte Kustomizations, bis die Abhängigkeit Ready ist — Standard-Muster: infrastructure vor apps.

postBuild-Substitution

postBuild.substituteFrom ersetzt ${var}-Platzhalter aus ConfigMaps/Secrets — cluster-spezifische Werte (Domain, Zone, Replicas) ohne Overlay-Wildwuchs. optional: true toleriert fehlende Quellen.

HelmRelease

Chart-Referenz

chart.spec + sourceRef auf HelmRepository/GitRepository — oder chartRef direkt auf OCIRepository/HelmChart. version nimmt SemVer-Ranges (6.x, >=0.2.0 <1.0.0): Flux wählt automatisch die höchste passende Version — kontrolliertes Auto-Update pro Range.

apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata: {name: podinfo, namespace: apps}
spec:
  interval: 30m
  chart:
    spec:
      chart: podinfo
      version: ">=6.0.0 <7.0.0"  # SemVer-Range
      sourceRef:
        kind: HelmRepository
        name: podinfo
        namespace: flux-system
  install:
    remediation: {retries: 3}
  upgrade:
    remediation: {retries: 3, strategy: rollback}
  driftDetection: {mode: enabled}
  valuesFrom:
    - kind: Secret
      name: podinfo-values
  values:
    replicaCount: 2

Remediation & Drift

install.remediation.retries / upgrade.remediation.retries: automatische Wiederholung fehlgeschlagener Releases; strategy: rollback oder uninstall. driftDetection.mode: enabled erkennt und korrigiert manuelle Änderungen am Release-Inventar (warn meldet nur). test.enable führt Helm-Tests nach Install/Upgrade aus.

Reconciliation & Betrieb

Intervalle & Trigger

Jede Ressource reconciled periodisch (interval); flux reconcile … --with-source stösst sofort an, inklusive frischem Source-Fetch. Push statt Polling: Receiver (notification-controller) nimmt Webhooks von GitHub/GitLab an; Provider/Alert melden Events an Chat- oder Webhook-Endpunkte.

suspend / resume

flux suspend hält die Reconciliation an (Incident-Freeze, Wartungsfenster), flux resume nimmt sie wieder auf. Suspendierte Objekte driften still — Freeze immer zeitlich begrenzen.

flux reconcile kustomization apps --with-source
flux reconcile source git platform
flux suspend kustomization apps
flux resume kustomization apps
flux get kustomizations --watch

Image Automation

Drei CRDs

ImageRepository scannt Registry-Tags, ImagePolicy wählt den Ziel-Tag (semver.range, alphabetisch/numerisch, filterTags mit Pattern/Extract), ImageUpdateAutomation schreibt den neuen Tag per Commit zurück ins Repo (Strategie: Setters-Marker im Manifest).

apiVersion: image.toolkit.fluxcd.io/v1
kind: ImagePolicy
metadata: {name: podinfo, namespace: flux-system}
spec:
  imageRepositoryRef: {name: podinfo}
  policy:
    semver: {range: 6.x}
# Setters-Marker im Ziel-Manifest:
#  image: ghcr.io/example-org/podinfo:6.9.0 \
#    # {"$imagepolicy": "flux-system:podinfo"}

Multi-Tenancy

Lockdown: Flags am Controller

--no-cross-namespace-refs=true auf kustomize-, helm-, notification- und image-Controllern: Tenants können keine Sources ausserhalb ihres Namespaces referenzieren. --default-service-account=default: Kustomizations/HelmReleases ohne serviceAccountName laufen mit dem unprivilegierten Default-Account des Tenant-Namespaces — Rechte kommen ausschliesslich per RBAC.

# clusters/prod/flux-system/kustomization.yaml
patches:
  - patch: |
      - op: add
        path: /spec/template/spec/containers/0/args/-
        value: --no-cross-namespace-refs=true
    target:
      kind: Deployment
      name: "(kustomize-controller|helm-controller|notification-controller|image-reflector-controller|image-automation-controller)"

Secrets: SOPS & age

Verschlüsselt ins Repo

Secrets liegen SOPS-verschlüsselt im Git; der kustomize-controller entschlüsselt beim Apply (decryption.provider: sops). Private Key als Secret sops-age in flux-system (Key-Datei muss auf .agekey enden). Nur data/stringData verschlüsseln — die Manifest-Struktur bleibt diff-bar.

age-keygen -o age.agekey
cat age.agekey | kubectl create secret generic \
  sops-age --namespace=flux-system \
  --from-file=age.agekey=/dev/stdin
sops --age=<public-key> --encrypt \
  --encrypted-regex '^(data|stringData)$' \
  --in-place basic-auth.yaml
# Kustomization-Ausschnitt:
spec:
  decryption:
    provider: sops
    secretRef: {name: sops-age}

Diagnose (flux CLI)

Vom Symptom zur Quelle

flux trace zeigt für ein beliebiges Cluster-Objekt, welche Kustomization/HelmRelease und welche Source es verwaltet — der schnellste Einstieg, wenn unklar ist, woher ein Objekt kommt.

Status & Events

flux get pro Kind oder all, --watch für Live-Status. flux events filtert Kubernetes-Events auf Flux-Ressourcen (--for Kind/name). flux logs aggregiert die Controller-Logs (--level=error).

flux check
flux get all -A
flux trace -n apps deployment my-app
flux events --for Kustomization/apps
flux logs --level=error --all-namespaces

Anti-Patterns

Was du nicht tun solltest

kubectl apply am Repo vorbei: die nächste Reconciliation überschreibt den Hotfix still. Änderungen gehören ins Repo; Notfall-Stopp ist flux suspend.

prune: false als Dauerzustand: gelöschte Manifeste bleiben als Waisen im Cluster stehen — Drift, den niemand mehr sieht.

Eine Mega-Kustomization: CRDs, Operatoren und deren Custom Resources in einem Apply racen gegeneinander. Aufteilen + dependsOn/healthChecks.

latest-Tags automatisieren wollen: ImagePolicy braucht sortierbare Tags (SemVer, numerisch) — ein mutables latest ist nicht selektierbar.

Klartext-Secrets im Repo: SOPS/age gehört vor das erste Secret-Commit ins Setup, nicht danach.

suspend vergessen: suspendierte Ressourcen driften unbemerkt weiter — flux get zeigt den Suspended-Status, nach Wartung resume.

Multi-Tenant ohne Lockdown: ohne --no-cross-namespace-refs und Default-ServiceAccount greift jeder Tenant auf fremde Sources zu.

Aus der OMNI52 Cheatsheet-Fabrik

Verwandte Sheets in dichter Senior-Qualität:
argocd-cheatsheet.de — GitOps mit Argo CD
helm-cheatsheet.de — Helm Charts
terraform-cheatsheet.de — Infrastruktur as Code
rke2-cheatsheet.de — RKE2-Distribution

Lizenz & Weiterverteilung

CC BY-SA 4.0. Du darfst dieses Cheatsheet kopieren, weiterverteilen, ausdrucken und in eigenen Materialien zitieren. Bedingung: Quellenangabe „Flux Cheatsheet — OMNI52 GmbH, flux-cheatsheet.de“ bleibt sichtbar, und abgeleitete Werke stehen unter der gleichen Lizenz (Share-Alike).

Nicht erlaubt: Logo, Marken oder den Eindruck zu vermitteln, dass der Inhalt von dir/euch stammt oder dass OMNI52 GmbH die Weiterverwendung sponsort.

Volltext der Lizenz: creativecommons.org/licenses/by-sa/4.0/deed.de.

Flux is a trademark of The Linux Foundation. Kubernetes is a registered trademark of The Linux Foundation. OMNI52™ is a trademark of OMNI52 GmbH (filed, not yet registered). This website is operated by OMNI52 GmbH and is not affiliated with, endorsed by, or sponsored by The Linux Foundation or the Cloud Native Computing Foundation. “Flux” is used in a nominative / descriptive sense to indicate the technology this cheatsheet documents.