ArgoCD Sync Failed — Application Out of Sync and Health Degraded
About ArgoCD Sync Failed
Fix ArgoCD application sync failures where the live Kubernetes state drifts from the Git repository desired state, showing OutOfSync or Degraded status. This guide covers everything you need to know about this topic, including common causes, step-by-step solutions, and answers to frequently asked questions.
Here are the key things to understand: ArgoCD implements GitOps by continuously comparing Git repository manifests with live Kubernetes state. OutOfSync means the live state differs from the Git desired state. Degraded health means deployed resources are not in a healthy state (pods crashing, services down). Sync can fail due to validation errors, RBAC issues, or resource conflicts in the cluster. ArgoCD supports auto-sync which automatically applies changes when Git is updated. Understanding these fundamentals will help you diagnose and resolve this issue more effectively.
The most common reasons this occurs include: Manual changes made directly to Kubernetes cluster (kubectl edit/apply) bypassing Git. Helm chart values or Kustomize patches failing to render valid Kubernetes manifests. RBAC permissions preventing ArgoCD service account from creating or modifying resources. Resource hooks (PreSync, PostSync) failing and blocking the sync operation. Identifying the root cause is the first step toward finding the right solution.
To resolve this, follow these recommended steps: Check sync status in ArgoCD UI: click the application > view the sync diff to see what differs. View sync failure details: argocd app get APP_NAME or check the Events tab in the UI. Force sync to override manual changes: argocd app sync APP_NAME --force. Fix RBAC: ensure ArgoCD's service account has permissions in the target namespace. Check hooks: PreSync and PostSync jobs must complete successfully — check their pod logs. If these steps do not resolve the issue, consider consulting additional resources or a qualified professional.
This article is part of our Linux Error Codes collection on Error Codes Wiki. We provide comprehensive, up-to-date information to help you find solutions quickly.
Quick Answer
What causes drift between Git and live state?
Manual kubectl commands, Kubernetes controllers modifying resources (HPA scaling, CRD controllers), or admission webhooks adding default values. Enable ArgoCD auto-sync with self-heal to automatically correct drift.
Overview
Fix ArgoCD application sync failures where the live Kubernetes state drifts from the Git repository desired state, showing OutOfSync or Degraded status.
Key Details
- ArgoCD implements GitOps by continuously comparing Git repository manifests with live Kubernetes state
- OutOfSync means the live state differs from the Git desired state
- Degraded health means deployed resources are not in a healthy state (pods crashing, services down)
- Sync can fail due to validation errors, RBAC issues, or resource conflicts in the cluster
- ArgoCD supports auto-sync which automatically applies changes when Git is updated
Common Causes
- Manual changes made directly to Kubernetes cluster (kubectl edit/apply) bypassing Git
- Helm chart values or Kustomize patches failing to render valid Kubernetes manifests
- RBAC permissions preventing ArgoCD service account from creating or modifying resources
- Resource hooks (PreSync, PostSync) failing and blocking the sync operation
Steps
- 1Check sync status in ArgoCD UI: click the application > view the sync diff to see what differs
- 2View sync failure details: argocd app get APP_NAME or check the Events tab in the UI
- 3Force sync to override manual changes: argocd app sync APP_NAME --force
- 4Fix RBAC: ensure ArgoCD's service account has permissions in the target namespace
- 5Check hooks: PreSync and PostSync jobs must complete successfully — check their pod logs