背景
对于业务和产品来讲,随时都有紧急小版本功能上线,对于研发人员来讲,线上如果有一些紧急的bug,都需要随时发版修正;而对于产品使用用户来讲,任何的功能和版本发布,要尽可能对用户无感知。
方案
- 灰度发布,自动小批量流量切换。
- 产品层面要切分小版本,研发设计细节上要向上兼容(诸如接口层面)。
- 服务发布要实现滚动发布,发布异常要自动回滚,中间不断服。
其中一部分是工具实现,一部分是项目管理实现,最后一部分是运维层面及架构层面要做的适配和兼容。
k8s 滚动发布方案:
1. 历史实践方案- rancher
k8s采用rancher部署。
1)采用rancher cli 客户端工具登陆rancher,获取发布日志,扫描启动日志“成功标记位”,超过扫描周期,判定为发布失败,通知rancher进行回滚。
2)应用进程关闭前自动通知网关注销节点,通知eureka下线,关闭流量。如果关闭进程超时,则强杀!
实践心得:正常发布情况下基本可用,回滚情况下基本可用;如果出现超时,可能会出现流量少量时间异常。因为靠超时保证稳定性,所以有时发布周期较长。
2. 现有实践方案 - 阿里云k8s
k8s采用阿里云部署。</