English | 简体中文
Helmfile is a declarative spec for deploying helm charts. It lets you...
- Keep a directory of chart value files and maintain changes in version control.
- Apply CI/CD to configuration changes.
- Periodically sync to avoid skew in environments.
To avoid upgrades for each iteration of helm
, the helmfile
executable delegates to helm
- as a result, helm
must be installed.
Declarative: Write, version-control, apply the desired state file for visibility and reproducibility.
Modules: Modularize common patterns of your infrastructure, distribute it via Git, S3, etc. to be reused across the entire company (See #648)
Versatility: Manage your cluster consisting of charts, kustomizations, and directories of Kubernetes resources, turning everything to Helm releases (See #673)
Patch: JSON/Strategic-Merge Patch Kubernetes resources before helm-install
ing, without forking upstream charts (See #673)
May 2025 Update
- Helmfile v1.x has migrated its YAML processing library from goccy/go-yaml to gopkg.in/yaml.v3 as the default and only supported backend. This change simplifies YAML handling and improves compatibility with the broader Go ecosystem.
- We are excited about the wide adoption for Helmfile v1 users! If you haven't already upgraded, please go over this v1 proposal here and the latest rc release in the releases page.
1: Binary Installation
download one of releases
2: Package Manager
- Archlinux: install via
pacman -S helmfile
- openSUSE: install via
zypper in helmfile
assuming you are on Tumbleweed; if you are on Leap you must add the kubic repo for your distribution version once before that command, e.g.zypper ar https://download.opensuse.org/repositories/devel:/kubic/openSUSE_Leap_\$releasever kubic
- Windows (using scoop):
scoop install helmfile
- macOS (using homebrew):
brew install helmfile
3: Container
For more details, see run as a container
Make sure to run
helmfile init
once after installation. Helmfile uses the helm-diff plugin.
Let's start with a simple helmfile
and gradually improve it to fit your use-case!
Suppose the helmfile.yaml
representing the desired state of your helm releases looks like:
repositories:
- name: prometheus-community
url: https://prometheus-community.github.io/helm-charts
releases:
- name: prom-norbac-ubuntu
namespace: prometheus
chart: prometheus-community/prometheus
set:
- name: rbac.create
value: false
Sync your Kubernetes cluster state to the desired one by running:
helmfile apply
Congratulations! You now have your first Prometheus deployment running inside your cluster.
Iterate on the helmfile.yaml
by referencing:
See: multi-env-helmfile
Please read complete documentation
Welcome to contribute together to make helmfile better: contributing doc
We use:
- semtag for automated semver tagging. I greatly appreciate the author(pnikosis)'s effort on creating it and their kindness to share it!
Helmfile has been used by many users in production:
For more users, please see: Users