summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--f3s/ARGO-ROLLOUTS-SUMMARY.md10
-rw-r--r--f3s/README-ROLLOUTS.md53
2 files changed, 30 insertions, 33 deletions
diff --git a/f3s/ARGO-ROLLOUTS-SUMMARY.md b/f3s/ARGO-ROLLOUTS-SUMMARY.md
index 2c0372e..80adc23 100644
--- a/f3s/ARGO-ROLLOUTS-SUMMARY.md
+++ b/f3s/ARGO-ROLLOUTS-SUMMARY.md
@@ -23,10 +23,10 @@ Also registered in ArgoCD: `/home/paul/git/conf/f3s/argocd-apps/cicd/argo-rollou
**Replaces**: `frontend-deployment.yaml` (kept for reference)
-**Strategy**: Canary with 2-minute observation window
+**Strategy**: Canary with 1-minute observation window
```
-Step 1: 50% traffic to new version
-Step 2: Pause 2 minutes (observation period)
+Step 1: 33% traffic to new version (1 new pod, 3 old pods)
+Step 2: Pause 1 minute (observation period)
Step 3: 100% traffic to new version (auto-promote)
```
@@ -101,12 +101,12 @@ Added sync option: `RespectIgnoreDifferences=true` to gracefully handle migratio
│ │ tracing-demo-frontend Rollout │ │
│ │ ┌──────────────┐ ┌──────────────┐│ │
│ │ │ Stable RS │ │ Canary RS ││ │
-│ │ │ 2 replicas │ │ 1-2 replicas ││ │
+│ │ │ 3 replicas │ │ 1 replica ││ │
│ │ └──────────────┘ └──────────────┘│ │
│ │ │ │
│ │ Endpoints: frontend-service │ │
│ │ - Selects both RS (proportional) │ │
-│ │ - Routes traffic to 50%/100% │ │
+│ │ - Routes traffic to 67%/33% │ │
│ └────────────────────────────────────┘ │
│ │
│ ┌──────────────────┐ │
diff --git a/f3s/README-ROLLOUTS.md b/f3s/README-ROLLOUTS.md
index 60ec9b6..b038bf9 100644
--- a/f3s/README-ROLLOUTS.md
+++ b/f3s/README-ROLLOUTS.md
@@ -23,15 +23,16 @@ just rollout-watch
# 5. Trigger in another terminal (Terminal 2)
kubectl patch rollout tracing-demo-frontend -n services \
--type='json' \
- -p='[{"op":"replace","path":"/spec/template/spec/containers/0/image","value":"registry.lan.buetow.org:30001/tracing-demo-frontend:latest"}]'
+ -p='[{"op":"add","path":"/spec/template/spec/containers/0/env/-","value":{"name":"ROLLOUT_V","value":"'$(date +%s)'"}}]'
-# 6. Watch progress in Terminal 1 (~4 minutes total)
+# 6. Watch progress in Terminal 1 (~90 seconds total)
```
Expected flow:
-- 0-2 min: **50% traffic** to new version (canary phase 1)
-- 2-4 min: **Wait** for confirmation (canary phase 2)
-- 4+ min: **100% traffic** to new version (auto-promoted)
+- 0-15 sec: **33% traffic** to canary (1 new pod, 3 old pods)
+- 15-60 sec: **Monitor** (paused, observing canary health)
+- 60+ sec: **Auto-promote to 100%** (scales all 3 pods to new version)
+- ~90 sec: **Complete** (all 3 pods running new version)
## Files Created
@@ -61,10 +62,10 @@ Expected flow:
- No way to validate before 100% rollout
**New way (Rollout with Canary)**:
-- 2 old pods → 1 old + 1 new (50/50 traffic)
-- Observe for 2 minutes
-- If healthy → automatically promote to 2 new pods
-- If unhealthy → abort, revert to 2 old pods
+- 3 old pods → 3 old + 1 new (33% traffic to canary)
+- Observe for 1 minute
+- If healthy → automatically promote all 3 pods to new version
+- If unhealthy → abort, revert to 3 old pods
- Zero downtime, validated before full rollout
## Common Commands
@@ -81,10 +82,7 @@ just rollout-status
# Detailed info
just rollout-info
-# Skip waiting, promote now
-just rollout-promote
-
-# Abort and rollback
+# Abort and rollback (prevents auto-promotion)
just rollout-abort
# View history
@@ -96,11 +94,11 @@ just load-test
## What Happens During Canary
-### Step 1: 50% Traffic (0-2 minutes)
+### Step 1: 33% Traffic (0-15 seconds)
```
Frontend Service
-├── Stable ReplicaSet (old version): 1 pod → receives 50% traffic
-└── Canary ReplicaSet (new version): 1 pod → receives 50% traffic
+├── Stable ReplicaSet (old version): 3 pods → receives 67% traffic
+└── Canary ReplicaSet (new version): 1 pod → receives 33% traffic
```
Monitor during this phase:
@@ -109,18 +107,17 @@ Monitor during this phase:
- Logs and traces
- Prometheus metrics
-### Step 2: Pause (2 minutes)
+### Step 2: Pause (15-60 seconds)
```
-Service pauses traffic shift, waiting for:
-- Manual promotion via: kubectl argo rollouts promote ...
-- Auto-promotion after 2 minutes
-- Or abort: kubectl argo rollouts abort ...
+Service pauses traffic shift, monitoring canary health:
+- Auto-promotion after 1 minute if healthy
+- Or abort: kubectl argo rollouts abort ... to stop
```
-### Step 3: 100% Traffic (4+ minutes)
+### Step 3: 100% Traffic (60+ seconds)
```
Frontend Service
-├── Stable ReplicaSet (new version): 2 pods → receives 100% traffic
+├── Stable ReplicaSet (new version): 3 pods → receives 100% traffic
└── Canary ReplicaSet (old version): 0 pods → terminated
```
@@ -138,11 +135,11 @@ Updates Rollout resource
Argo Rollouts Controller
├─→ Scales Canary ReplicaSet (1 new pod)
- ├─→ Frontend Service routes 50/50 traffic
- ├─→ Monitors health/metrics for 2 minutes
- └─→ Auto-promotes or waits for manual action
- ├─→ If healthy: Scale to 2 new, remove old
- └─→ If abort: Remove canary, keep old
+ ├─→ Frontend Service routes 33/67 traffic
+ ├─→ Monitors health/metrics for 1 minute
+ └─→ Auto-promotes if healthy
+ ├─→ If healthy: Scale to 3 new, remove old
+ └─→ If abort: Remove canary, keep 3 old
```
## Demo Scenarios