A complete, copy-pasteable walkthrough that runs on your laptop. You'll deploy an app, ship a deliberately broken version, and watch the system detect it and roll back on its own — no human in the loop.
Time: ~20 minutes · Needs: Docker, kubectl, kind (or Minikube/k3d), helm
Reference video: Argo Rollouts Demo — covers the same Istio integration.
| Piece | Job |
|---|---|
| Argo Rollouts | The conductor — owns the canary recipe and decides what happens next |
| Istio | The traffic valve — splits traffic by percentage, independent of pod count |
| Prometheus | The judge — answers "are the canary's requests failing?" |
The loop: Rollouts shifts a little traffic → waits → asks Prometheus → promotes or aborts.
kind create cluster --name rollouts-demo
kubectl cluster-info --context kind-rollouts-demo
Give Docker at least 4 CPUs / 8 GB — Istio plus Prometheus is a real workload.
The controller:
kubectl create namespace argo-rollouts
kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml
The kubectl plugin — don't skip this, it's the whole experience:
# macOS
brew install argoproj/tap/kubectl-argo-rollouts
# Linux
curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64
chmod +x ./kubectl-argo-rollouts-linux-amd64
sudo mv ./kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts
kubectl argo rollouts version
curl -L https://istio.io/downloadIstio | sh -
cd istio-*/
export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo -y
Enable sidecar injection on the namespace you'll deploy into — without this, Istio sees no traffic and the whole demo silently does nothing: