关于Istio的更多内容请参考istio中文文档。
原文参见Traffic Shifting。
本任务将演示如何将应用流量逐渐从旧版本的服务迁移到新版本。通过Istio,可以使用一系列不同权重的规则(10%,20%,··· 100%)将流量平缓地从旧版本服务迁移到新版本服务。
为简单起见,本任务将采用两步将流量从reviews:v1
迁移到 reviews:v3
,权重分别为50%,100%。
基于权重的版本路由
将所有微服务的缺省版本设置为v1.
istioctl create -f samples/bookinfo/kube/route-rule-all-v1.yaml
在浏览器中打开http://$GATEWAY_URL/productpage, 确认
reviews
服务目前的活动版本是v1。
可以看到浏览器中出现BooInfo应用的productpage页面。注意productpage
显示的评价内容不带星级。这是由于reviews:v1
不会访问ratings
服务。
```bash
istioctl delete routerule reviews-test-v2
```
首先,使用下面的命令把50%的流量从
reviews:v1
转移到reviews:v3
:istioctl replace -f samples/bookinfo/kube/route-rule-reviews-50-v3.yaml
注意这里使用了istioctl replace
而不是create
。
- 在浏览器中多次刷新
productpage
页面,大约有50%的几率会看到页面中出现带红星的评价内容。
当v3版本的
reviews
服务已经稳定运行后,可以将100%的流量路由到reviews:v3
:istioctl replace -f samples/bookinfo/kube/route-rule-reviews-v3.yaml
此时,以任何用户登录到productpage
页面,都可以看到带红星的评价信息。
理解原理
在这个任务中,我们使用了Istio的带权重路由的特性将流量从老版本的reviews
服务逐渐迁移到了新版本服务中。
注意该方式和使用容器编排平台的部署特性来进行版本迁移是完全不同的。容器编排平台使用了实例scaling来对流量进行管理。而通过Istio,两个版本的reviews
服务可以独立地进行scale up和scale down,并不会影响这两个版本服务之间的流量分发。
想了解更多支持scaling的按版本路由功能,请查看Canary Deployments using Istio。
清理
删除路由规则。
istioctl delete -f samples/bookinfo/kube/route-rule-all-v1.yaml
如果不打算尝试后面的任务,请参照BookInfo cleanup 中的步骤关闭应用程序。
进阶阅读
- 更多的内容请参见请求路由。
嗯,这篇文章对我有用,鼓励一下...
使用微信扫描二维码完成支付