diff --git a/labsim/labsim-k8s-etcd.sh b/labsim/labsim-k8s-etcd.sh index 53819e0..839741d 100755 --- a/labsim/labsim-k8s-etcd.sh +++ b/labsim/labsim-k8s-etcd.sh @@ -170,7 +170,17 @@ runcmd: # INSTALL_K3S_EXEC=server (bare) -- everything else comes from config.yaml, # exactly as production. The token is passed via env for the join; on node 1 # it seeds the cluster token. - curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server" K3S_TOKEN="$TOKEN" sh - + # + # The etcd-arg tuning is LAB-ONLY and deliberately NOT in the production + # config.yaml/k3s-config.ts: three embedded-etcd servers on a busy labsim + # host starve etcd of CPU, and stock etcd timers (100ms heartbeat / 1s + # election) then trigger a constant leader-re-election storm that never + # settles ("storage is (re)initializing", k3s stuck activating). Relaxing + # the timers lets etcd tolerate the lab's scheduling latency. It changes + # NOTHING the dual-stack conversion exercises (config.yaml CIDR handling, + # ServiceCIDR pickup, quorum across a restart) -- it just keeps etcd alive + # under nested-virt jitter. See dualstack-evidence/etcd-harness-2026-09-07.md. + curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server --etcd-arg=heartbeat-interval=500 --etcd-arg=election-timeout=5000" K3S_TOKEN="$TOKEN" sh - EOF # Guard the generated YAML before building the ISO -- a bad indent in the