Why We Don't Use Helm for Everything

Helm is great for installing 3rd party apps. It is terrible for managing your own internal microservices. Here's why.

D
Daniel Paz
1 min read

Helm is the “Package Manager for Kubernetes.” If I want to install Prometheus, I use Helm. If I want to install Cert-Manager, I use Helm.

But for my own internal API? I use Kustomize.

The Problem with Templating

Helm treats YAML as a string. It uses Go templates ({{ .Values.foo }}) to inject variables. This leads to indentation hell.

{{- if .Values.ingress.enabled }}
ingress:
{{- toYaml .Values.ingress.annotations | nindent 4 }}

If you get the whitespace wrong, your deploy fails. It is brittle and hard to read.

The Kustomize Approach

Kustomize treats YAML as… YAML. It understands the structure. You have a base (common config) and overlays (prod, staging). You patch the base, you don’t template it.

My Rule of Thumb

  • Third-Party App? Use Helm. (Someone else maintains the chart).
  • Internal App? Use Kustomize. (Simple, readable, no indentation nightmares).

Keep your internal manifests boring. Boring is good.

👨‍💻

Daniel Paz

Marketing Lead

Join 1,000+ FinOps and platform leaders

Get Kubernetes and ECS cost tactics delivered weekly.