Argo Rollouts local demo: canary with Istio + Prometheus

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.


What you're building

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.


1. Create a local cluster

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.

2. Install Argo Rollouts

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

3. Install Istio

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: