Cheveo Cheatsheet

ArgoCD Sync Failed & Degraded Cheatsheet

13 Befehle zum Copy-Pasten. Vom Diagnose-Workflow über Sync-Fixes und Health-Debugging bis Webhooks, RBAC und CRDs, inkl. häufige Fehler und Schnell-Entscheidungen.

Blog-Artikel lesen →

Der Workflow

1 Get
2 Operation
3 Inspect
4 Logs
5 Fix

Diagnose-Workflow

1

Gesamtbild

argocd app get <app-name>

→ Sync, Operation und Health pro Ressource auf einen Blick. Zeigt, welche Ressource das Problem ist.

2

Sync-Fehler im Klartext

argocd app get <app-name> --show-operation

→ Phase (Failed/Error) und exakte Fehlermeldung der letzten Sync-Operation.

3

Controller-Logs

kubectl logs -n argocd \
  -l app.kubernetes.io/name=argocd-application-controller \
  --tail=100

→ Apply-Fehler, RBAC und Timeouts, die in der UI nicht sichtbar sind.

Sync Failed beheben

4

Manifest validieren

kubectl apply --dry-run=server -f manifest.yaml

→ Server-Side Dry-Run nutzt dieselbe Validierung wie ArgoCD beim echten Apply.

5

Immutable Field (Replace)

metadata:
  annotations:
    argocd.argoproj.io/sync-options: Replace=true

→ Für Felder, die nach Erstellung nicht änderbar sind (selector, clusterIP, volumeName).

6

Namespace automatisch erstellen

spec:
  syncPolicy:
    syncOptions:
      - CreateNamespace=true

→ Behebt "namespace not found" beim Sync.

7

Hook-Job debuggen

kubectl get pods -n <namespace> -l job-name=<hook-job>
kubectl logs -n <namespace> job/<hook-job>

→ PreSync/PostSync-Job mit Exit ≠ 0 bricht den Sync ab. Logs des Jobs prüfen.

Degraded beheben

8

Gecrashte Pods

kubectl get pods -n <namespace> -l app=<name>
kubectl logs -n <namespace> <pod> --previous

→ CrashLoopBackOff/ImagePullBackOff: Logs des vorherigen, gecrashten Containers.

9

Probe-Failures

kubectl describe pod -n <namespace> <pod> | grep -A5 -i readiness
kubectl get events -n <namespace> | grep -i probe

→ Pods laufen, werden aber nie Ready: Pfad, Port und initialDelaySeconds prüfen.

10

Service ohne Endpoints

kubectl get endpoints -n <namespace> <service>

→ Leere Endpoints = Service-Selector passt auf keine Pod-Labels.

Webhooks, RBAC & CRDs

11

RBAC-Fehler finden

kubectl logs -n argocd \
  -l app.kubernetes.io/name=argocd-application-controller \
  --tail=100 | grep -i forbidden

→ Dem Controller fehlen Cluster-Rechte: ClusterRole erweitern oder Project whitelisten.

12

Admission Webhook

kubectl get validatingwebhookconfigurations
kubectl describe constraint <name>   # Gatekeeper

→ Welcher Webhook (OPA/Kyverno) den Apply ablehnt. Steht auch in der Sync-Message.

13

CRD-Status lesen

kubectl describe certificate -n <namespace> <name>

→ Eingebaute Health-Checks: Certificate/Rollout-Status direkt lesen (Reason).

5 häufigste Fehler

Jeder davon hat uns in Production schon mindestens einmal Stunden gekostet.

1

"Synced" mit "funktioniert" verwechselt

Synced heißt nur Git = Cluster, nicht gesund. Health ist eine eigene Dimension.

2

Bei Degraded am Sync gedreht

Degraded ist ein Health-Problem → kubectl describe/logs, kein Re-Sync

3

Hook-Pods zu früh gelöscht

hook-delete-policy: HookSucceeded behält fehlgeschlagene Hook-Pods zur Analyse

4

Sync-Wave-Reihenfolge ignoriert

ArgoCD arbeitet streng aufsteigend: die früheste fehlschlagende Wave zuerst fixen

5

CRD ohne Custom Health Check

Ohne Lua-Check in argocd-cm interpretiert ArgoCD eigene CRDs als Unknown

Schnelle Entscheidungen

Synced + Degraded
→ Health-Problem → argocd app get
admission webhook denied
→ Policy erfüllen (Pattern 12)
field is immutable
→ Replace=true (Pattern 5)
exceeded progress deadline
→ Pods prüfen (Pattern 8)
forbidden
→ RBAC erweitern (Pattern 11)
2-Tage Hands-on Workshop

GitOps mit ArgoCD - vom Push zum Production-Deploy

Vom App-of-Apps Pattern bis Progressive Delivery: alles, was Sie für GitOps in der Produktion brauchen.

Workshop-Details ansehen