Repository navigation
Replies: 3 comments 5 replies
|
For the single-App case, most of the "Healthy for a few seconds, then fails" window can be closed on the Kubernetes side rather than with glue code, because Argo CD's Deployment health just mirrors the rollout status (
Then the pipeline step becomes: argocd app get "$APP" --refresh >/dev/null # don't wait for polling/webhook
# poll until Argo has picked up your commit
until [ "$(argocd app get "$APP" -o json | jq -r .status.sync.revision)" = "$SHA" ]; do sleep 5; done
argocd app wait "$APP" --sync --health --timeout 900 # fails as soon as a resource turns Degraded, or at timeout( Failures that show up minutes later (memory leak, a bad dependency) will still get past this; that's where metric-based analysis comes in (Argo Rollouts (I used an AI assistant to go through the health-check code; I checked the logic and links myself.) |
|
For your last point, probe failures and container restarts are different counters. A failed readiness probe keeps the container unready; it does not restart it. A Argo CD's Deployment health check uses rollout progress and availability, not a restart-count budget. I would configure startup allowances per workload, make AI-generated; checked against the linked documentation and health-check code, without a live rollout reproduction. |
|
This is one of the most critical challenges when orchestrating multi-environment promotions (Staging -> Production) on top of an asynchronous GitOps engine like Argo CD. The core difficulty stems from three distinct timing gaps:
Here are the industry-standard patterns to solve this reliably: 1. Close the "Premature Healthy" Window at the Kubernetes Layer (
|
Uh oh!
There was an error while loading. Please reload this page.
Hello folks,
Opening a discussion to get feedbacks or informations regarding the recommended pattern(s) for a deployment pipeline that sits on top of ArgoCD and needs to know an App is synced + healthy for a given commit.
That's a follow-up of a discussion I started on Reddit some time ago. I'm copying the relevant pieces here.
Original question:
Discussion with @todaywasawesome:
D:
G:
D:
G:
D:
The referenced GH issues/PR are more about the "Progressive Sync" feature whick makes sense in a "environment promotion" context. However I'm not using these and I don't think they are the answer.
Let's forget about environment promotion, just think of a single App in a single environment, how would you go for checking that a commit you just pushed to a GitOps repo has been taken into account by ArgoCD and the App is actually Synced & Healthy for "long enough"?
We have a bunch of code on top the ArgoCD API to do that by waiting an arbitrary amount of time + checking the App status + checking some resources statuses (typically
Deployments) but it feels heavy and not the right way.A concrete scenario we hit sometimes and made us implement this "glue code" on top of ArgoCD API is that an App goes Synced and Healthy for a few seconds but the pods of
Deploymentare rolled out progressively and fail. Depending on what and when we look at in the ArgoCD API, we may not be able to detect this failure.Obviously a part of the answer is to detect such failures "after" rather than during the deployment which is by nature async in a GitOps/ArgoCD context but I'm looking for way to catch most of these failures sooner: typically when a new version doesn't start at all.
All reactions