这个课题向你展示如何将一个服务的老版本流量逐渐迁移到新版本上。使用Istio,我们可以通过使用每次流量迁移权重低于100的一系列规则。逐渐完成流量的迁移,例如10,20,30,… 100%。这个课题简易的通过两步将 reviews:v1
的流量迁移到 reviews:v3
:50%, 100%。
Before you begin
- 安装Istio
- 部署Bookinfo示例
Weight-based version routing
1.为所有微服务设置默认版本v1
istioctl create -f samples/bookinfo/routing/route-rule-all-v1.yaml
samples/bookinfo/routing/route-rule-all-v1.yaml
2.在你的浏览器中打开 http://$GATEWAY_URL/productpage
来确认 reviews
服务的版本是v1.
你应该观察Bookinfo应用的 productpage
展示的内容。注意 productpage
展示内容无星级评定,因为 reviews:v1
没有访问ratings
服务。
3.首先,通过如下命令将50%的流量从 reviews:v1
转换到 reviews:v3
istioctl replace -f samples/bookinfo/routing/route-rule-reviews-50-v3.yaml
samples/bookinfo/routing/route-rule-reviews-50-v3.yaml
确认我们替换的规则:
istioctl get virtualservice reviews -o yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
...
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
weight: 50
- route:
- destination:
host: reviews
subset: v3
weight: 50
4.在你的浏览器中刷新productpage
,你现在应该在大约50%的次数中看到红色星级评定。
注意:当前Envoy sidecar实现,你可能需要刷新productpage
很多次观察适当分布。这可能在你看到任何变化前需要刷新15次或者更多。如果你想要更常见红星的话,可以修改规则路由90%的流量到v3.
5.当reviews
微服务的v3版本被认为是稳定的时,我们可以路由100%的流量到 reviews:v3
:
istioctl replace -f samples/bookinfo/routing/route-rule-reviews-v3.yaml
samples/bookinfo/routing/route-rule-reviews-v3.yaml
你可以现在以任何用户的身份登陆productpage
,你应该会在每条书评上看到红星。
Understanding what happened
这个课题中,我们使用Istio的权重路由功能将 reviews
服务的旧版本流量迁移到新版本中。注意这和使用容器业务流程平台的部署功能由很大不同,后者使用示例扩展来管理流量。使用Istio,我们允许 reviews
服务的两个版本单独缩放而互不影响流量分配。关于使用自动伸缩的版本路由,查看 Canary Deployments using Istio.
Cleanup
- 移除应用路由规则
istioctl delete -f samples/bookinfo/routing/route-rule-all-v1.yaml
samples/bookinfo/routing/route-rule-all-v1.yaml
- 如果你不打算探索接下来地任何课题,参考 Bookinfo cleanup 指南来关闭应用。