蓝绿部署是一种应用发布模式,可将用户流量从先前版本的应用或微服务全量转移到新版本中(两者均保持在生产环境中运行)。
旧版本可以称为蓝色环境,而新版本则可称为绿色环境。一旦生产流量从蓝色完全转移到绿色,蓝色就可以在回滚或退出生产的情况下保持待机,也可以更新成为下次更新的模板。
蓝绿发布需要依赖几个关键的技术点:
北极星提供以下功能,支持蓝绿发布:
北极星支持Spring Cloud Tencent以及服务网格(Envoy)的方式接入使用蓝绿发布的能力。
如果已经部署好了polaris,可忽略这一步。
polaris支持在kubernetes环境中进行部署,注意必须保证暴露HTTP端口为8090,gRPC端口为8091。具体部署方案请参考:
Spring Cloud Tencent支持通过以下2种方式进行实例的版本号打标:
在服务实例的配置文件中添加配置,如在 bootstrap.yml
添加如下所示即可:
spring:
cloud:
tencent:
metadata:
content:
version: 2.0.0
在服务实例所在的操作系统中添加环境变量也可进行打标,例如:SCT_METADATA_CONTENT_version=2.0.0
。
由于Spring Cloud默认不会对所有的请求标签进行透传,因此需要增加Spring Cloud透传标识,可以通过添加环境变量SCT_PROTOCOL_CONTENT_TRANSITIVE_HEADER=gray
的方式,进行灰度标识gray:true
的透传。
应用需要基于K8S进行部署,才可以使用Envoy Proxy的接入模式。
实例的版本标签需要通过POD标签的方式打入,然后在部署过程中,北极星的controller会自动把POD标签同步到北极星。
可以在K8S的部署配置中,在template配置中,添加labels的方式完成版本打标。可参考这里的部署配置:微服务部署配置
spec:
template:
metadata:
labels:
app: user
version: 2.0.0
支持虚拟机、Docker Composer、K8S等多种部署模式,注意需要保证业务进程与北极星服务的网络连通性。
只支持K8S的部署模式,同时,为了实现POD标签的自动同步,以及Envoy Proxy的自动注入,需要预先部署K8s Controller组件。具体部署方案请参考:
网关作为流量入口,配置网关路由的目标主要是为了可以将流量按比例进行切分到不同版本的微服务中去,同时通过流量打标的方式,将路由到新版本的请求,在Header上打入gray:true
的标签,便于后续微服务按照标签进行路由。
用户可以使用任意对接了北极星服务发现的网关进行操作(Envoy, Nginx, Kong等),这里给出Envoy的VirtualHost路由配置,便于大家理解,具体配置可以参考LDS配置
virtual_hosts:
- name: local_service
domains:
- "*"
routes:
- match:
prefix: "/"
route:
weighted_clusters:
total_weight: 100
clusters:
- name: user
weight: 80
metadata_match:
filter_metadata:
envoy.lb:
version: 1.0.0
- name: user
weight: 20
request_headers_to_add:
- header:
key: gray
value: "true"
metadata_match:
filter_metadata:
envoy.lb:
version: 2.0.0
通过配置微服务路由,目标是使得对于灰度流量的调用,都只在新版本的服务分组中进行。
打开北极星控制台,通过点击侧边栏:动态路由->自定义规则页面,配置自定义路由规则,规则可配置对命名空间下全部服务生效。
gray:true
灰度标签的流量都只流向version=2.0.0
的分组:version=1.0.0
的分组:通过北极星的可观测性能力,可以准确看到不同分组的流量切换的过程,以及服务调用成功率,等到所有流量都切换到新版本分组以及没有失败请求,代表灰度完成。
灰度完成后,需要做以下事情:
北极星提供了一键部署demo,可以通过一键部署demo快速体验蓝绿发布。详细请参考:
大家如果喜欢,帮忙点个 star 吧~
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。