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.
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.