Skip to main content
This guide shows how to deploy a Helm chart with Flux using the Source Controller to fetch a chart from Git, and the Helm Controller to install the chart via a HelmRelease. It keeps the same sequence of operations used in the demo and includes exact manifests and commands you can follow. Overview
  1. Ensure the Helm chart is stored in a Git repository (a branch is fine).
  2. Create a GitRepository source so Flux’s source-controller can fetch the repo.
  3. Create a HelmRelease that references the GitRepository and the chart path/version.
  4. Optionally provide a values.yaml override file when creating the HelmRelease.
  5. Commit the generated manifests into the repository Flux watches and let Flux reconcile them.
Quick prerequisites
  • A Kubernetes cluster with Flux installed (flux CLI available).
  • The Helm chart present in a Git repository and reachable via HTTPS or SSH.
  • Access to the branch that contains the chart (the demo uses branch 5-demo).
Repository and branch
  • In the demo the repository bb-app-source contains a Helm chart on branch 5-demo.
  • Make sure you switch to that branch locally before working with the chart.
Example Chart metadata (Chart.yaml)
Example default values (values.yaml)
Example of a simple Service template (templates/service.yaml)
Create a GitRepository source Represent the Git repository with the Flux GitRepository CRD so the source-controller can fetch it:
Create a HelmRelease with the Flux CLI Flux has flux create helmrelease which generates a HelmRelease manifest. You can point the chart source to a GitRepository. The CLI also accepts a --values file which Flux reads locally and embeds into the exported YAML when you use --export.
When using --values with flux create helmrelease --export, Flux reads the values file from the local filesystem where you run the command and embeds those values into the generated HelmRelease YAML. Ensure the path you specify exists locally before running the command.
Example values override file (5-demo-values.yml)
Generate the HelmRelease manifest (example)
A generated HelmRelease (simplified)
Commit the generated HelmRelease YAML into the repository watched by Flux (for example, the cluster’s flux repo) and push. Flux will reconcile the GitRepository and HelmRelease. Inspect reconciliation with Flux and kubectl
  • Check Git sources fetched by Flux:
Sample output (cropped):
  • Check HelmReleases:
Sample output:
  • Verify the target namespace and workloads (example using namespace 5-demo):
Sample output:
Show pod labels (from the override values)
Sample output:
How the chart artifact is created
  • When the HelmRelease is reconciled, the source-controller packages the chart from the GitRepository and creates a HelmChart artifact (CRD helmcharts.source.toolkit.fluxcd.io).
  • List packaged charts:
Sample output:
Inspect the HelmChart CRD in the flux-system namespace:
View the YAML to see artifact details and the storage URL (the artifact URL points to source-controller storage). What else you can configure in HelmRelease
  • Helm tests: enable post-install/upgrade tests.
  • Upgrade remediation: retries, remediation strategies like rollback, and whether to ignore test failures.
  • CRD policies: Skip, Create, CreateReplace for CRD upgrades.
For the full set of options, see the Flux HelmRelease documentation: Useful resources and CRDs
Important: Ensure the Git branch and chart path are correct and reachable by Flux. If you use flux create ... --export, the CLI reads local files (like --values) on your machine — missing files will result in incomplete exports. Also commit the generated HelmRelease to the repo Flux watches so the controllers can reconcile it.
Check the application UI
  • In this demo the service is exposed on NodePort 30005. Open http://localhost:30005 from any node where the NodePort is reachable.
  • From version 7.5.0 the app shows a “START GAME” button to start the game manually (instead of auto-starting).
A webpage showing a "BLOCK BUSTER" breakout-style game with colored bricks, a paddle and ball, and a "START GAME" button at the bottom. The header panel above the game displays pod/app info (Pod Name, Pod IP, Namespace, App Version) along with the current Level, Score (1600) and Lives.
That covers the core steps to deploy a Helm chart from a Git repository using Flux’s source-controller and Helm controller. For extended configuration and advanced HelmRelease options, consult the Flux docs: Links and references

Watch Video