金丝雀部署

金丝雀部署是一种流行的持续部署策略,将小部分用户更新到您的应用程序的新版本。

在采用持续交付时,公司需要决定使用哪种类型的部署策略。最流行的策略之一是金丝雀部署,将小部分用户首先更新到新版本。

如果应用程序的新版本出现问题,只有一小部分用户会受到影响,并且可以修复或快速恢复更改。

用例

当您只想将功能发送到您的 pod 队列的一部分并观察它们的行为时,可以使用金丝雀部署,一定百分比的用户群访问临时部署功能。如果一切正常,您可以将该功能部署到生产环境,因为它不会导致问题。

金丝雀部署对于后端重构、性能改进或其它用户界面不变,但您希望确保性能保持不变或有所改进。开发人员在使用带有面向用户更改的金丝雀版本时需要小心,因为默认情况下,来自同一用户的请求会随机分布在金丝雀和非金丝雀 pod 之间,这可能会导致混淆甚至错误。如果需要,您可能需要考虑在 Kubernetes 服务定义中将 service.spec.sessionAffinity 设置为 ClientIP,这超出了本文档的范围。

使用 Canary Ingress 进行高级流量控制

通过使用 Canary Ingress,金丝雀部署可以更具战略性,这是一种高级流量路由服务,可根据权重、会话、cookie 等因素控制稳定部署和金丝雀部署之间的传入 HTTP 请求。 极狐GitLab 在 Auto Deploy 架构中使用此服务让用户快速安全地推出他们的新部署。

如何在金丝雀部署中设置 Canary Ingress

如果您的 Auto DevOps 流水线使用 auto-deploy-imagev2.0.0+ 版本,则默认安装 Canary Ingress。 当您创建新的金丝雀部署时,Canary Ingress 变得可用,并在金丝雀部署升级到生产环境时被销毁。

以下是一个从头开始的示例设置流程:

  1. 准备一个启用了 Auto DevOps 的项目。
  2. 在您的项目中建立一个 Kubernetes 集群
  3. 在集群中安装 NGINX Ingress
  4. 根据上面分配的 Ingress Endpoint 设置基础域名
  5. 检查您的 Auto DevOps 流水线中是否使用了 auto-deploy-imagev2.0.0+ 版本。如果不是,请按照文档指定镜像版本。
  6. 运行新的 Auto DevOps 流水线 并确保 production 作业成功并创建生产环境。
  7. 为 Auto DevOps 流水线配置 canary 部署作业
  8. 运行新的 Auto DevOps 流水线 并确保 canary 作业成功并使用 Canary Ingress 创建金丝雀部署入口。