The Helm Controller is a Kubernetes controller that is part of the Flux project, which is a tool for continuous delivery on Kubernetes. The Helm Controller manages Helm charts and deployments using the GitOps approach. It is built on Kubernetes controller-runtime and uses Helm’s SDK to full effect.
The Helm Controller adds a structured declaration layer for Helm releases on top of Helm 3, which was designed without a running software agent. This allows for declarative helming with Flux and helps to manage multiple engineers collaborating on one or more apps, in multiple namespaces or clusters.
To use the Helm Controller, you need to create a HelmRepository
custom resource, which defines the URL of the Helm chart repository and an interval for polling the repository. Then, you create a HelmRelease
custom resource, which references the HelmRepository
and specifies the chart, version, and release name.
Here is an example of a HelmRepository
and a HelmRelease
:
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
metadata:
name: traefik
namespace: traefik
spec:
interval: 1m0s
url: https://helm.traefik.io/traefik
---
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
name: my-traefik
namespace: traefik
spec:
chart:
spec:
chart: traefik
sourceRef:
kind: HelmRepository
name: traefik
version: 9.18.2
interval: 1m0s
Once these resources are applied to your cluster, the Helm Controller automatically uses the Helm SDK to deploy the chart according to the rules you’ve set.
You can find more information about the Helm Controller in the Flux documentation.
The Helm Controller is packaged as a container image and is available on Chainguard.
The Helm Controller is Apache 2.0 licensed and accepts contributions via GitHub pull requests.
If you encounter any issues while using the Helm Controller, you can file an issue in the Flux GitHub repository.
Here are the distances for the sources used in this explanation:
- Flux is Incubating + The Road Ahead: 0.0008618779
- App Delivery in Cloud Native: Where are We? What’s Next?: 0.00034080708
- Migrate to the Helm Controller: 0.7375363421780144
- Flux for Helm Users: 0.7387830451894145
- Flux v2 roadmap: 0.8041329926933086
- HelmController: 0.818739518251373
- GitHub: 0.8258957277343822
- Image Overview: flux-helm-controller: 0.8355999559231715
- Contributing to Flux: 0.8420117097457182
- Step 10, the command needs the namespace identifier flux reconcile helmrelease $FLUX_HELM_RELEASE_RESOURCE -n default: 0.8426981833797225
- Image Overview: flux-helm-controller: 0.8444026259753272
- fluxcd.io/contributing/docs/style-guide: 0.8518394229929738
- gist.github.com/scottrigby/a1a42c3292ec7899837c578ffdaaf92a: 0.8520692140175773
- fluxcd.io/flux/flux-e2e: 0.8537776728064659
- gist.github.com/scottrigby/a1a42c3292ec7899837c578ffdaaf92a: 0.8635670805820168