Phase 6: Helm and Packaging
Time: week 6. Goal: stop copy-pasting YAML between environments.
The pain of raw YAML
Same app in dev and prod means two nearly-identical sets of manifests differing in replicas, resources, hostnames. Copy-paste drifts. Two answers exist.
Kustomize
Built into kubectl (kubectl apply -k). The simplest answer for "same app, different env":
- A base holds the common manifests.
- Overlays (dev/, prod/) patch only what differs.
No templating language, just YAML patching. Start here.
Helm
The package manager of the k8s world:
- Chart: a templated bundle of manifests.
- Values: the inputs (
values.yaml, overridable per install). - Release: one installed instance of a chart.
You will consume third-party charts constantly even if you never author one - ingress-nginx, cert-manager, monitoring stacks all ship as charts:
helm repo add podinfo https://stefanprodan.github.io/podinfo
helm show values podinfo/podinfo # see the chart's knobs before installing
helm install my-podinfo podinfo/podinfo -f my-values.yaml
helm upgrade my-podinfo podinfo/podinfo -f my-values.yaml
helm uninstall my-podinfo(Older tutorials all use Bitnami charts. Since Bitnami's 2025 licensing changes their free images are limited and many guides are broken - the mechanics are identical, just check a chart's maintenance status before relying on it.)
Author one small chart for your own app once, just to demystify the Go templating. Day to day, Kustomize for your own apps and Helm for third-party software is a very sane split.
Exercise
Full playbook with the values file, overlay tree, and patch files: Lab 6.
- Install podinfo via its Helm chart with custom values, then upgrade and roll the release back.
- Convert your Phase 2 whoami manifests into a Kustomize base with
devandprodoverlays: prod gets 3 replicas and resource limits, dev gets 1 and lean. - Render with
kubectl kustomizefirst, thenkubectl apply -kboth overlays and verify the patches applied.
Checkpoint
- You can explain chart vs values vs release.
- You can explain when you'd reach for Kustomize vs Helm.
- You converted real manifests to base + overlays and it worked.