任务说明:
将请求按照比例,路由到对应的服务版本上

1. 蓝绿部署

是指在生产环境中,同时有两套完全一致的应用。其中一套正服务于线上环境,所有的请求都打到这个环境中。当应用的版本需要更新的时候,直接在另外一套系统中部署新的版本,然后将流量切换到新的版本中。
蓝绿部署的优点是可以随意的去安装备份的那一套环境,而不需要动线上的环境,这样的话即便出错也没有关系,因为同时有两套环境的存在。也可以及时的进行回滚操作,当然,缺点也显而易见,就是因为同时存在两套环境,成本稍微有点高

2. 灰度发布(金丝雀发布)

灰度发布又叫金丝雀发布。
下图可以看到金丝雀发布的流程。首先所有的请求都指向老版本,新版本部署后,可以先把小范围的流量,比如说只把5%的流量打向新版本,用它来进行一个测试,如果测试没有问题,再把50%的流量打到新版本,最后测试成功,再把所有的流量都切到新的版本。
灰度发布他最大的一个优点是可以利用真实的线上的数据进行一个测试,而且也是比较容易回滚的。缺点是可能同时管理多个版本。
image.png

3. A/B 测试

本质上的实现方式和灰度发布是完全一致的,只不过他们俩的侧重面不同。灰度发布,最终的要求是把所有的流量打向新的版本,实现一个版本的迭代;而A/B测试的主要目的是用来比较A和B这两个版本的优劣。

image.png

4. 模拟“灰度发布”

使用官方提供的配置 virtual-service-reviews-50-v3.yaml
运行命令 kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml
image.png
执行完成后,可以看到针对reviews服务的虚拟服务已经有个更改,

1. 分析配置清单

配置清单virtual-service-reviews-50-v3.yaml如下:
配置清单就是对目标地址(下面的reviews服务)做了一个权重设置。在两个不同版本添加了一个weight,其中50%会指向reviews服务的v1版本,另外50%会指向reviews服务的v3版本。灰度发布只需要调整两个版本的权重就好。

  1. apiVersion: networking.istio.io/v1alpha3
  2. kind: VirtualService
  3. metadata:
  4. name: reviews
  5. spec:
  6. hosts:
  7. - reviews
  8. http:
  9. - route:
  10. - destination:
  11. host: reviews
  12. subset: v1
  13. weight: 50
  14. - destination:
  15. host: reviews
  16. subset: v3
  17. weight: 50

2. 验证配置是否生效

http://192.168.61.199:32697/productpage
v1版本
image.png
v3版本
image.png