K8s的滚动发布是将一次完整的发布过程分成多个批次,每次发布一个批次,成功后,再发布下一个批次,最终完成所有批次的发布。MSE通过提供确保在通过就绪检查前完成服务注册以及确保在就绪检查前完成服务预热等无损上线能力,帮助您在应用的滚动发布过程中,始终保证有可用的服务实例(副本)在运行,从而实现应用的无损滚动发布。本文介绍如何实现无损滚动发布。
前提条件
注意事项
小流量服务预热相关功能基于微服务应用场景设计实现,在使用就绪检查关联服务预热功能前请确认应用已满足以下条件。
对于Spring Cloud应用,当前仅支持利用Nacos、ZooKeeper类型注册中心构建的应用进行服务预热。
Spring Cloud服务预热功能是基于Spring Cloud框架默认的ZoneAwareLoadBalancer负载均衡类实现的,如果应用本身修改了该配置,会导致服务预热功能失效。
对于Dubbo应用,当前仅Dubbo 2.7相关版本支持服务预热能力,Dubbo 2.6和Dubbo 3.0版本不支持。
网关应用一般不通过注册中心调用,而是通过直接对外暴露API的方式调用,因此MSE当前所支持的小流量预热功能对此类应用不生效。
通过就绪检查前完成服务注册
K8s提供就绪检查机制来对实例在就绪前进行健康检查,但K8s并不能感知微服务什么时候就绪,它一般会简单地认为端口起来了应用即处于就绪态,这样会造成刚启动的服务未完全注册到注册中心,旧的应用实例就被下线,导致消费端调用异常。
微服务生命周期关联K8s就绪检查功能开启后,可通过Agent无侵入为应用提供一个检测其是否完成注册的端口,当应用注册完成返回200状态码,帮助K8s判定应用已就绪;未完成注册返回500,帮助K8s判定应用未就绪。
登录MSE治理中心控制台,并在顶部菜单栏选择地域。
在左侧导航栏,选择 ,然后单击目标应用的资源量卡片。
在目标应用详情页面的左侧导航栏,单击流量治理,然后选择无损上下线页签。
在无损上线区域,配置预热时长(秒)和延迟注册时间(秒)。单击高级设置,打开通过就绪检查前完成服务注册开关。
打开无损上线右侧的开关。
该应用在下次重启时,服务注册就绪检查即可生效。
登录容器服务控制台,为目标应用配置就绪检查,完成后单击更新。
选中就绪检查右侧的开启,并配置如下参数。
路径:/health。
端口:55199。
其他参数默认即可。
具体参数信息,请参见使用镜像快速创建无状态Deployment应用。
应用重启后,通过就绪检查前完成服务注册即可生效。
通过就绪检查前完成服务预热
除了可以单独使用服务小流量预热、服务延迟注册功能,在一些复杂的线上场景,还可以将其关联K8s就绪检查机制,将应用是否预热完成作为K8s就绪检查通过的衡量指标,以此来保障应用的预热效果,即当应用服务预热完成后,K8s才将应用置为就绪状态。
登录MSE治理中心控制台,并在顶部菜单栏选择地域。
在左侧导航栏,选择 ,然后单击目标应用的资源量卡片。
在目标应用详情页面的左侧导航栏,单击流量治理,然后选择无损上下线页签。
在无损上线区域,配置预热时长(秒)和延迟注册时间(秒)。单击高级设置,开启通过就绪检查前完成服务预热开关。
开启无损上线右侧的开关。
登录容器服务控制台,为目标应用配置就绪检查,完成后单击更新。
选中就绪检查右侧的开启,并配置如下参数。
路径:/health。
端口:55199。
其他参数默认即可。
具体参数信息,请参见使用镜像快速创建无状态Deployment应用。
应用重启后,通过就绪检查前完成服务预热即可生效。