Sync, health & status

Synced, healthy, and diffs.

Advanced12 min · lesson 3 of 12

Argo CD constantly compares the desired state (from Git) with the live state (in the cluster) and reports two independent statuses per Application. Sync status is whether the cluster matches Git: Synced (identical) or OutOfSync (they differ, with a diff you can inspect). Health status is whether the workloads are actually working: Healthy, Progressing, Degraded, Missing. An app can be Synced but Degraded (deployed as declared, but the pods are crashing) — the two answers are separate and both matter.

SYNC VS HEALTH: TWO INDEPENDENT STATUSES
Sync status (does it match Git?)
Synced
cluster identical to Git
OutOfSync
differs — inspect the diff
Health status (is it actually working?)
Healthy
replicas available
Progressing
rolling out
Degraded
pods crashing
Missing
not present yet
The two answers are separate: an app can be Synced but Degraded, or Healthy but OutOfSync. Watch both.
terminal
$ argocd app get payments-api
Name: payments-api
Sync Status: OutOfSync (to v1.4.0)
Health Status: Healthy
GROUP KIND NAMESPACE STATUS HEALTH
apps Deployment payments OutOfSync Healthy
$ argocd app diff payments-api # exactly what differs from Git

Syncing

When an app is OutOfSync, syncing applies the Git state to the cluster. You can sync manually (argocd app sync, or the UI) or automatically (next lesson). The diff view is central: before syncing, you see precisely which resources and fields differ, so a sync is never a black box. Health is computed with built-in rules per resource kind (a Deployment is Healthy when its replicas are available) and can be extended with custom health checks for CRDs.

terminal
$ argocd app sync payments-api # apply the Git state now
$ argocd app wait payments-api --health # block until Healthy
# Synced = matches Git; Healthy = actually working. Watch both.
Synced does not mean working
It is easy to see Synced and assume success, but Synced only means the cluster matches Git — the app can be Synced and Degraded because the image is bad or a dependency is down. Always check health, not just sync, after a change, and gate promotions on Healthy. Conversely an app can be Healthy but OutOfSync (drift not yet corrected); the two statuses answer different questions.