Architecture of GitOps Tools Like ArgoCD
Architecture of GitOps Tools Like ArgoCD
ArgoCD is not one big giant box, it’s made up of different micro services or small boxes. I’ve break down those.
Before I touched ArgoCD for real, I wanted to know what is actually running inside it. Turns out it is not one big thing, just a few small pieces talking to each other. Once you know who talks to whom, everything else makes sense.

The Big Picture
flowchart LR
user["User"] -->|UI / CLI| api["API Server"]
api <--> dex["OAuth Server (Dex)"]
repo["Repo Server"] -->|Talk to Git, get the state| git["Git"]
repo -->|Caching| redis["Redis"]
ctrl["Application Controller"] -->|Caching| redis
repo <-->|Sync| ctrl
ctrl -->|Talk to K8s, get the state| k8s["K8s Cluster"]
Who Does What
| Component | Job |
|---|---|
| API Server | Front door. Your UI and CLI both talk to this one |
| OAuth Server (Dex) | Takes care of login, so you can sign in using your existing accounts |
| Repo Server | Goes to Git and gets the desired state (your YAML) |
| Application Controller | Goes to K8s and gets the live state, then compares it with Git’s |
| Redis | Cache. Both Repo Server and Controller keep their answers here so they don’t ask again and again |
What Happens When
| Step | Who | What |
|---|---|---|
| 1 | You | Open UI or run CLI, API Server asks Dex to check who you are |
| 2 | Repo Server | Reads Git and gets what the state should be |
| 3 | Application Controller | Reads K8s and gets what the state is right now |
| 4 | Both | Sync: if they don’t match, controller makes K8s look like Git |
Note
The Application Controller is the one who does the reconcile work. Repo Server only knows Git, Controller is the only one who knows both sides.
That is all of it. Five boxes, and two of them (API Server and Dex) are only for letting you in.
Last updated on
