Skip to content

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:

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

  1. Install podinfo via its Helm chart with custom values, then upgrade and roll the release back.
  2. Convert your Phase 2 whoami manifests into a Kustomize base with dev and prod overlays: prod gets 3 replicas and resource limits, dev gets 1 and lean.
  3. Render with kubectl kustomize first, then kubectl apply -k both 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.

Next: Phase 7: The Migration Project

A VineLab lab. Released under the MIT License.