2. 执行 K8S Job 对预发布环境数据库自动 Migrate,并发布到预发布环境。 3. 此时通过访问 可以访问到新发布的服务。 4. 人工确认:发布生产环境前是否进行 A/B 测试。 5. 在本例,发布后以 Header 包含 location=shenzhen 作为区分 A/B 测试流量。
在浏览器内直接请求 ,流量仍然分流到生产环境。在 Postman 携带 location=shenzhen 的 Header 请求,可以发现流量被分流到“A/B 测试环境”。
6. 人工确认:设置期望的灰度发布比例,自动灰度发布,如选择灰度发布比例为 50%。 7. 请求 ,灰度发布环境和生产环境将以 1:1 的流量比例对外提供服务。 8. 人工确认:全量发布生产环境。 9. 此时请求 访问的是生产环境新版本。 10. 自动配置限流和熔断策略,保证生产稳定性。通过压力测试可看到并发请求有一部分被限流。HttpCode=429,代表 Too Many Requests ,拒绝服务。
对于开发人员,这种渐进式交付经过多轮的灰度、A/B 测试,最大程度减少代码 BUG 发布到生产环境
对于运维人员,这种几乎全自动的交付方式改变了手动修改 yaml 文件,手动 apply 的麻烦,最大程度减少发布产生的人为错误。通过自动触发的方式,减小了与开发的沟通成本
对于产品经理和运营人员,产品迭代不再是靠内部团队“YY”,而是基于实际用户体验数据,了解新功能对于用户和市场的反馈,最大程度减小新功能的用户和市场风险
4. 动手实践 4.1 概览准备一个 K8S 集群,推荐使用腾讯云容器服务;
K8S 集群部署 Traefik 替换 nginx-Ingress 作为 Ingress Gateway,提供更好的流量治理能力;
开通 CODING DevOps,提供镜像构建和流水线的部署能力;
克隆示例代码并推送到自己的 CODING 代码仓库;
复制模板创建部署流水线;
尽情测试。
4.2 实践步骤 4.2.1 克隆源代码并创建构建计划
克隆源代码并推送到自己的 CODING 仓库
git clone https://e.coding.net/wangweicoding/cd-production.git git remote remove origin git remote add origin 你的 CODING 仓库地址 git push origin master
创建构建计划
使用 cd-production 代码仓库内的 Jenkinsfile 创建构建计划
4.2.2 开通腾讯云容器服务开通集群,并在 CODING DevOps 新建 K8S 集群凭证(如有必要,请允许集群外网访问)
4.2.3 通过 CODING DevOps 初始化 Traefik复制代码仓库 cd-production 的 coding-templates/traefik.json 内容,并在 部署控制台 创建 pipeline,点击“编辑 JSON 配置”,将内容复制到输入框。
点击“Update Pipeline”后,自动创建了对应的 Pipeline。
注意请将每一个阶段的云账号修改为自己的云账号。
再点击“保存”即完成 Traefik 初始化的 Pipeline 创建,返回后,点击“立即启动”完成集群 Traefik 的初始化。