Multi-Cluster Deployment Using Argo CD & GitOps: A Scalable DevOps Strategy

Managing multiple Kubernetes clusters can become overwhelming fast — especially when you’re trying to ensure consistency, security, and scalability across environments. That’s where GitOps and Argo CD step in as your DevOps sidekicks.
In this post, you’ll learn how to:
Deploy applications to multiple Kubernetes clusters using Argo CD
Use Git as the source of truth
Understand why Argo CD is preferred over traditional CI/CD tools for this use case
What You Need Before Starting
At least two Kubernetes clusters (on EKS, GKE, AKS, or even Minikube/kind for testing)
kubectl and Kubeconfigs for all clusters
Argo CD installed (we’ll walk through this)
A Git repository containing your Kubernetes manifests or Helm charts
Why Argo CD?
✅ Declarative & Git-Centric
Argo CD follows the GitOps model. Everything — your deployment configs, service definitions, or Helm values — lives in Git. You don’t push changes to the cluster; Argo CD pulls them from Git, ensuring the cluster always reflects the Git state.
✅ Multi-Cluster Friendly
Argo CD supports deploying to multiple clusters from a single control plane. You can manage dev, staging, and prod clusters from one place, reducing tool sprawl.
✅ Visual UI & RBAC
A powerful web UI gives you full visibility into what’s deployed where. And with fine-grained RBAC, you can control who can deploy what and where.
✅ Drift Detection
If someone manually changes something in a cluster, Argo CD will detect it and can optionally auto-revert it to match the Git state.
Step-by-Step: Multi-Cluster Deployment with Argo CD
Pick one cluster to act as your Argo CD control plane.
1️⃣ Install Argo CD on a Management Cluster
kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Once deployed, access Argo CD UI:
kubectl port-forward svc/argocd-server -n argocd 8080:443
kubectl port-forward svc/argocd-server -n argocd 8080:443
Visit https://localhost:8080 and log in with:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
2️⃣ Add Target Clusters to Argo CD
Assuming you already have context access to both clusters:
argocd login localhost:8080
argocd cluster add argocd cluster add <context-name-for-cluster-a>
add argocd cluster add <context-name-for-cluster-b>
argocd cluster list
4️⃣ Create Argo CD Applications
You can define these as YAML (Application CRDs) or through the UI.
Here’s an example of two apps from the CLI:
🔄 Automation & GitOps Flow
Once set up:
Developers push changes to Git
Argo CD automatically syncs the changes to the correct cluster
If someone tampers with the live environment, Argo CD detects drift and fixes it
📊 Real-World Use Cases
Isolate environments (dev, stage, prod) across different clusters
Blue/green or canary deployments across clusters
Multi-tenant apps running on different clusters
Centralized control for distributed teams
Subscribe to my newsletter
Read articles from akash rawat directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
