ArgoCD Components Deep Dive¶
- ArgoCD is composed of several microservices, each with a distinct responsibility.
- Understanding the components helps you troubleshoot issues and tune the installation.
- ArgoCD uses Custom Resource Definitions (CRDs) to represent Applications, AppProjects, and ApplicationSets.
What will we learn?¶
- The role of each ArgoCD component: server, repo-server, application-controller, dex, redis
- How to verify all pods are healthy and ready
- What ArgoCD CRDs are installed and what they represent
- How to inspect the ArgoCD namespace for resources
Prerequisites¶
- Complete Lab 000 to have a running ArgoCD installation
01. ArgoCD Architecture Overview¶
ArgoCD consists of these core components:
argocd namespace
├── argocd-server # API server + Web UI (gRPC + REST)
├── argocd-repo-server # Clones repos, generates manifests
├── argocd-application-controller # Reconciliation loop (desired vs actual)
├── argocd-dex-server # SSO / OIDC identity provider bridge
├── argocd-redis # In-memory cache for repo-server/app-controller
└── argocd-notifications-controller # Sends alerts (Slack, email, etc.)
02. Component Roles¶
| Component | Role |
|---|---|
argocd-server | API server - serves the web UI over HTTPS, exposes the gRPC API (used by the argocd CLI), handles authentication and authorization |
argocd-repo-server | Repository server - clones Git repositories, runs Helm/Kustomize/other config management tools, caches rendered manifests in Redis |
argocd-application-controller | Reconciliation engine - continuously compares desired state (Git) with actual state (cluster), reports sync/health status, triggers automatic syncs |
argocd-dex-server | Identity provider bridge - supports GitHub, GitLab, LDAP, OIDC, bridges external identity to ArgoCD’s internal user model |
argocd-redis | Shared cache - caches repository data from argocd-repo-server, reduces repeated Git clones and manifest generation |
03. Verify All Pods Running¶
# Check all pods in the argocd namespace
kubectl get pods -n argocd
# Watch pods in real time
kubectl get pods -n argocd -w
# Detailed pod information
kubectl describe pods -n argocd
# Check resource usage
kubectl top pods -n argocd 2>/dev/null || echo "metrics-server not installed"
04. Explore ArgoCD CRDs¶
ArgoCD installs three CRDs into the cluster:
# List all ArgoCD CRDs
kubectl get crd | grep argoproj.io
# Describe the Application CRD
kubectl explain application --api-version argoproj.io/v1alpha1
# Describe the AppProject CRD
kubectl explain appproject --api-version argoproj.io/v1alpha1
# Describe the ApplicationSet CRD
kubectl explain applicationset --api-version argoproj.io/v1alpha1
The three CRDs:
applications.argoproj.io- represents a deployed application (source + destination)appprojects.argoproj.io- represents a logical grouping with access controlsapplicationsets.argoproj.io- represents a template that generates multiple Applications
05. Inspect Services and ConfigMaps¶
# List all services
kubectl get svc -n argocd
# List all ConfigMaps
kubectl get cm -n argocd
# Inspect the main ArgoCD config
kubectl describe cm argocd-cm -n argocd
# Inspect RBAC config
kubectl describe cm argocd-rbac-cm -n argocd
# List secrets (do not print values)
kubectl get secrets -n argocd
06. ArgoCD Server Version Info¶
# Check ArgoCD server version (requires port-forward to be active)
argocd version
# Check via kubectl
kubectl -n argocd exec deploy/argocd-server -- argocd version --server-side-only 2>/dev/null || true
# Get server info
argocd info 2>/dev/null || true

07. Hands-on¶
- List all pods in the
argocdnamespace and confirm every pod is1/1 Running:
??? success “Solution”
- Describe the
argocd-application-controllerStatefulSet and find its replica count and image version:
??? success “Solution”
kubectl describe statefulset argocd-application-controller -n argocd
# Look for: Replicas and Image fields
kubectl get statefulset argocd-application-controller -n argocd \
-o jsonpath='{.spec.template.spec.containers[0].image}'
- List all three ArgoCD CRDs and print the full name of each:
??? success “Solution”
kubectl get crd | grep argoproj.io
# Expected:
# applicationsets.argoproj.io
# applications.argoproj.io
# appprojects.argoproj.io
- Inspect the
argocd-cmConfigMap and identify where you would set theadmin.enabledflag:
??? success “Solution”
kubectl get cm argocd-cm -n argocd -o yaml
# The admin.enabled key can be added under data:
# data:
# admin.enabled: "true"
08. Summary¶
- ArgoCD is composed of six microservices:
server,repo-server,application-controller,dex-server,redis, andnotifications-controller - The
application-controlleris the reconciliation engine - it compares Git state with cluster state on every sync interval - Three CRDs define the ArgoCD API:
Application,AppProject, andApplicationSet - Configuration is stored in ConfigMaps (
argocd-cm,argocd-rbac-cm) in theargocdnamespace - Use
kubectl describeandkubectl get -o yamlto inspect any ArgoCD resource in detail