目前我们的k8s部署是通过金丝雀发布(灰度发布),

  1. 发布新版本时,当新版本的Pod全部启动成功后,依次替换旧版本的pod
  2. 旧版本的Pod继续运行10秒但不接受新的请求,方便旧pod的异步任务数据处理,10秒后再Kill掉旧版本的Pod。

部署流程:服务重启 => 10秒灰度发布,新旧pod共存 => 新pod依次替代旧pod,旧pod移除调度,等待10秒后发送kill -15信号量给程序 => 程序接受信号量并终止,删除旧pod

金丝雀发布(灰度发布)

与蓝绿部署类似,金丝雀发布也是始于两套环境:有实时流量的环境以及没有实时流量但包含了更新的代码的环境。与蓝绿部署不同的是,流量是逐渐迁移到更新的代码。一开始是1%,然后10%、25%,以此类推,直至100%。通过自动化发布,当确认代码能够正确运行时,它就可以逐步推广到更大、更关键的环境中。如果在任何时候发生了问题,所有流量都会被回滚到之前的版本。这在很大程度上降低了风险,因为仅有一小部分用户会使用到新的代码。

IT不仅可以控制用户部署的比例,而且金丝雀发布还可以从不太重要的用户开始,例如使用免费账户的用户或相对来说不太重要的业务市场。

金丝雀发布:实时流量逐渐从旧版本迁移到新版本直到更新生效。