Render Argo CD Manifests with helm template, Without CRDs
Install Argo CD using Helm without installing CRDs (they are pre-installed). Requirements: Add the official Argo CD Helm repo with the name argo (https://argoproj.github.io/argo-helm) Generate a Helm…
Live lab access
This task description is public. Its live lab requires full access; six other CKA labs are available in Free Practice with AI Lab Coach.
Create an account to continue →
Explore the six free labs with AI Lab Coach →
Read the brief on any device. Use a desktop or laptop for the terminal lab. Nothing starts until you choose Start.
The task
Install Argo CD using Helm without installing CRDs (they are pre-installed).
Requirements:
- Add the official Argo CD Helm repo with the name
argo(https://argoproj.github.io/argo-helm) - Generate a Helm template (not install) for chart version
7.7.3, namespaceargocd, with CRDs disabled - Save the generated manifest to
/home/cloud_user/argo-helm.yaml
Original Prepium guide · Written for Kubernetes v1.35 and checked against the official documentation on 6 October 2026. Use a disposable practice cluster. The commands use options present in both Helm 3 and Helm 4, and the example chart is cert-manager from its public repository; nothing below installs it.
Render a pinned Helm chart to a file, and control which CRDs end up in it
A Helm chart is a package of templates plus default values. helm install renders it and creates a tracked release in the cluster; helm template renders the same manifests locally and prints them, creating nothing. Rendering to a file is how you review, diff or hand a chart to another tool. The two details that trip people up are pinning the chart version and understanding that a chart can ship CRDs in two very different ways.
helm repo add NAME URL ──→ local index ──→ helm search repo --versions (what exists)
──→ helm show values / show crds (what is configurable)
──→ helm template ... --version X > file.yaml (render only)
1. Add the repository and see what versions exist
helm repo add jetstack https://charts.jetstack.io --force-update
helm repo update
helm search repo jetstack/cert-manager --versions | head
helm repo add stores a name for a URL; the name becomes the prefix in chart references such as jetstack/cert-manager. --versions lists every chart version instead of only the newest. Without --version, later commands use the latest chart, so a render you repeat next month may differ. Note that cert-manager's docs now recommend its OCI registry; the classic repository is used here because it shows the repo add workflow.
2. Learn how this chart ships its CRDs
Helm 3 introduced a special crds/ directory. Files there are not templated: helm install applies them first (and skips them if already present), and --skip-crds turns that step off. helm template leaves them out unless you add --include-crds. Many charts instead put CRDs under templates/ behind a value. Those are ordinary templates, outside the crds/ step that --skip-crds governs, so the chart's value is what removes them. Check which kind you have, using a version from step 1:
helm show crds jetstack/cert-manager --version <chart-version> | head
helm show values jetstack/cert-manager --version <chart-version> | grep -n -A4 '^crds:'
helm show crds prints the chart's CRD files, and helm show values prints its values.yaml. cert-manager's own install docs toggle its CRDs with --set crds.enabled=true, which tells you its CRDs are value-controlled templates. Every chart names this value differently, so always read the values file of the version you pinned.
3. Render to a file with the CRDs left out
kubectl create namespace prepium-tutorial
helm template cm-preview jetstack/cert-manager \
--version <chart-version> \
--namespace prepium-tutorial \
--set crds.enabled=false \
> /tmp/cm-preview.yaml
The first argument is the release name, which charts typically weave into object names and labels. --namespace sets the release namespace that templates read. cert-manager's docs point out that helm template does not output a Namespace object, so the namespace must exist before you apply the file.
4. Verify the file before trusting it
grep -c '^kind: CustomResourceDefinition' /tmp/cm-preview.yaml # expect 0
grep -m3 'helm.sh/chart' /tmp/cm-preview.yaml # NAME-VERSION, if the chart uses Helm's suggested label
kubectl apply --dry-run=server -f /tmp/cm-preview.yaml | head
The server-side dry run asks the API server to validate every object without saving it, which catches missing namespaces or missing CRDs before a real apply.
Common mistakes
- Relying on
--skip-crdsfor a chart whose CRDs are templates: check the output, and use the chart's own value instead. - Forgetting
--version: the file silently tracks whatever is newest in the index. - Running
helm installwhen a rendered file was asked for: a release now exists andhelm list -Ashows it. - Reading values from the latest chart while rendering an older pinned one: value names can change between versions.
| Example check | Evidence |
|---|---|
| Repo registered under the expected name | helm repo list |
| Pinned chart rendered | Chart label in the file shows the requested version |
| CRDs excluded | No kind: CustomResourceDefinition in the file |
| Nothing installed | helm list -A shows no new release |
Cleanup: rm /tmp/cm-preview.yaml, kubectl delete namespace prepium-tutorial, helm repo remove jetstack. References: helm template, Helm: Custom Resource Definitions, Helm: Charts, cert-manager Helm install. Next, try Helm for CKAD or Kustomize overlays.
What this tests
Build clusters with kubeadm, manage RBAC, etcd, and the control plane, and install a CNI. On the CKA exam, Cluster Architecture, Installation & Configuration tasks are graded purely on what you build in the cluster - not multiple choice - so the only way to get faster is to do them on a real cluster against a clock.
Practice it for real
The public description lets you study the task before signing up. Full access includes every live lab. Six selected CKA scenarios are included in Free Practice, with five shared sessions each week. You solve the task in a real terminal, hit validate, and a programmatic checker scores exactly what you got right and wrong (with partial credit). You can open the solution while practising, then retry and use the failed checks to improve your score.