{{< details >}}

  • Tier: 基础版,专业版,旗舰版
  • Offering: JihuLab.com, 私有化部署

{{< /details >}}

极狐GitLab 灰度发布是一种流行的持续部署策略,其中仅更新应用程序的一小部分。

当采用持续交付时,组织需要决定使用哪种部署策略。其中一种最流行的策略是灰度发布,首先更新应用程序的一小部分。这部分称为灰度测试对象,就像煤矿中的金丝雀一样。

如果应用程序的新版本出现问题,只有少量用户受到影响,变更可以修复或快速回滚。

使用案例

灰度发布可用于当您希望仅将功能发布给部分节点,并观察用户群体访问临时部署功能时的行为。如果一切正常,您可以放心地将功能部署到生产环境。

灰度发布在后端重构、性能改进或其他不改变用户界面的更改中尤为重要,您需要确保性能保持不变或有所提高。开发人员在使用灰度测试时需要谨慎,因为默认情况下,同一用户的请求会随机分配到灰度和非灰度节点之间,这可能会导致混淆或错误。如果需要,您可以考虑在 Kubernetes 服务定义中设置 service.spec.sessionAffinityClientIP,但这超出了本文档的范围。

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

灰度发布可以通过Canary Ingress变得更具策略性,这是一种高级流量路由服务,可根据权重、会话、Cookie 等因素控制稳定和灰度发布之间的 HTTP 请求流量。极狐GitLab 在其自动部署架构中使用此服务,以便用户快速且安全地推出新部署。

如何在灰度发布中设置 Canary Ingress

如果您的自动 DevOps 流水线使用v2.0.0+auto-deploy-image,则默认安装 Canary Ingress。创建新的灰度发布时,Canary Ingress 将变得可用,并在灰度发布被提升为生产环境时销毁。

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

  1. 准备一个启用自动 DevOps 的项目。
  2. 在您的项目中设置一个Kubernetes 集群
  3. 在您的集群中安装NGINX Ingress。
  4. 根据上面分配的 Ingress 端点设置基础域
  5. 检查您的自动 DevOps 流水线中是否使用了v2.0.0+auto-deploy-image。如果没有,请按照文档指定镜像版本。
  6. 运行新的自动 DevOps 流水线,确保 production 作业成功并创建生产环境。
  7. 为自动 DevOps 流水线配置canary 部署作业
  8. 运行新的自动 DevOps 流水线,确保 canary 作业成功并使用 Canary Ingress 创建灰度发布。

在部署板上显示 Canary Ingress 部署(已弃用)

{{< alert type=”warning” >}}

此功能在极狐GitLab 14.5 中已弃用。

{{< /alert >}}

要查看灰度发布,您必须正确配置部署板:

  1. 按步骤启用部署板
  2. 要跟踪灰度发布,您必须使用 track: canary 标记您的 Kubernetes 部署和节点。要快速入门,您可以使用极狐GitLab 提供的灰度发布自动部署模板。

根据部署,标签应为 stablecanary。极狐GitLab 假设标签为空或缺失时的跟踪标签为 stable。任何其他跟踪标签都被视为 canary(临时)。这使得极狐GitLab 能够发现部署是稳定的还是灰度的(临时)。

一旦所有设置完成并至少运行了一次流水线,进入 Pipelines > Environments 下的环境页面。当流水线执行时,部署板会清晰地标记灰度节点,提供对每个环境和部署状态的快速清晰洞察。

灰度发布在部署板上标记为黄色点,以便您快速注意到它们。

Canary deployments on deploy board

如何检查 Canary Ingress 上的当前流量权重(已弃用)

{{< alert type=”warning” >}}

此功能在极狐GitLab 14.5 中已弃用。

{{< /alert >}}

  1. 访问部署板
  2. 在右侧查看当前权重。

    Rollout Status Canary Ingress

如何更改 Canary Ingress 上的流量权重(已弃用)

{{< alert type=”warning” >}}

此功能在极狐GitLab 14.5 中已弃用。

{{< /alert >}}

您可以使用 GraphiQL 或通过向 GraphQL API 发送请求,在环境的部署板上更改流量权重。

要使用您的部署板

  1. 转到项目的 Operate > Environments
  2. 使用右侧的下拉列表设置新权重。
  3. 确认您的选择。

以下是使用 GraphiQL 的示例:

  1. 访问 GraphiQL Explorer
  2. 执行 environmentsCanaryIngressUpdate GraphQL 变更:

    mutation {
      environmentsCanaryIngressUpdate(input:{
        id: "gid://gitlab/Environment/29",              # 您的环境 ID。您可以从环境页面的 URL 中获取 ID。
        weight: 45                                      # 新的流量权重。例如,如果您设置 `45`,则 45% 的流量进入灰度发布,55% 的流量进入稳定发布。
      }) {
        errors
      }
    }
    
  3. 如果请求成功,errors 响应包含一个空数组。极狐GitLab 向您的 Kubernetes 集群发送 PATCH 请求以更新 Canary Ingress 上的权重参数。