Using Helm Umbrella Charts to Simplify Multi‑Component Deployments
Learn how to wrap multiple charts in an umbrella chart, pin versions, propagate values, and avoid common pitfalls when managing complex stacks.
10 Sept 2025, 02:57 UTC

The problem: tangled Helm releases
When an application consists of several loosely coupled services—say a web frontend, a cache, and a database—you often end up installing each chart separately. Keeping track of release names, version compatibility, and shared configuration (like a namespace or image registry) becomes error‑prone as the number of charts grows.
Thesis: an umbrella chart gives you a single point of version control and configuration propagation
By declaring the other charts as dependencies in a parent Chart.yaml, you can treat the whole stack as one installable unit. The parent chart does not need its own templates; it exists solely to manage dependencies and to pass down values.
How umbrella charts work
Declaring dependencies
In the parent chart’s Chart.yaml you add a dependencies section. Each entry can specify a repository, version, and an optional alias to avoid name clashes.
# parent/Chart.yaml
apiVersion: v2
name: my-stack
version: 0.1.0
dependencies:
- name: redis
version: "16.x.x"
repository: https://charts.bitnami.com/bitnami
- name: nginx
version: "9.x.x"
repository: https://charts.bitnami.com/bitnami
alias: frontend # prevents collision with another nginx chart
Run helm dependency update (requires read access to the configured repos) to download the charts into the charts/ directory. This step must be repeated whenever you change a version or add a new dependency.
Propagating values
The parent’s values.yaml can override any setting of a child chart by using the child’s name (or alias) as a key.
# parent/values.yaml
redis:
architecture: standalone
master:
persistence:
size: 2Gi
frontend:
replicaCount: 2
image:
repository: nginx
tag: "1.25"
When you install the umbrella chart, Helm merges the parent values with each child’s defaults, producing the final configuration that gets sent to Tiller (or the in‑cluster release controller in Helm 3).
Worked example: deploying a Redis‑backed NGINX stack
- Create the scaffold (run in a directory where you have write permission):
helm create my-stack # removes the default templates because we only need a wrapper rm -rf my-stack/templates/* rm my-stack/Chart.yaml # we will replace it - Add the dependency definition (replace the generated
Chart.yamlwith the one shown above). - Fetch the child charts:
cd my-stack helm dependency update # charts/ now contains redis-*.tgz and nginx-*.tgz - Customize values (edit
values.yamlas shown). - Install the stack (you need permission to create releases in the target namespace):
helm install my-stack ./my-stack -n production --create-namespace
To verify that values were applied correctly, inspect the released configuration:
helm get values my-stack -n production
You should see the redis and frontend sections reflecting your overrides.
Trade‑offs and limitations
- Debugging depth: When a value does not propagate as expected, you must trace through multiple layers of
values.yamlfiles. Usinghelm get manifestto view the rendered templates helps, but the hierarchy can become deep. - Version conflicts: If two sub‑charts depend on different versions of a third chart (e.g., a common library chart), Helm will pick one version and may cause incompatibility. Pinning a shared dependency in the parent’s
dependenciessection can mitigate this. - Monolith temptation: Wrapping many services in a single umbrella chart can reduce the independence that microservices aim for. Consider keeping truly independent components as separate releases and only umbrella‑chart those that are tightly coupled or share a lifecycle.
Actionable closing
Start small: pick two charts that you frequently install together, add them as dependencies, run helm dependency update, and test a simple value override. Once the workflow feels comfortable, gradually add more charts, always checking the merged values with helm get values after each change. This approach gives you a single version‑controlled entry point for complex stacks while preserving the flexibility of individual Helm charts.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.