Explains how ArgoCD assesses Kubernetes application health using built-in checks and customizable Lua scripts to surface resource status and enforce application-specific invariants
Let’s look at how ArgoCD performs application health checks. ArgoCD continuously monitors the Kubernetes resources it manages and surfaces a single health status per Application by aggregating checks across those resources.
If a resource fails — for example, a Deployment that cannot reach its desired replica count — ArgoCD will mark that resource (and potentially the overall Application) as Unhealthy or Degraded depending on the observed condition.
ArgoCD includes built-in checks for many common Kubernetes resources. The following table summarizes typical checks:
Resource Type
What ArgoCD verifies
Deployment, StatefulSet, DaemonSet
Observed replicas match the desired replica count; rollout status for readiness.
Service (type=LoadBalancer)
A LoadBalancer service has an assigned external IP/hostname.
Ingress
Backing service endpoints exist and Ingress status is populated (where applicable).
PersistentVolumeClaim
The PVC is bound to a PV.
CronJob (suspended)
Suspended CronJobs are reported as Suspended.
These defaults cover many use cases, but sometimes you need checks tailored to application semantics.
Custom health Lua scripts run inside ArgoCD and should defensively handle missing fields to avoid runtime errors. Place these customizations in the argocd-cm ConfigMap (in the argocd namespace).
When default checks are insufficient—for example, you want to validate the content of a ConfigMap or enforce an application-specific invariant—ArgoCD supports custom health checks written in Lua. Customizations live in the argocd-cm ConfigMap under keys like:resource.customizations.health.<Kind>Below is a simple, practical example that flags a ConfigMap as Degraded if it contains an invalid color choice.color-cm.yaml
argocd-cm.yaml (adds a custom health check for ConfigMap)
Copy
apiVersion: v1kind: ConfigMapmetadata: name: argocd-cmdata: resource.customizations.health.ConfigMap: | -- hs is the health status object returned to ArgoCD hs = {} hs.status = "Healthy" -- Guard against nil to avoid runtime errors when fields are missing if obj ~= nil and obj.data ~= nil and obj.data.TRIANGLE_COLOR == "white" then hs.status = "Degraded" hs.message = "Use a different COLOR" end return hs timeout.reconciliation: "300s"
How this works:
ArgoCD executes the Lua function for each ConfigMap evaluated by the Application because ConfigMap health was customized.
The Lua script checks obj.data.TRIANGLE_COLOR; if it equals “white”, the script returns a Degraded status and a message.
ArgoCD surfaces the Degraded state in the Application view, making the misconfiguration visible immediately and simplifying troubleshooting.
By combining ArgoCD’s built-in checks with focused custom Lua health checks, you can build precise, application-aware health assessments that help teams detect and fix configuration problems faster.