Skip to content

Progressive Delivery Home Lab

Costlow
Deployability kubernetes ready
Status local lab
Validation make validate
Kubernetes Argo Rollouts Progressive Delivery Canary Deployment
Use the guide first.

The full learning guide is on this page. Open the repository files only when a step asks you to inspect code, fork the project, or download raw assets.

Level Cost Cloud Delivery

Local Kubernetes lab for learning canary releases and automated rollback with Argo Rollouts.

  • Why progressive delivery is safer than all-at-once deploys
  • How canary steps work
  • How service selectors route traffic during rollout
  • How to pause, promote, and abort a rollout
flowchart LR
Student["Student changes image tag"] --> Manifest["rollouts/rollout.yaml"]
Manifest --> Controller["Argo Rollouts controller"]
Controller --> Canary["Canary ReplicaSet"]
Controller --> Stable["Stable ReplicaSet"]
Service["Kubernetes Service"] --> Canary
Service --> Stable
  • Docker
  • Kind for the one-command workflow, or Minikube if you prefer manual setup
  • kubectl
  • Argo Rollouts kubectl plugin, optional but recommended
Terminal window
make validate
make up
make logs
make down

make up creates a local Kind cluster named rollout-lab, installs Argo Rollouts, and applies the sample rollout.

Terminal window
kind create cluster --name rollout-lab
kubectl create namespace argo-rollouts
kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml
kubectl wait --for=condition=available --timeout=180s deployment/argo-rollouts -n argo-rollouts
kubectl apply -f rollouts/
kubectl argo rollouts get rollout demo-rollout -n progressive-delivery --watch

Change the image tag in rollouts/rollout.yaml, apply it again, and watch the canary steps.

Terminal window
make validate

This parses the namespace, service, and rollout YAML locally, so it works before a cluster or Argo Rollouts CRD exists.

  • no matches for kind "Rollout": install Argo Rollouts before applying the manifest to a cluster; make validate is only a local YAML check.
  • Rollout never progresses: check pod readiness with make logs, then inspect the image tag in rollouts/rollout.yaml.
  • Argo Rollouts plugin missing: use kubectl get rollout -n progressive-delivery for a basic status view.
  • Kind cluster already exists: run make down, or use CLUSTER=my-rollout-lab make up.
Terminal window
make down

For Minikube users:

Terminal window
minikube delete
  • Add an analysis template.
  • Introduce a bad image tag and abort the rollout.
  • Change canary weights.
  • Compare this with a normal Kubernetes Deployment.