Skip to content

Argo CD with Helm and Kustomize: CAPA practice questions

Argo CD supports several ways of producing manifests, and it detects the tool for a source path by itself unless the Application sets one explicitly. A Chart.yaml file means Helm, a kustomization.yaml, kustomization.yml or Kustomization file means Kustomize, and anything else is treated as a plain directory of YAML or JSON manifests. Config management plugins cover other tools.

By Ibrahim Yesilay · Published · Updated

Independent community practice, not affiliated with or endorsed by CNCF or The Linux Foundation.

What Argo CD with Helm and Kustomize covers in CAPA

Argo CD supports several ways of producing manifests, and it detects the tool for a source path by itself unless the Application sets one explicitly. A Chart.yaml file means Helm, a kustomization.yaml, kustomization.yml or Kustomization file means Kustomize, and anything else is treated as a plain directory of YAML or JSON manifests. Config management plugins cover other tools.

Helm is used only to inflate charts with helm template. Argo CD then applies the rendered manifests and manages their lifecycle itself, so helm ls does not show the release. The release name defaults to the Application name and can be changed with releaseName, although that can upset charts whose selectors use the app.kubernetes.io/instance label. Values come from several places with a fixed precedence: parameters beat valuesObject, which beats values, which beats valueFiles, which beat the chart's own values.yaml. Among several valueFiles, the later file wins, and ignoreMissingValueFiles skips files that do not exist. Helm hooks are mapped onto Argo CD hooks: pre-install and pre-upgrade become PreSync, post-install and post-upgrade become PostSync, and the rollback hooks are not supported. Charts come from Helm repositories, OCI registries or Git paths, and a values file kept in a different repository uses a multi-source Application with a ref.

Kustomize applications are rendered with kustomize build. The kustomize block of an Application can override or extend the kustomization without editing it: namePrefix and nameSuffix, images to swap image tags, replicas, commonLabels and commonAnnotations, a namespace, components, and inline patches that are merged with those in the kustomization file. Inline patches are handy with ApplicationSets, where one template can patch each generated application with values from its generator. Build options for every Kustomize application are set in argocd-cm with kustomize.buildOptions, and a version-specific entry registers options for a named Kustomize version.

The two tools can also be combined. Kustomize can render a Helm chart through its helmCharts field, but only when kustomize build receives --enable-helm, so Argo CD needs that flag in kustomize.buildOptions or a config management plugin. Because Argo CD renders everything in the repository server, the chart and kustomization must be reachable from there, with repository credentials registered in Argo CD.

Key points

  • Argo CD renders Helm charts with helm template and manages the result itself, so helm ls shows nothing.
  • Helm value precedence: parameters, then valuesObject, values, valueFiles and the chart defaults.
  • The Application kustomize block can set images, namePrefix, replicas, labels and inline patches.
  • Rendering Helm charts through Kustomize needs --enable-helm in kustomize.buildOptions.

Three sample questions

14 CAPA questions on Argo CD with Helm and Kustomize, 14 with explanations. How practice works

Question 1

Which Application field holds an inline block of Helm values written as a YAML string?
  1. A.Using spec.source.helm.values
  2. B.Using spec.helm.parameters
  3. C.Using spec.source.helm.parameters
  4. D.Using spec.helmValues

Correct answer: A

spec.source.helm.values takes a values file inline as a string (valuesObject takes the same as a YAML object). Why the other options are wrong. "Using spec.source.helm.parameters": parameters set single values like --set, not a values block. "Using spec.helm.parameters" and "Using spec.helmValues": Helm settings live under spec.source.helm; these fields do not exist.

Sources: Argo CD docs: Helm, Argo CD docs: Application Specification Reference

Question 2

An application uses Kustomize with multiple overlays. How do you specify which overlay to use?
  1. A.Set source.path to point to the overlay directory
  2. B.Use source.targetRevision to specify the overlay
  3. C.Set source.kustomize.overlay to the overlay directory name
  4. D.Configure overlays in the AppProject

Correct answer: A

With Kustomize you pick the overlay by pointing source.path at the overlay directory (for example overlays/production); the docs say to point your path to the overlay, and Argo CD renders it with Kustomize when a kustomization.yaml is found there. Why the other options are wrong. "Use source.targetRevision to specify the overlay": targetRevision selects a Git revision (or a chart version for Helm), not a directory. "Set source.kustomize.overlay to the overlay directory name": the Kustomize options in the docs do not include an overlay field, the directory is chosen through source.path. "Configure overlays in the AppProject": an AppProject restricts repositories, destinations and resource kinds and does not select what to render.

Sources: Argo CD docs: Kustomize, Argo CD docs: Application Specification, Argo CD docs: Projects

Question 3

An Application deploys a Helm chart and is Synced and Healthy, yet helm list in the target namespace shows no release. Why?
  1. A.The sync failed silently, so the resources were never applied to the cluster and Argo CD reports a stale status
  2. B.Helm release records are stored in the argocd namespace instead
  3. C.Argo CD renders the chart with helm template and manages the resources itself
  4. D.helm list needs the --argocd flag to show Argo CD releases

Correct answer: C

The Helm page says Helm is only used to inflate charts with helm template; the lifecycle of the application is handled by Argo CD instead of Helm, so there is no Helm release to list. Why the other options are wrong. "The sync failed silently, so the resources were never a...": Synced and Healthy means the rendered resources are applied and healthy. "Helm release records are stored in the argocd namespace instead": no release secrets are created anywhere, because Helm never installs the chart. "helm list needs the --argocd flag to show Argo CD releases": helm list has no such flag; there is no release to show.

Sources: CNCF CAPA curriculum (CAPA_Curriculum.pdf), Argo CD docs: Helm, Argo CD docs: FAQ

Practice this topic

Focus mode keeps every question on Argo CD with Helm and Kustomize until you leave it. 10 free guest answers, then a free account; no credit card.

Or open CAPA practice across all topics.

Sources

The explanation above was checked against these official documents.