PlatformEngr® Argo CD course

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; a Chart.yaml = a Helm chart in Git; chart: instead of path: = a chart from a chart repository.
  • Helm in Argo CD: the repo-server runs helm template and applies the output. helm list shows nothing, and Helm hooks become Argo CD hooks. Values stay in Git (helm.valuesObject or 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 images entry whose name does not match the base (stefanprodan/podinfo instead of ghcr.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 history or helm rollback for charts Argo CD deployed. History and rollback live in Argo CD and Git.

Commands

kubectl kustomize OVERLAY_DIRRender an overlay exactly as Argo CD will
helm template NAME CHART_DIR -f values.yamlRender a chart locally
argocd app manifests APPWhat Argo CD rendered from Git
helm list -AShows 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.