Getting Started with ArgoCD
ArgoCD is a declarative, GitOps continuous delivery tool for Kubernetes. It automates the deployment of applications by continuously comparing the desired state defined in a Git repository with the actual live state in your Kubernetes cluster, and reconciling any differences — the core premise of GitOps.
Why ArgoCD?
Traditional CI/CD pipelines push changes to clusters using external tools and credentials. ArgoCD flips this model: it runs inside your cluster and pulls changes from Git. This approach provides:
- Git as Single Source of Truth: Every change is versioned, reviewed, and auditable in Git
- Easy Rollback: Revert a Git commit and ArgoCD automatically reverts the cluster state
- Cluster Disaster Recovery: Rebuild your entire cluster from the Git repository
- Better Access Control: Leverage Git's permission model (CODEOWNERS, branch protection) instead of granting CI systems direct cluster access
How ArgoCD Works — The Reconciliation Loop
At the heart of ArgoCD is a continuous reconciliation loop that detects and corrects configuration drift:
- The Repo Server clones your Git repository and renders Helm/Kustomize/Jsonnet into raw Kubernetes manifests.
- The Application Controller compares the desired state (from Git) with the live state (from the Kubernetes API).
- If drift is detected and auto-sync is enabled, ArgoCD applies the changes automatically; otherwise it reports the app as Out of Sync .
Footnotes
-
Argo CD Official Documentation - Overview of ArgoCD, GitOps principles, and benefits of Git as single source of truth. ↩ ↩2 ↩3 ↩4
-
Argo CD Component Architecture - Official component architecture documentation detailing dependencies and reconciliation flow. ↩
ArgoCD Tutorial for Beginners | GitOps CD for Kubernetes
ArgoCD Architecture: Core Components
An ArgoCD installation consists of several components working together inside the argocd namespace 2:
Custom Resource Definitions (CRDs)
ArgoCD extends the Kubernetes API with three key CRDs:
- Application: Defines a deployed application — its source repo, destination cluster/namespace, and sync policy.
- AppProject: Groups applications with shared RBAC policies, source repos, and destination clusters.
- ApplicationSet: Automates the creation of multiple
Applicationresources from generator patterns (cluster, git, list, matrix, etc.) .
Component Dependency Diagram
Footnotes
-
ArgoCD Architecture & Installation - AI Agent Factory - Comprehensive breakdown of five core components and installation steps. ↩ ↩2 ↩3 ↩4
-
ArgoCD Architecture Core Components - KodeKloud - Component table and architecture details for CAPA certification prep. ↩ ↩2
-
Argo CD Getting Started - Official getting started guide with installation, CLI, access, and first application deployment. ↩
ArgoCD Development & Evolution Timeline
Project Inception
2018ArgoCD was created by Intuit as an open-source GitOps continuous delivery tool for Kubernetes, adopted into the Argo project family."
CNCF Sandbox
2019ArgoCD was accepted as a CNCF Sandbox project, gaining broader community visibility and adoption."
v1.x Stable Releases
2020Major stable releases introduced core features: ApplicationSets, SSO via Dex, multi-cluster management, and Helm/Kustomize support."
Helm Chart & HA
2021Official Helm chart maturity, high-availability mode with Redis HA, and progressive delivery integration with Argo Rollouts."
CNCF Incubating
2023ArgoCD was promoted to CNCF Incubating status, reflecting production-grade maturity and wide industry adoption."
v3.x Release
2024-2025Major v3 release with improved performance, component-based architecture refinements, and server-side apply by default."
Installing and Configuring ArgoCD
- 1Step 1
Create a dedicated namespace to isolate ArgoCD components:
1kubectl create namespace argocdThis keeps all ArgoCD services and application resources separated from your workloads.
- 2Step 2
Apply the official installation manifests. The
--server-side --force-conflictsflags are required due to CRD size limitations :1kubectl apply -n argocd \ 2 --server-side --force-conflicts \ 3 -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yamlFor production, pin to a specific version (e.g.,
v3.2.0) rather than usingstable.Footnotes
-
Argo CD Getting Started - Official getting started guide with installation, CLI, access, and first application deployment. ↩ ↩2
-
- 3Step 3
Download the CLI for your platform. On macOS/Linux:
1# macOS 2brew install argocd 3 4# Linux (amd64) 5curl -sSL -o /usr/local/bin/argocd \ 6 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64 7sudo chmod +x /usr/local/bin/argocdThe CLI enables scripting, automation, and headless operations.
- 4Step 4
By default the API server is not externally exposed. Use port-forwarding for local access:
1kubectl port-forward svc/argocd-server -n argocd 8080:443Alternatively, change the Service type to
LoadBalanceror configure an Ingress for production .Footnotes
-
Argo CD Getting Started - Official getting started guide with installation, CLI, access, and first application deployment. ↩
-
- 5Step 5
The initial admin password is auto-generated and stored in a Kubernetes Secret:
1kubectl -n argocd get secret argocd-initial-admin-secret \ 2 -o jsonpath="{.data.password}" | base64 -dLog in and change the password immediately :
1argocd login localhost:8080 2argocd account update-passwordFootnotes
-
Argo CD Getting Started - Official getting started guide with installation, CLI, access, and first application deployment. ↩
-
- 6Step 6
ArgoCD can deploy to its own cluster by default. To add an external cluster target :
1argocd cluster add <CONTEXT_NAME>This creates the necessary ServiceAccount and RBAC bindings in the target cluster.
Footnotes
-
GitOps Tutorial: Getting Started With GitOps & Argo CD - Octopus Deploy - Step-by-step GitOps tutorial covering cluster registration and application creation. ↩
-
- 7Step 7
Use the CLI to deploy a sample guestbook application :
1argocd app create guestbook \ 2 --repo https://github.com/argoproj/argocd-example-apps.git \ 3 --path guestbook \ 4 --dest-server https://kubernetes.default.svc \ 5 --dest-namespace defaultOr create it graphically via the + New App button in the Web UI.
Footnotes
-
Argo CD Getting Started - Official getting started guide with installation, CLI, access, and first application deployment. ↩
-
Alternative Installation: Helm Chart
For production deployments, the Helm chart offers more flexibility and configuration options :
1# Add the ArgoCD Helm repository 2helm repo add argo https://argoproj.github.io/argo-helm 3helm repo update 4 5# Install with default values 6helm install argocd argo/argo-cd -n argocd --create-namespace 7 8# Or with custom values for production 9helm install argocd argo/argo-cd -n argocd \ 10 -f argocd-custom-values.yaml
A typical argocd-custom-values.yaml for production might include:
1server: 2 replicas: 2 3 ingress: 4 enabled: true 5 annotations: 6 cert-manager.io/cluster-issuer: letsencrypt-prod 7 8controller: 9 replicas: 1 10 resources: 11 requests: 12 cpu: 500m 13 memory: 512Mi 14 15redis: 16 ha: 17 enabled: true # Enable Redis HA for production
Footnotes
-
GitOps with Argo CD: Comprehensive Installation Guide - Medium - Detailed guide covering default, custom path, and namespace-scoped RBAC installations. ↩
1apiVersion: argoproj.io/v1alpha1 2kind: Application 3metadata: 4 name: guestbook 5 namespace: argocd 6spec: 7 project: default 8 source: 9 repoURL: https://github.com/argoproj/argocd-example-apps.git 10 targetRevision: HEAD 11 path: guestbook 12 destination: 13 server: https://kubernetes.default.svc 14 namespace: default 15 syncPolicy: 16 automated: 17 prune: true 18 selfHeal: true 19 syncOptions: 20 - CreateNamespace=true
Understanding Sync Policies
The sync policy controls how and when ArgoCD synchronizes your application state :
| Policy | Behavior | When to Use |
|---|---|---|
| Manual | Sync triggered only by operator action | Production, high-risk changes, compliance environments |
| Auto Sync | Automatically applies Git changes to the cluster on detection | Dev/staging environments, low-risk deployments |
| Self-Heal | Automatically corrects configuration drift when manual cluster changes are detected | Enforce immutability, prevent manual overrides |
| Auto-Prune | Removes cluster resources that are no longer defined in Git | Clean decommissioning of removed resources |
CreateNamespace=true— Auto-create the destination namespacePrunePropagationPolicy=foreground— Control how pruned resources are deletedPruneLast=true— Prune resources after new ones are healthyApplyOutOfSyncOnly=true— During auto-sync, only apply resources that differ (saves API server load)Validate=false— Skip server-side validation
Retry Configuration
Failed syncs can be automatically retried:
1syncPolicy: 2 automated: 3 prune: true 4 selfHeal: true 5 retry: 6 limit: 5 7 backoff: 8 duration: 5s # Initial wait 9 factor: 2 # Exponential multiplier 10 maxDuration: 3m # Maximum wait between retries
This implements exponential backoff: cap .
Footnotes
-
ArgoCD Sync Policies: A Practical Guide - Octopus Deploy - In-depth guide to manual, automated, self-heal, selective sync, and resource protection options. ↩ ↩2 ↩3
ArgoCD Sync Policy Comparison
Feature availability across sync policy types
Boolean Flags — A Common Pitfall
When creating applications via the CLI, sync policy flags like --auto-prune and --self-heal are boolean flags. Including them in the command sets them to true, even without an explicit value. Many beginners accidentally enable auto-prune or self-heal by adding these flags without understanding their impact. Self-heal will override any manual cluster changes and auto-prune will delete resources removed from Git — always double-check your intent.
Use the App of Apps Pattern
For managing multiple applications, adopt the App of Apps pattern: create a single ArgoCD Application resource whose source directory contains other Application manifests. ArgoCD will automatically deploy and manage all child applications. This gives you a single Git repository to control your entire deployment fleet, and changes to any child Application manifest are automatically detected and applied .
Footnotes
-
Best Practices ArgoCD: K8s Deployment Strategy - Medium - Community best practices covering App of Apps, ApplicationSet, sync policies, and retry configuration. ↩
Common Questions & Edge Cases
Deploying Your First Application — End-to-End Walkthrough
- 1Step 1
Confirm all pods are running before proceeding:
1kubectl get pods -n argocdYou should see pods for
argocd-server,argocd-repo-server,argocd-application-controller,redis, anddexinRunningstatus. - 2Step 2
1# Port-forward the API server (in a separate terminal) 2kubectl port-forward svc/argocd-server -n argocd 8080:443 3 4# Retrieve the initial admin password 5kubectl -n argocd get secret argocd-initial-admin-secret \ 6 -o jsonpath="{.data.password}" | base64 -d 7 8# Log in 9argocd login localhost:8080 - 3Step 3
1argocd app create guestbook \ 2 --repo https://github.com/argoproj/argocd-example-apps.git \ 3 --path guestbook \ 4 --dest-server https://kubernetes.default.svc \ 5 --dest-namespace default - 4Step 4
Since the default sync policy is Manual, trigger the initial deployment:
1argocd app sync guestbookOr click Sync in the Web UI. ArgoCD will apply all manifests from the
guestbookpath to the cluster. - 5Step 5
1# Check application status 2argocd app get guestbook 3 4# The app should show as Healthy and Synced 5# Verify resources in the cluster 6kubectl get deployments,services -n default - 6Step 6
To see ArgoCD's drift detection in action, manually scale the deployment:
1kubectl scale deployment guestbook-ui --replicas=5 -n defaultThen check the app status — ArgoCD will report Out of Sync because the live replicas count (5) doesn't match the desired state in Git. If self-heal were enabled, it would automatically revert to the Git-defined replica count.
Best Practices Summary
Drawing from community experience and official guidance 3:
- Use Declarative Application Manifests — Store
ApplicationCRDs in Git, not just create them via CLI. This makes your ArgoCD configuration itself GitOps-managed. - Adopt the App of Apps or ApplicationSet Pattern — Manage fleet deployments declaratively rather than creating individual applications manually.
- Pin ArgoCD Versions — Avoid using the
stabletag in production; pin to a specific version to prevent unexpected upgrades . - Separate App Repos from Source Code — ArgoCD should point to a configuration repository (manifests, Helm values), not your source code repo. CI pipelines build images and update the config repo; ArgoCD deploys from the config repo .
- Enable RBAC via AppProjects — Use
AppProjectCRDs to restrict which repos, clusters, and namespaces teams can deploy to. - Protect Critical Resources — Use the annotation
argocd.argoproj.io/sync-options: Delete=falseto prevent accidental deletion of resources like PersistentVolumeClaims . - Monitor ArgoCD Metrics — Expose Prometheus metrics and set up alerts for failed syncs, out-of-sync apps, and controller health.
Footnotes
-
Best Practices ArgoCD: K8s Deployment Strategy - Medium - Community best practices covering App of Apps, ApplicationSet, sync policies, and retry configuration. ↩
-
Argo CD Best Practices - Octopus Deploy - Production best practices including separation of source code and config repos, and audit trail maintenance. ↩ ↩2
-
Best practices for syncPolicy for CI/CD - GitHub Discussion - Community discussion on automated vs. manual sync tradeoffs in CI/CD pipelines. ↩
-
Argo CD Getting Started - Official getting started guide with installation, CLI, access, and first application deployment. ↩
-
ArgoCD Sync Policies: A Practical Guide - Octopus Deploy - In-depth guide to manual, automated, self-heal, selective sync, and resource protection options. ↩
Knowledge Check
What is the primary difference between traditional CI/CD pipelines and ArgoCD?
Explore Related Topics
Get Your First Software Job: A Complete Guide
A step‑by‑step guide to secure your first software engineering role, from market outlook to offer negotiation.
- growth (≈129k jobs/yr) despite a 2024 dip; postings for 0‑3 yr experience rose .
- Build end‑to‑end projects with real users, Git, CI/CD, and deployment to show developer‑level ability.
- Use an ATS‑friendly XYZ resume, keep LinkedIn/GitHub All‑Star, and spend 80 % of time networking.
- Solve 30‑50 coding problems, study system design, and rehearse STAR stories while narrating your approach.
- Negotiate total pay with , aiming for a increase.
GitHub Actions Architecture
GitHub Actions is an event‑driven CI/CD system that parses workflows, schedules jobs, and runs them on hosted or self‑hosted runners.
- Events (push, PR, schedule, manual) create a JSON payload that triggers the workflow engine.
- It parses YAML, evaluates
${{ }}expressions, expandsstrategy.matrix(e.g., jobs), and builds a DAG fromneeds:. - Jobs are queued and run on either ephemeral GitHub‑hosted runners (clean VM) or persistent self‑hosted runners (higher risk).
- Actions come in three runtimes—Docker, JavaScript, and composite—each with different startup speed.
- Security uses a scoped
GITHUB_TOKEN, OIDC for short‑lived cloud credentials, and runner‑group access controls.