Multi-cluster progressive delivery system demonstrating cluster-level canary deployments using Argo Workflows, Rollouts, and Hera Python SDK.
Perfect for KubeCon EU 2026 presentations!
- INSTALL.md - Complete installation guide from scratch (macOS)
- DEMO.md - Step-by-step demo guide for KubeCon presentation
- docs/TROUBLESHOOTING.md - Common issues and solutions
- docs/STEP-9-PROGRESSIVE-DELIVERY.md - Progressive delivery details
- docs/STEP-10-MONITORING.md - Monitoring and observability
Dev Cluster β Stage Cluster β Prod US-East-1 β Prod US-West-2
β β β β
Rollout Rollout Rollout Rollout
β β β β
Validate Validate Validate Validate
β β β β
Promote βββββββββ Promote βββββββ Promote βββββββ Done
- Read INSTALL.md - Complete installation guide (45 minutes)
- Follow all 12 steps - From zero to working demo
- Verify setup - Run
./scripts/monitor.sh - Test workflow - Run
python3.12 hera-workflows/working_pipeline.py
- Read DEMO.md - Complete demo script
- Setup port forwards - Argo Workflows, ArgoCD, Dashboard
- Practice the flow - 10-minute presentation
- Use talking points - Why Hera, progressive delivery, multi-cluster
The project supports environment variables to customize repository and image settings, making it portable to your own AWS account and GitHub repository.
| Variable | Description | Default | Used By |
|---|---|---|---|
ECR_REPO |
ECR repository URL | 940019131157.dkr.ecr.us-east-1.amazonaws.com/argocon-demo |
gitops_pipeline.py |
ECR_REPO_TAG |
Image tag to deploy | v5.0.0 |
gitops_pipeline.py |
GITHUB_REPO_URL |
Full GitHub repository URL | https://github.com/elamaran11/k8s-argo-workflows-hera |
setup-argocd-apps.sh |
GITHUB_SLUG |
GitHub owner/repo format | elamaran11/k8s-argo-workflows-hera |
gitops_pipeline.py |
GITHUB_TOKEN |
GitHub personal access token | (none) | gitops_pipeline.py |
# Setup ArgoCD with your own ECR and GitHub repo
ECR_REPO=123456789.dkr.ecr.us-west-2.amazonaws.com/my-app \
GITHUB_REPO_URL=https://github.com/myorg/my-repo \
./scripts/setup-argocd-apps.sh
# Run GitOps workflow with custom settings
ECR_REPO=123456789.dkr.ecr.us-west-2.amazonaws.com/my-app \
ECR_REPO_TAG=v2.0.0 \
GITHUB_SLUG=myorg/my-repo \
GITHUB_TOKEN=ghp_xxxx \
python3.12 hera-workflows/gitops_pipeline.py- macOS (tested on Ventura/Sonoma)
- AWS Account with admin access
- Docker Desktop
- Python 3.12
- CLI Tools: kubectl, eksctl, argocd
See INSTALL.md for detailed installation instructions.
- β Hera Simplicity - Python SDK reduces YAML complexity
- β Progressive Rollout - Region-by-region with validation gates
- β Argo Rollouts - Canary deployments within each cluster
- β ArgoCD - GitOps-based deployment automation
- β Multi-Cluster - 4 EKS clusters across 2 AWS regions
- β Real-time Monitoring - Custom dashboard + Argo UIs
- β Production Ready - Argo Workflows v3.7.8 with emissary executor
- 4 EKS 1.34 clusters (dev, stage, prod-us-east-1, prod-us-west-2)
- Argo Workflows v3.7.8
- Argo Rollouts v1.7.2
- Argo CD v2.13.2
- Argo Events v1.9.2
simple_example.py- Prints workflow YAMLworking_pipeline.py- Demo workflow with echo commandsgitops_pipeline.py- Full GitOps promotion with Git operations
- CLI monitoring script (
scripts/monitor.sh) - Web dashboard (Flask app at http://localhost:5001)
- Argo Workflows UI (https://localhost:2746)
- ArgoCD UI (https://localhost:8080)
- Simple Flask app with health endpoints
- Docker builds for amd64 architecture
- Stored in Amazon ECR
- Deployed via Argo Rollouts with canary strategy
.
βββ INSTALL.md # Complete installation guide
βββ DEMO.md # KubeCon demo script
βββ README.md # This file
βββ requirements.txt # Python dependencies
βββ infrastructure/ # Cluster and Argo configs
β βββ cluster-template.yaml # EKSCTL cluster template
β βββ applicationset.yaml # ArgoCD multi-cluster setup
β βββ workflow-rbac.yaml # Workflow RBAC permissions
β βββ argo-workflows-configmap.yaml # Workflow controller config
βββ hera-workflows/ # Hera Python workflows
β βββ simple_example.py # Basic example
β βββ working_pipeline.py # Demo workflow
β βββ gitops_pipeline.py # Full GitOps workflow
βββ environments/ # GitOps manifests
β βββ dev/ # Dev environment
β βββ stage/ # Stage environment
β βββ prod-us-east-1/ # Prod US-East-1
β βββ prod-us-west-2/ # Prod US-West-2
βββ visualization/ # Web dashboard
β βββ app.py # Flask backend
β βββ templates/ # HTML templates
βββ scripts/ # Automation scripts
β βββ create-clusters.sh # Create EKS clusters
β βββ install-argo.sh # Install Argo stack
β βββ setup-argocd-apps.sh # Setup ArgoCD apps
β βββ deploy-demo-app.sh # Build and push demo app
β βββ monitor.sh # Monitoring dashboard
β βββ watch-workflow.sh # Watch workflow execution
βββ demo-app/ # Sample Flask application
β βββ app.py # Flask app code
β βββ Dockerfile # Container image
βββ docs/ # Additional documentation
βββ TROUBLESHOOTING.md # Common issues
βββ STEP-9-PROGRESSIVE-DELIVERY.md
βββ STEP-10-MONITORING.md
# Install everything
./scripts/create-clusters.sh # ~20 minutes
./scripts/install-argo.sh # ~5 minutes
./scripts/deploy-demo-app.sh v1.0.0 # ~2 minutes
./scripts/setup-argocd-apps.sh # ~2 minutes# Start port forwards (3 terminals)
kubectl port-forward svc/argo-server -n argo 2746:2746 --context dev
kubectl port-forward svc/argocd-server -n argocd 8080:443 --context dev
cd visualization && python3.12 app.py
# Monitor system
./scripts/monitor.sh
# Run workflow
source venv/bin/activate
python3.12 hera-workflows/working_pipeline.py# Get ArgoCD admin password
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d && echo
# Login to ArgoCD (optional - for CLI access)
argocd login localhost:8080 --username admin --password <password-from-above> --insecure
# Get ArgoCD token (if needed for API access)
argocd account generate-token --account admin# Delete clusters
eksctl delete cluster --name dev --region us-east-1
eksctl delete cluster --name stage --region us-east-1
eksctl delete cluster --name prod-us-east-1 --region us-east-1
eksctl delete cluster --name prod-us-west-2 --region us-west-2
# Delete ECR repository
aws ecr delete-repository --repository-name argocon-demo --region us-east-1 --forceRunning costs:
- 4 EKS clusters: ~$0.40/hour
- 8 EC2 t3.medium nodes: ~$0.67/hour
- LoadBalancers: ~$0.10/hour
- Total: ~$1.17/hour or ~$28/day
Cost savings tips:
- Delete clusters when not in use
- Use t3.small nodes instead of t3.medium
- Run in single region (2 clusters instead of 4)
See docs/TROUBLESHOOTING.md for common issues.
Quick fixes:
# Workflow controller issues
kubectl logs -n argo deployment/workflow-controller --tail=50 --context dev
# ArgoCD sync issues
argocd app sync argocd/app-dev --force
# Port forward issues
pkill -f "port-forward"- Hera Documentation: https://hera.readthedocs.io
- Argo Workflows: https://argoproj.github.io/workflows
- Argo Rollouts: https://argoproj.github.io/rollouts
- Argo CD: https://argo-cd.readthedocs.io
- Argo Community Slack: https://argoproj.github.io/community/join-slack
This is a demo project for KubeCon EU 2026. Feel free to:
- Fork and customize for your use case
- Submit issues for bugs or improvements
- Share your progressive delivery stories
MIT License - See LICENSE file for details
Ready to get started? Head to INSTALL.md for complete setup instructions!
Preparing for demo? Check out DEMO.md for the presentation guide!