Argo CD: A GitOps Continuous Delivery Tool for Kubernetes – Architecture, Features, Installation, and Usage Guide
This article provides a comprehensive overview of Argo CD, a Kubernetes‑native GitOps continuous deployment tool, covering its architecture, core components, supported manifest types, key features, installation steps, cluster configuration, application creation, and synchronization methods using both CLI and UI.
Argo CD is a Kubernetes‑native continuous deployment tool that follows the declarative GitOps model, automatically synchronizing and deploying applications whenever the Git repository changes.
It uses the Git repository as the single source of truth for the desired application state and supports multiple Kubernetes manifest types, including Kustomize, Helm charts, Ksonnet applications, Jsonnet files, plain YAML/JSON manifests, and custom config‑management plugins.
Architecture
Argo CD runs as a Kubernetes controller that continuously watches running applications, comparing the live state with the desired target state defined in the Git repo. When a drift is detected, the application is marked as OutOfSync , and Argo CD reports the differences while offering tools to sync the state manually or automatically.
The main components are:
API Service : a gRPC/REST service exposing interfaces for the Web UI, CLI, and CI/CD systems. It handles application management, status reporting, operation execution (sync, rollback, custom actions), repository and cluster credential storage, authentication/authorization, RBAC, and Git webhook listening.
Repository Service : an internal service that caches Git repositories locally and generates Kubernetes manifests based on the provided repository URL, revision, application path, and template configuration (parameters, Ksonnet environment, Helm values, etc.).
Application Controller : a Kubernetes controller that watches applications, detects OutOfSync states, and triggers synchronization, invoking user‑defined lifecycle hooks (PreSync, Sync, PostSync).
Features
Automatic deployment of applications to specified target environments.
Support for multiple configuration/templating tools (Kustomize, Helm, Ksonnet, Jsonnet, plain YAML).
Multi‑cluster management.
SSO integration (OIDC, OAuth2, LDAP, SAML 2.0, GitHub, GitLab, Microsoft, LinkedIn).
Multi‑tenant RBAC policies.
Rollback to any configuration stored in Git.
Health status analysis of application resources.
Automatic config detection and visualization.
Manual or automatic synchronization to the desired state.
Web UI providing a real‑time view of application activity.
CLI for automation and CI integration.
Webhook integration (GitHub, BitBucket, GitLab) and AccessTokens for automation.
PreSync, Sync, PostSync hooks for complex deployment strategies (blue/green, canary).
Audit of application events and API calls.
Prometheus metrics.
Core Concepts
Application : a CRD representing a set of Kubernetes resources defined by manifests.
Application source type : the tool used to build the application (e.g., Helm, Kustomize).
Target state : the desired state expressed in the Git repository.
Live state : the actual state of resources running in the cluster.
Sync status : indicates whether the live state matches the target state.
Sync : the process of reconciling the live state to the target state.
Health : the overall health of the application (running, degraded, etc.).
Installation
Prerequisite: a Kubernetes cluster reachable via kubectl . Install the latest stable version (v2.0.4) with:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.0.4/manifests/install.yamlFor a high‑availability deployment, use the HA manifest:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.0.4/manifests/ha/install.yamlAfter installation, verify the pods:
kubectl get pods -n argocdYou can disable authentication for simple use cases with the --disable-auth flag via a patch to the argocd-server deployment.
Install the CLI by downloading the latest release:
VERSION=$(curl --silent "https://api.github.com/repos/argoproj/argo-cd/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/$VERSION/argocd-linux-amd64
chmod +x /usr/local/bin/argocd
argocd versionThe initial admin password is stored in the secret argocd-initial-admin-secret in the argocd namespace:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d && echoLog in via the UI ( argocd.k8s.local ) or CLI:
argocd login argocd.k8s.localCluster Configuration
To deploy to external clusters, register the cluster with Argo CD using its API server address (e.g., https://kubernetes.default.svc ) and the command:
argocd cluster add CONTEXTNAMECreating an Application
Example repository: https://github.com/argoproj/argocd-example-apps.git . Create the app via CLI:
argocd app create guestbook \
--repo https://github.com/argoproj/argocd-example-apps.git \
--path guestbook \
--dest-server https://kubernetes.default.svc \
--dest-namespace defaultOr create it through the Web UI by clicking +New App , filling in the repository URL, revision, path, and destination cluster/namespace.
Deploying the Application
Since the sync policy is set to Manual , the app remains OutOfSync until you trigger a sync.
Sync via CLI:
argocd app sync guestbookOr click the Sync button in the UI. After synchronization, the resources appear in the cluster:
kubectl get pods
kubectl get svcThe article concludes with a preview of upcoming Argo CD practices.
DevOps Cloud Academy
Exploring industry DevOps practices and technical expertise.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.