Flux is a GitOps toolkit for Kubernetes: a set of controllers that continuously pull the desired state of a cluster from Git repositories, OCI artifacts or Helm repositories and reconcile the cluster towards it. It addresses the drift and audit problems of push-based deployment, where CI systems hold cluster credentials and nothing corrects manual changes afterwards. Flux was created at Weaveworks, whose team coined the term GitOps, and was rewritten from 2020 as the modular “GitOps Toolkit” known as Flux v2. It joined the CNCF Sandbox in 2019, moved to Incubation in March 2021 and graduated on November 30, 2022; the project continued under a multi-vendor maintainer group after Weaveworks closed in February 2024.
CNCF daily · Sprint 2, day 2 · Continuous Integration & Delivery (bonus GitOps post)
At a glance
| Category | Continuous Integration & Delivery |
| CNCF status | Graduated. Sandbox 2019, Incubating March 2021, Graduated November 30, 2022 |
| Written in | Go |
| License | Apache 2.0 |
| Current release line | Flux 2.9 (GA June 30, 2026), supporting Kubernetes 1.34 to 1.36 |
| Sources | Git, OCI artifacts, Helm repositories, S3-compatible buckets |
| Companion projects | Flagger (progressive delivery), Flux Operator, flux CLI plugins |
Architecture
flowchart TB
GIT[Git repository] --> SC[source-controller<br/>fetch and package]
OCI[OCI registry] --> SC
HR[Helm repository] --> SC
SC --> ART[Versioned artifacts<br/>in cluster]
ART --> KC[kustomize-controller<br/>build, decrypt, apply]
ART --> HC[helm-controller<br/>install and upgrade]
KC --> K8S[Kubernetes API<br/>server-side apply]
HC --> K8S
IR[image-reflector-controller<br/>scan registry tags] --> IA[image-automation-controller<br/>commit new tags]
IA --> GIT
K8S --> NC[notification-controller<br/>alerts and webhooks]
NC --> EXT[Slack, Teams,<br/>Git commit status]
| Component | Responsibility |
|---|---|
| source-controller | Fetches Git, OCI, Helm and bucket sources on an interval, verifies signatures and exposes each revision as an artifact. |
| kustomize-controller | Builds Kustomize overlays, decrypts SOPS secrets, applies manifests with server-side apply, prunes removed objects and runs health checks. |
| helm-controller | Manages HelmRelease objects: install, upgrade, test, rollback and drift detection for Helm charts. |
| notification-controller | Sends events to chat and incident tools, updates commit statuses and receives webhooks that trigger immediate reconciliation. |
| image-reflector and image-automation controllers | Scan registries for new tags matching a policy and commit the updated tag back to Git. |
| Flux Operator | Optional operator that installs and upgrades Flux itself from a FluxInstance resource, with a web UI. |
Design principle. Flux is pull-based and declarative: nothing outside the cluster needs write access to it. Each controller does one job and communicates through Kubernetes resources, so teams adopt only the parts they need and the desired state in Git remains the single source of truth.
Production reference design
A typical layout on EKS, GKE, AKS or on-premises clusters uses one Git repository for fleet configuration and separate application repositories that publish images.
- Bootstrap Flux into the cluster and commit its own manifests to the fleet repository:
Platform teams that prefer an operator-managed lifecycle can install the Flux Operator with Helm and declare aflux check --pre flux bootstrap github \ --owner=acme --repository=fleet-infra --branch=main \ --path=clusters/prod-ap-south-1 --personal=falseFluxInstanceinstead. - Structure the repository by cluster and layer:
clusters/<name>points atinfrastructure/(ingress, cert-manager, policies) andapps/(workloads), with Kustomize overlays per environment. - Declare sources and reconciliation with explicit dependencies, so infrastructure is ready before applications:
apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: fleet namespace: flux-system spec: interval: 1m url: https://github.com/acme/fleet-infra ref: branch: main --- apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: apps namespace: flux-system spec: interval: 10m path: ./apps/prod prune: true wait: true timeout: 5m dependsOn: - name: infrastructure sourceRef: kind: GitRepository name: fleet decryption: provider: sops secretRef: name: sops-age - Manage charts with HelmRelease (
helm.toolkit.fluxcd.io/v2), pinning chart versions and enabling drift detection, so manualkubectl editchanges are reverted. - Automate image updates: an
ImagePolicyselects the newest semver tag, and image automation commits it to Git, keeping Git the record of what runs. - Wire notifications to Slack or Microsoft Teams and set commit statuses on the fleet repository, so failed reconciliations are visible where engineers work.
Typical production uses are multi-cluster fleet management, environment promotion through Git pull requests, secret management with SOPS, and progressive delivery with Flagger for canary and blue-green releases.
Operational considerations
- Scaling: controllers are horizontally sharded by label for very large fleets; tune
intervalvalues, since thousands of objects reconciling every minute load both the API server and Git hosts. Webhook receivers give fast feedback without short polling intervals. - High availability: Flux state lives in Git and Kubernetes, so a controller restart is harmless; the critical dependency is the Git or OCI source. Mirroring sources to an in-region OCI registry removes that dependency during outages.
- Security: Flux needs no inbound access and no CI credentials for the cluster. Restrict tenants with service account impersonation per
Kustomization, verify Git commits or OCI artifacts with signatures, and keep SOPS keys in a KMS or Vault-compatible store. - Sizing: the controllers are lightweight; memory grows with the number and size of artifacts. Large monorepos are better split, or packaged as OCI artifacts, to avoid repeated clones.
- Common pitfalls:
prune: truedeletes objects removed from Git, including ones created by hand that were adopted accidentally; review the first sync in a test cluster. Upgrades occasionally remove deprecated API versions, so runflux migrateand read release notes before each minor upgrade.
Adoption
The project’s adopters page lists organisations that self-report production use, including Cisco, Grafana Labs, Maersk, SAP SE, Volvo Cars, UiPath, Orange, Kong, RingCentral, Hetzner, Scaleway, Sonatype, Traefik Labs, Giant Swarm and BlaBlaCar. Morgan Stanley described its five-year GitOps journey with Flux at FluxCon North America 2025. Flux is also embedded in managed offerings, such as the GitOps extension for Azure Kubernetes Service and Azure Arc.
Alternatives
| Solution | Model | Best suited to |
|---|---|---|
| Argo CD (CNCF Graduated) | Pull-based GitOps with a central UI and multi-cluster management | Teams that want a rich web interface and application-centric views |
| Rancher Fleet | Pull-based GitOps for very large fleets | Organisations standardised on Rancher |
| Push-based CI deployment (GitHub Actions, GitLab CI, Jenkins) | Pipeline runs kubectl or helm against the cluster |
Small setups where drift correction is not required |
| Pulumi or Terraform Kubernetes providers | Infrastructure-as-code apply runs | Teams managing clusters and workloads from one IaC tool |
Strengths and limitations
| Strengths | Limitations |
|---|---|
| Modular controllers; adopt only what is needed | No built-in rich UI comparable to Argo CD, although the Flux Operator web UI and flux9s narrow the gap |
| Strong multi-tenancy through service account impersonation | Debugging spans several controllers and resource types |
| First-class Helm, Kustomize, OCI artifacts and SOPS | Image automation writes to Git, which some teams prefer to keep human-only |
| Graduated, vendor-neutral governance with a long track record | Requires disciplined repository structure to stay readable at scale |
| Native drift correction with selective ignore rules (Flux 2.9) | Frequent minor releases require a regular upgrade cadence |
Recommendation
Adopt for Kubernetes platforms that want Git or OCI artifacts as the source of truth and continuous drift correction. Start with a single fleet repository, bootstrap with the CLI or the Flux Operator, enable SOPS for secrets and notifications for failed reconciliations, and add image automation or Flagger once the base workflow is stable. Teams that value a central web UI for developers should compare Argo CD before choosing.
References: CNCF project page · Flux documentation · Flux 2.9 GA announcement · Flux 2.8 GA announcement · CNCF graduation announcement · Flux adopters · Flux on GitHub