# Tracing Demo Application deployment automation # Three-tier Python application demonstrating distributed tracing NAMESPACE := "services" RELEASE_NAME := "tracing-demo" CHART_PATH := "./helm-chart" # Build all Docker images (use docker-image-Justfile for build/push to registry) build: just -f docker-image-Justfile build # Push images to private registry push: just -f docker-image-Justfile push # Build and push images build-push: build push # Trigger ArgoCD sync sync: @echo "Triggering ArgoCD sync..." @kubectl annotate application {{RELEASE_NAME}} -n cicd argocd.argoproj.io/refresh=normal --overwrite @sleep 2 @kubectl get application {{RELEASE_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' && echo "" # Show ArgoCD application details argocd-status: argocd app get {{RELEASE_NAME}} --core # Check deployment status status: @echo "=== Pods ===" @kubectl get pods -n {{NAMESPACE}} | grep tracing-demo @echo "" @echo "=== Services ===" @kubectl get svc -n {{NAMESPACE}} | grep -E '(frontend|middleware|backend)-service' @echo "" @echo "=== Ingress ===" @kubectl get ingress -n {{NAMESPACE}} tracing-demo-ingress @echo "" @echo "=== ArgoCD Status ===" @kubectl get application {{RELEASE_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' 2>/dev/null && echo "" || echo "Not found" # Restart all pods restart: @echo "Restarting frontend..." @kubectl rollout restart -n {{NAMESPACE}} deployment/tracing-demo-frontend @echo "Restarting middleware..." @kubectl rollout restart -n {{NAMESPACE}} deployment/tracing-demo-middleware @echo "Restarting backend..." @kubectl rollout restart -n {{NAMESPACE}} deployment/tracing-demo-backend # View logs from all services logs: @echo "=== Frontend logs ===" kubectl logs -n {{NAMESPACE}} -l app=tracing-demo-frontend --tail=20 @echo "" @echo "=== Middleware logs ===" kubectl logs -n {{NAMESPACE}} -l app=tracing-demo-middleware --tail=20 @echo "" @echo "=== Backend logs ===" kubectl logs -n {{NAMESPACE}} -l app=tracing-demo-backend --tail=20 # Follow logs from frontend logs-frontend: kubectl logs -n {{NAMESPACE}} -l app=tracing-demo-frontend -f # Follow logs from middleware logs-middleware: kubectl logs -n {{NAMESPACE}} -l app=tracing-demo-middleware -f # Follow logs from backend logs-backend: kubectl logs -n {{NAMESPACE}} -l app=tracing-demo-backend -f # Test the application test: @echo "Testing frontend health endpoint..." curl http://tracing-demo.f3s.buetow.org/ @echo "" @echo "Testing API process endpoint..." curl http://tracing-demo.f3s.buetow.org/api/process # Load test - generate multiple traces load-test: @echo "Generating 50 requests with 0.5s delay..." @for i in {1..50}; do \ curl -s http://tracing-demo.f3s.buetow.org/api/process >/dev/null && echo "Request $$i complete"; \ sleep 0.5; \ done @echo "Load test complete!" # Port forward to services for local testing port-forward-frontend: kubectl port-forward -n {{NAMESPACE}} svc/frontend-service 5000:5000 port-forward-middleware: kubectl port-forward -n {{NAMESPACE}} svc/middleware-service 5001:5001 port-forward-backend: kubectl port-forward -n {{NAMESPACE}} svc/backend-service 5002:5002 # Check if traces are being generated check-traces: @echo "Check Grafana Tempo for traces with:" @echo " { resource.service.namespace = \"tracing-demo\" }" # === Argo Rollouts Commands === # Watch frontend rollout progress rollout-watch: @if ! command -v kubectl-argo-rollouts &> /dev/null; then \ echo "ERROR: kubectl argo rollouts plugin not installed"; \ echo "Install with: curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64 && sudo install -m 755 kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts"; \ exit 1; \ fi kubectl argo rollouts get rollout tracing-demo-frontend -n {{NAMESPACE}} --watch # Check rollout status rollout-status: kubectl argo rollouts status tracing-demo-frontend -n {{NAMESPACE}} # Describe rollout rollout-info: kubectl argo rollouts get rollout tracing-demo-frontend -n {{NAMESPACE}} # Promote canary to 100% (skip waiting) rollout-promote: kubectl argo rollouts promote tracing-demo-frontend -n {{NAMESPACE}} # Abort current rollout rollout-abort: kubectl argo rollouts abort tracing-demo-frontend -n {{NAMESPACE}} # View rollout history rollout-history: kubectl argo rollouts history tracing-demo-frontend -n {{NAMESPACE}} # === Automated Demo Scripts === # Run full automated canary rollout demo demo-canary: @./demo-canary-rollout.sh # Run abort/rollback demo demo-abort: @./demo-abort-rollout.sh # Reset rollout to clean state demo-reset: @./demo-reset.sh # Interactive demo menu demo-menu: @./demo-menu.sh # Start demo (requires manual rollout trigger in another terminal) rollout-demo: @echo "Starting Argo Rollouts demo..." @echo "" ./rollout-demo.sh