Filters
How to search
  • Plain words find names, texts and examples.
  • "two words" finds the exact phrase.
  • --name or -x finds an option.
  • #word looks only inside commands.
  • @grep finds lessons and labs that use grep.
  • Filters: cat:network · in:labs · in:notes · level:rhcsa · ch:8 · root:yes. Put ! before a word to leave it out. OR between words means one of them.
  • ↑ ↓ to move · Enter to open · Esc to close · / to search

GitOps & HelmPlatform series

Helm vs Kustomize

Helm and Kustomize both stop you copying YAML between environments, and they are often framed as rivals. In practice they solve two different problems, and many teams run both.

Quick reference

HELMKUSTOMIZE
ApproachTemplates + valuesPatches on plain YAML
PackagingCharts, versions, registriesNone built in
Learning curveA day for the basicsAn hour for the basics
Per environmentvalues-prod.yamloverlays/prod
Readable outputRender first: helm templatePlain YAML by design
Best forThird-party and shared chartsYour own app's env changes

HELM (Charts with version history): Renders templates with your values, packaged as a versioned chart.

helm upgrade -f values.yaml

KUSTOMIZE (Plain YAML, patched per env): Applies plain YAML with per-environment patches layered on top.

kubectl apply -k overlays/prod
  • Helm → package once, install anywhere.
  • Kustomize → one base, an overlay per environment.

Explained

How they differ

Helm is a template engine plus a package format. You write templates with variables, set defaults in values.yaml, and override per environment. The result is a chart: a versioned artefact you can publish to a registry and install anywhere.

Kustomize is not a template engine. You keep plain YAML and describe the changes as patches and overlays: a base, then overlays/prod that edits it. kubectl apply -k reads it directly, so nothing extra is installed.

Where Helm wins

Packaging. A chart carries templates, defaults, version history and a rollback. If you install third-party software, Helm is the standard. Review. A values file is small and readable, and the template logic stays in the chart where it belongs.

Where Kustomize wins

Plain YAML. What you apply is what you can read, with no templating language to debug. Small differences. Changing replicas, image tags or limits per environment is a three-line patch.

The honest answer: use Helm to package and ship, Kustomize to adapt a base per environment. Helm can render to stdout, and Kustomize can consume the result.

The rule: choose per layer, not per company.

Templates or patches.

More notes: GitOps & Helm

Open in the notes app: search, filters, copy This note on GitHub