Kustomize: template-free overlays
Patch manifests per environment.
Kustomize is the other major way to manage Kubernetes manifests, and it takes the opposite approach to Helm: instead of templating, it uses overlays. You keep a plain, valid set of "base" manifests, then define small per-environment patches that modify them — change the replica count for prod, add a label, swap an image tag. There are no template placeholders; the base is real YAML you could apply directly, and each environment is that base plus a declared set of changes. It is built into kubectl (kubectl apply -k), so there is nothing extra to install.
base/deployment.yaml # plain, valid manifests (1 replica)service.yamlkustomization.yaml # lists the base resourcesoverlays/prod/kustomization.yaml # references base + patchesreplicas-patch.yaml # patch: set replicas to 5 for prod# apply prod: kubectl apply -k overlays/prod
Base + overlay
The model is base plus overlay. The base is the common configuration; each overlay (dev, staging, prod) references the base and layers on patches — strategic-merge patches that change specific fields, plus conveniences like setting a name prefix, common labels, or image tags for the whole environment. Because the base is ordinary YAML and the patches are explicit, you can see exactly what differs per environment without mentally rendering a template. Many find this more transparent than Helm’s templating for in-house apps.
resources:- ../../base # start from the basepatches:- path: replicas-patch.yaml # override specific fields for prodimages:- name: myappnewTag: "1.4.2" # set the image tag for this environmentnamePrefix: prod- # prefix all resource names
Helm vs Kustomize
They solve the same problem differently, and teams debate which. Helm is a full package manager — templating, releases, rollbacks, a huge ecosystem of installable charts — ideal for packaging apps to distribute and for installing third-party software. Kustomize is simpler and template-free — no placeholders, valid YAML throughout, built into kubectl — often preferred for your own manifests where you want transparency over packaging features. Many teams use both: Helm to install third-party charts, Kustomize to manage their own apps. Neither is wrong; pick by whether you value packaging power (Helm) or template-free clarity (Kustomize).