Render and Install Argo CD with Helm, Skipping Pre-Installed CRDs
Scenario
Your platform team manages all Argo CD CustomResourceDefinitions (Application,
AppProject, ApplicationSet) centrally, applying and upgrading them outside
of any Helm release so that CRD changes can be reviewed and rolled out
independently of the application workloads that depend on them.
The Argo CD CRDs are already installed in this cluster. Your job is to render the rest of the Argo CD installation with Helm, without letting the chart try to install its own copies of those CRDs, which would fight with the ones the platform team already manages.
Task
Install Argo CD in the Kubernetes cluster using Helm, while ensuring the chart's bundled CRDs are not part of the generated manifest, since they are pre-installed:
- Add the official Argo CD Helm repository with the name
argocd(https://argoproj.github.io/argo-helm). - Generate a Helm template from the Argo CD chart, version
10.2.0, for theargocdnamespace. Use--create-namespaceto create the namespace automatically — no separatekubectl create namespaceneeded. - Ensure that CRDs are not included in the rendered output by configuring the chart accordingly.
- Save the generated YAML manifest to
/home/laborant/argo-helm.yaml. - Install Argo CD into the cluster using
helm installwith the same chart version, namespace, and CRD-skip configuration.
After helm install, ensure all Argo CD pods are running with
kubectl get pods -n argocd — all components must be up for the task to pass.
Hint 1 - Adding the Repository
Register the Argo CD Helm repository under the name argocd and refresh
the local index:
helm repo add argocd https://argoproj.github.io/argo-helm
helm repo update
Documentation
Hint 2 - Finding the Value That Controls CRD Installation
Every Helm chart documents its configurable values. Before templating,
inspect what the chart exposes for version 10.2.0:
helm show values argocd/argo-cd --version 10.2.0 | less
Look near the top of the output for a section that groups CRD-related settings together. It will look something like:
crds:
install: <true-or-false>
keep: true
...
Whichever field controls whether CRDs get installed is the one you need to
override to false when rendering the template.
Documentation
Hint 3 - Rendering the Template to a File
helm template only prints the rendered manifests locally without applying
them. Use --create-namespace so the namespace is created automatically:
helm template argocd argocd/argo-cd \
--version 10.2.0 \
--namespace argocd \
--create-namespace \
--set crds.install=false \
> /home/laborant/argo-helm.yaml
Once the file is generated, confirm it does not contain any
CustomResourceDefinition resources:
grep "kind: CustomResourceDefinition" /home/laborant/argo-helm.yaml
This should print nothing.
Documentation
Hint 4 - Installing Argo CD with Helm
Use helm install with the same flags as your helm template command to
deploy Argo CD into the cluster, skipping the CRDs that are already managed
separately:
helm install argocd argocd/argo-cd \
--version 10.2.0 \
--namespace argocd \
--create-namespace \
--set crds.install=false
After installation, verify all core pods are running:
kubectl get pods -n argocd
You should see pods for argocd-server, argocd-repo-server,
argocd-application-controller, argocd-dex-server, and argocd-redis.
Note:
argocd-application-controllerruns as a StatefulSet, not a Deployment. Usekubectl rollout status statefulset/argocd-application-controllerto check it —kubectl wait deploymentwill fail with "not found" for it.
Documentation