Canary Testing¶
Scenario: Canary testing
Canary testing enables you to safely rollout a new version of your app/ML model after validating service-level objectives (SLOs). In this tutorial, you will:
- Perform canary testing.
- Specify latency and error-rate based service-level objectives (SLOs). If the candidate version satisfies SLOs, Iter8 will declare it as the winner.
- Use Prometheus as the provider for latency and error-rate metrics.
- Combine canary testing with progressive deployment.
Iter8 will progressively shift the traffic towards the winner and promote it at the end as depicted below.
Before you begin...
This tutorial is available for the following K8s stacks.
Please choose the same K8s stack consistently throughout this tutorial. If you wish to switch K8s stacks between tutorials, start from a clean K8s cluster, so that your cluster is correctly setup.
Steps 1 to 6¶
Please follow steps 1 through 6 of the quick start tutorial.
7. Launch experiment¶
Launch the Iter8 experiment that orchestrates canary testing for the app in this tutorial.
kubectl apply -f $ITER8/samples/istio/canary/experiment.yaml
Look inside experiment.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
|
kubectl apply -f $ITER8/samples/knative/canary/experiment.yaml
Look inside experiment.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
|
The process automated by Iter8 during this experiment is depicted below.
8. Observe experiment¶
Follow step 8 of quick start tutorial to observe the experiment in realtime. Note that the experiment in this tutorial uses a different name from the quick start one. Replace the experiment name quickstart-exp
with canary-exp
in your commands. You can also observe traffic by suitably modifying the commands for observing traffic.
Understanding what happened
- You created two versions of your app/ML model.
- You generated requests for your app/ML model versions. At the start of the experiment, 100% of the requests are sent to the baseline and 0% to the candidate.
- You created an Iter8 experiment with canary testing pattern and progressive deployment pattern. In each iteration, Iter8 observed the latency and error-rate metrics collected by Prometheus; Iter8 verified that the candidate satisfied all the SLOs, identified candidate as the winner, progressively shifted traffic from the baseline to the candidate, and promoted the candidate.
9. Cleanup¶
kubectl delete -f $ITER8/samples/istio/quickstart/fortio.yaml
kubectl delete -f $ITER8/samples/istio/canary/experiment.yaml
kubectl delete namespace bookinfo-iter8
kubectl delete -f $ITER8/samples/knative/quickstart/fortio.yaml
kubectl delete -f $ITER8/samples/knative/canary/experiment.yaml
kubectl delete -f $ITER8/samples/knative/quickstart/experimentalservice.yaml