OpenShift蓝绿及灰度部署

内容转自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里创建一个测试项目做为金丝雀,在测试通过之后再发布
  • 更复杂的方法是根据用户的个人资料和其他人口统计资料选择用户。
posted @ 2018-10-03 18:11  ericnie  阅读(1377)  评论(0编辑  收藏  举报