Flux is a GitOps delivery system for Kubernetes, built as a set of small, single-purpose controllers rather than one application. That composition is its defining characteristic. source-controller fetches from Git, OCI registries, Helm repositories and S3-compatible buckets, verifies them, and publishes an immutable local artifact. kustomize-controller takes that artifact, builds it, and applies it with server-side apply — tracking what it created in an inventory so that removing a file from Git prunes the object from the cluster. helm-controller drives the Helm SDK directly from a HelmRelease resource, with drift detection and remediation on failure. notification-controller handles both directions: inbound webhook Receivers that trigger immediate reconciliation, and outbound Alerts to Slack, Teams, Git commit status or any webhook.
The two image controllers are the part with no direct equivalent elsewhere. image-reflector-controller scans a registry and records available tags; ImagePolicy selects one by semver, numerical or alphabetical ordering; image-automation-controller then writes that tag back into the Git repository as a commit. The registry becomes an input to Git rather than something a pipeline pushes past Git.
Flux bootstraps by committing its own manifests into the repository it will watch, so the installation is itself under GitOps from the first minute. Multi-tenancy is expressed in Kubernetes terms — namespaced resources, serviceAccountName impersonation on every Kustomization and HelmRelease, and cross-namespace reference restrictions — rather than through a separate permission system.
Why this skill matters now
The reason GitOps displaced push-based deployment is credential blast radius and drift. A CI job holding cluster-admin has to be trusted absolutely, and it has no way to notice that someone edited a live resource an hour after the deploy. A controller reconciling from Git closes both gaps at once.
Flux occupies a particular position within that model. It is the implementation teams choose when they want GitOps composed from Kubernetes primitives rather than layered on top of them — every unit of work is a namespaced custom resource, every permission decision is Kubernetes RBAC, and every reconciliation runs under an impersonated service account. That makes it a natural fit for platform teams building a substrate other teams consume, and for organisations where the security review focuses on who can write to which namespace.
The skill gap is not installation. It is designing repository structure and dependency ordering, deciding whether artifacts arrive as Git or as OCI, running image automation without a commit loop, and diagnosing a HelmRelease that keeps rolling back. Those are the questions a production Flux estate turns on.