blog

12020-12-02

SEAN K.H. LIAO

helm

Helm claims to be the package manager for kubernetes. Unfortunately, the more I use it, the less I like it.

good

So when would you want to use helm? Never. Ok, maybe, when you want to use something someone else has written, with the minimal configuration that they have planned for (things in values.yaml).

Want to add some extra labels to everything? Clone the chart and edit locally. Want to add an extra/custom resource? Clone the chart or write a new one depending on the upstream one.

bad

Fundamentally, helm doesn't understand kubernetes resources. It uses go templating on yaml, it's as horrible as it sounds: no concept of structuring data, you have to care about indentation even though there can only be one correct value. It has the bare minimal knowledge of CRDs, and can't process resources as structured data, ex: injecting a label in everything, generating resources from files, ...

There are no standards, upstream chart quality can be all over the place, and if you want to use them, well good luck.

It really isn't declarative, there's almost no way to craft a command that will work consistently across environments, you need to change you repo, change your values file... So many things that end up on the command line, not properly version controlled unless you stick it into a readme or a makefile.

what you should use

Something else. Right now I think kustomize strikes the right notes on being declarative, working with plain manifests, understanding enough of the common usecases to make things easy, while having escape hatches (patches) for when you do need extra control.