内容转自https://blog.csdn.net/jj_tyro/article/details/80136316, 并不断补充,感谢作者.
1.蓝绿部署
蓝绿部署实现的是全流量切换,适合于在测试完部署的服务新版本后,最少时间将流量切换到新的服务版本。
切换路由带来的问题是,如果一个请求尚未完成,能否实现graceful switch
针对服务生成Route
oc expose service serviceA --name=service
apiVersion: route.openshift.io/v1 kind: Route name: bluegreen namespace: bluegreen spec: host: service.192.168.42.65.nip.io port: targetPort: 8080-tcp to: kind: Service name: serviceA weight: 100
在ServiceB测试没有问题的时候把路由切换成B
# switch service to serviceB $ oc patch route/service -p '{"spec":{"to":{"name":"serviceB"}}}' # switch back to serviceA again $ oc patch route/service -p '{"spec":{"to":{"name":"serviceA"}}}'
2.A/B部署
A/B部署得名于将应用功能新版本做为整体部署一部分、与旧版本并存线上进行测试的能力。通过这种方式,可以创建一个假定,执行A/B部署,测试假定是正确还是错误,以及回滚到初始应用部署(A)还是继续新版本应用部署(B)
分别创建route指到各自服务,然后进行测试
oc expose service serviceAroute --name=serviceA -l name='serviceA' oc expose service serviceBroute --name=serviceB -l name='serviceB'
创建总体路由 serviceRoute,并指定分发策略
$ oc expose service serviceA --name='serviceroute' -l name='serviceroute' $ oc annotate route/serivceroute haproxy.router.openshift.io/balance=roundrobin $ oc set route-backends serviceroute serviceA=100 serviceB=0
可以通过命令调整分发策略
oc set route-backends serviceroute --adjust serviceB=+10%
界面上的设置如下
找到一个Route,然后在TLS下点击Edit
选择Alernate Service,会出现其他服务,默认的权重是50%,设定权重即可
3.金丝雀部署
金丝雀部署是一种类似于A/B部署的技术,可将变更缓慢地向部分用户推出,然后再将其推出到整个基础架构,并提供给所有人使用。
金丝雀部署策略可以根据具体的场景制定
- 一个简单的策略是针对随机抽样用户来使用新版本 —— 这是A/B部署策略
- 将新版本提供给内部测试人员,直接把他们流量导入serviceB路由,以进行测试
- 在OpenShift里创建一个测试项目做为金丝雀,在测试通过之后再发布
- 更复杂的方法是根据用户的个人资料和其他人口统计资料选择用户。