Deployed a new version via ArgoCD. The app stayed in Progressing for 15 minutes. Normally it takes 2 minutes.
Initial check:
argocd app get my-app
# Status: Progressing
# Message: Waiting for rollout to finish: 1 out of 3 updated replicas are available...The deployment was partially rolled out — 1 pod running, 2 stuck. Checked the pods:
kubectl get pods -n production -l app=my-app
# my-app-7d6b4f9-xxxx 0/1 Pending 0 12m
# my-app-7d6b4f9-yyyy 0/1 Pending 0 12mkubectl describe pod my-app-7d6b4f9-xxxx -n production
# Events:
# Warning FailedScheduling pod/my-app-7d6b4f9-xxxx 0/3 nodes are available:
# 3 Insufficient cpu.Root cause: The new version had a higher CPU request (500m → 1000m). The cluster didn't have enough free CPU to schedule 2 more pods, but ArgoCD's default timeout (10 minutes for Progressing) hadn't yet been hit.
Fix:
- Reverted the CPU request change immediately to unblock:
argocd app set my-app --helm-set resources.requests.cpu=500m
argocd app sync my-app-
Added cluster nodes to handle the real requirement.
-
Set a more aggressive ArgoCD timeout so it fails faster next time instead of just hanging:
# In Application spec
spec:
syncPolicy:
syncOptions:
- RespectIgnoreDifferences=true
retry:
limit: 3
backoff:
duration: 5s
maxDuration: 3mLesson: When a deployment is stuck in Progressing, check pod scheduling before assuming a code bug. kubectl describe pod on a pending pod tells you exactly why it can't schedule.