Cheat notes · Module 05 · Real-world delivery
Helm and Kustomize in practice
A five-minute review for when you have done this module and want it back in your head. Open the full module for the steps and the lab, or the full text to print.
The idea
Argo CD renders Helm and Kustomize itself and applies plain manifests, so there is no Helm release. Helm packages apps other people install; Kustomize holds the small differences between your own environments. Render locally before you push.
Remember
- How Argo CD picks the tool: only YAML files = a plain directory; a
kustomization.yaml= Kustomize; aChart.yaml= a Helm chart in Git;chart:instead ofpath:= a chart from a chart repository. - Helm in Argo CD: the repo-server runs
helm templateand applies the output.helm listshows nothing, and Helm hooks become Argo CD hooks. Values stay in Git (helm.valuesObjector value files). - Kustomize: the base is ordinary YAML every environment shares; an overlay points at the base and lists only what differs (
images,replicas, patches). The base is never edited. - Helm or Kustomize? Helm for reusable packages (templates plus
values.yaml: vendor add-ons, a chart your team publishes). Kustomize for your own environments (no templates; the base is valid YAML). Many teams use both. - Parameter overrides (
argocd app set -p, the UI's Parameters tab) change the Application, not Git. A debugging tool only: root self-heals them away.
Pitfalls
- An
imagesentry whosenamedoes not match the base (stefanprodan/podinfoinstead ofghcr.io/stefanprodan/podinfo) silently changes nothing. Argo CD is Synced and Healthy on the old version. Render and grep before you push. - Deploying with
argocd app set: the change is not in Git and gets undone. - Expecting
helm historyorhelm rollbackfor charts Argo CD deployed. History and rollback live in Argo CD and Git.
Commands
kubectl kustomize OVERLAY_DIR | Render an overlay exactly as Argo CD will |
helm template NAME CHART_DIR -f values.yaml | Render a chart locally |
argocd app manifests APP | What Argo CD rendered from Git |
helm list -A | Shows nothing for charts Argo CD deployed |
curl -sk -o /dev/null -w '%{http_code}\n' https://localhost:8443/ | Traefik with no routes answers 404: alive |
A Kustomize overlay
# overlays/prod/kustomization.yaml
resources:
- ../../base
replicas:
- name: hello
count: 3
images:
- name: nginx # must match the image name in the base exactly
newTag: "1.28"
Test yourself
Answer in your head first, then open the answer.
You deploy a chart with Argo CD. What does helm list show?
Nothing. Argo CD renders with helm template and applies the output itself.
Where should the differences between dev and prod live?
In overlays (or value files) in the environment repo, changed by pull request.
Why can't an override set with argocd app set survive here?
Root self-heals the Application back to its manifest in Git.
A promotion merged, Argo CD is Synced, prod still runs the old tag. What do you check first?
Render the overlay: the images name probably does not match the base.
Where module 05 leaves you: Three things are now deployed from Git: the traefik ingress controller, checkout-dev (version 6.7.1, 1 replica) and checkout-prod (version 6.7.0, 2 replicas). helm list shows nothing for Traefik, because Argo CD rendered it.