Demonstrates a multi-region high-availability deployment pipeline using Kargo. The same version of the app runs simultaneously in geographically distributed regions (modeled as separate namespaces/clusters).
Warehouse (image + git)
→ dev-east ──┐
→ dev-west ──┘ ← convergence gate (both must pass before staging)
→ staging manual gate; deploys east + west simultaneously
→ approve creates ServiceNow CR, waits for "Implement" state (1m soak)
→ prod-east auto-promote
→ prod-west auto-promote (2m soak after prod-east)
→ close closes the ServiceNow CR (2m soak after prod-west)
dev-east and dev-west both source directly from the warehouse and promote in parallel. The staging stage uses availabilityStrategy: All, meaning freight must have successfully passed through both dev regions before it can advance. A version that only works in one region cannot reach staging.
The staging stage renders Helm manifests for both -east and -west in a single promotion and triggers both Argo CD apps. This keeps the two regions in lockstep through staging.
prod-east deploys first (auto-promoted from approve). prod-west only auto-promotes after a 2-minute soak on prod-east, giving time to catch region-specific issues before rolling the second region.
approvecreates a change request viasnow-createand blocks onsnow-wait-for-conditionuntil the ticket reachesstate=-1(Implement). The ticket'ssys_idis stored on the freight usingset-metadata.closeretrieves thesys_idviafreightMetadata()and updates the ticket through Review → Closed after both prod regions are healthy.
Dev stages run kyverno-policy-check after rendering manifests, enforcing compliance before anything is committed to git.
Each stage renders manifests via helm-template and commits them to active-active/deploy/targets/{env}/manifests.yaml. Argo CD syncs each environment from its own path in the repo.
| App | Kargo Stage | Git Path |
|---|---|---|
active-active-dev-east |
dev-east |
active-active/deploy/targets/dev-east |
active-active-dev-west |
dev-west |
active-active/deploy/targets/dev-west |
active-active-staging-east |
staging |
active-active/deploy/targets/staging-east |
active-active-staging-west |
staging |
active-active/deploy/targets/staging-west |
active-active-prod-east |
prod-east |
active-active/deploy/targets/prod-east |
active-active-prod-west |
prod-west |
active-active/deploy/targets/prod-west |
approve and close are pure Kargo orchestration stages with no corresponding Argo CD app.
Auto-promotion is enabled for all stages except staging, which is the sole manual gate in the pipeline:
| Stage pattern | Auto-promote |
|---|---|
dev.* |
yes |
approve.* |
yes |
prod.* |
yes |
close.* |
yes |
staging |
no — manual gate |
- Show the convergence gate in action: promote a freight to
dev-eastbut blockdev-westand observe thatstagingstays locked - Show the ServiceNow CR being created in
approveand how the ticketsys_idtravels downstream via freight metadata toclose - Show the sequential soak between
prod-east→prod-west→close - Point out the Kyverno policy check running at dev promotion time
- App:
{stage}.ha.akpdemoapps.link(e.g.dev-east.ha.akpdemoapps.link)