Prerequisites: familiarity with Git for Beginners, Kubernetes for the Absolute Beginners - Hands-on Tutorial (manifests, namespaces), and the idea of declarative infrastructure will help you follow this lesson.
What is an ArgoCD Application (Kubernetes Custom Resource)
An ArgoCD Application is a Kubernetes custom resource (CR) that declares how ArgoCD should deploy and manage an application. It maps the Git (or other supported) source of truth to a target Kubernetes cluster and namespace, and specifies the toolchain used to render or package manifests. Key responsibilities of an Application:- Identify the source of truth (Git repo, Helm chart repo, etc.).
- Specify the packaging or templating tool (Helm, Kustomize, plain manifests, Jsonnet, etc.).
- Define the target cluster and namespace for deployment.
- Associate the Application with an ArgoCD Project for policy and access control.
source.repoURL&source.pathidentify the configuration (the application’s source of truth).source.targetRevisionpins the Git revision (branch, tag, or commit).destination.serveranddestination.namespacespecify where resources are applied.projectgroups Applications and enforces boundaries (RBAC, allowed clusters/namespaces, repo rules).syncPolicydefines whether ArgoCD auto-applies changes or requires a manual sync.
Supported Source Types
ArgoCD supports multiple source and packaging types. Choose the appropriate source type and set any tool-specific options when creating an Application.| Source Type | Use Case | Example / Note |
|---|---|---|
| Plain Kubernetes manifests | Simple YAML/Kubernetes objects stored in a repo | Directory of manifests or overlays |
| Kustomize | Overlaying and patching manifests without templating | kustomize build options |
| Helm charts | Packaging with templating and values overrides | Helm values files and valueFiles |
| Jsonnet | Advanced declarative configuration language | Jsonnet libraries and imports |
| Config Management Plugins | Custom build tools or processors | Use for bespoke or unsupported tools |
source block to indicate the repository, path, and tool-specific configuration (e.g., Helm values, Kustomize options).
ArgoCD Projects
ArgoCD Projects are logical groups for Applications that help with multi-team organization and security. Projects let you:- Restrict which clusters and namespaces Applications can deploy to.
- Control which Git repositories and revision patterns are allowed.
- Apply RBAC, admission, and resource quotas across Applications.
Target State vs Live State
- Target state: the desired/application configuration declared in Git (Application
source). - Live state: the actual state of Kubernetes resources running in the cluster.
Synchronization (Reconciliation)
Synchronization (or reconciliation in GitOps terms) is the process of applying the target state to the cluster so the live state becomes identical to Git. Sync modes:- Manual sync: triggered by an operator (UI, CLI, or API).
- Automated sync: ArgoCD automatically applies detected changes when
syncPolicy.automatedis configured.
Statuses: Sync, Operation, and Health
ArgoCD reports multiple status dimensions for each Application — understanding these is critical for operations and troubleshooting.| Status Type | Common Values | Meaning |
|---|---|---|
| Sync status | Synced / OutOfSync | Whether the live state matches the target state |
| Operation status | Succeeded / Failed / Running / Terminated / Error | Result of the last sync or in-progress operation |
| Health status | Healthy / Progressing / Degraded / Missing / Unknown | Aggregated resource-level health computed via health checks |
- Sync status tells you if resources in the cluster match Git.
- Operation status reflects the most recent operation (for example, the result of a sync).
- Health status is derived from built-in or custom health checks per resource type and then aggregated for the Application.
You can extend or customize health checks for special resource types using custom health checks or resource health overrides.
Refresh and Manual Sync (CLI examples)
- Refresh: re-evaluates the Application by fetching the latest revision from Git and comparing it to the cluster. It does not change cluster resources unless a sync follows.
- Manual Sync: applies the target state to the cluster. You can trigger this from the UI, the API, or the
argocdCLI.
argocd CLI is authenticated to the ArgoCD server):
--prune, --self-heal, and --revision to control the sync behavior.
Best Practices and Day-to-Day Concepts
- Keep the Git repository as the single source of truth for application configuration.
- Use Projects to enforce security and deployment boundaries.
- Pin
targetRevisionto a branch, tag, or commit for reproducible deployments. - Prefer automated sync for stateless infra and manual sync for critical production systems unless you implement appropriate safeguards.
- Monitor Sync, Operation, and Health statuses in the UI or via alerts to detect drift and failures early.
Summary
- An ArgoCD Application maps Git to cluster deployment and describes packaging and destination.
- Projects organize Applications and enforce policies and access boundaries.
- Target state is defined in Git; live state is what runs in Kubernetes.
- ArgoCD continuously reconciles live and target states and reports Sync, Operation, and Health statuses.
- Use refresh to re-evaluate an Application and sync to apply changes (manual or automated via
syncPolicy).
Links and References
- ArgoCD Documentation: https://argo-cd.readthedocs.io/
- Kubernetes Concepts: https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/
- GitOps with ArgoCD: https://argo-cd.readthedocs.io/en/stable/getting_started/
- Kustomize: https://kustomize.io/
- Helm: https://helm.sh/
- Git: https://git-scm.com/