{{< details >}}
- Tier: 基础版,专业版,旗舰版
- Offering: JihuLab.com, 私有化部署
{{< /details >}}
极狐GitLab 灰度发布是一种流行的持续部署策略,其中仅更新应用程序的一小部分。
当采用持续交付时,组织需要决定使用哪种部署策略。其中一种最流行的策略是灰度发布,首先更新应用程序的一小部分。这部分称为灰度测试对象,就像煤矿中的金丝雀一样。
如果应用程序的新版本出现问题,只有少量用户受到影响,变更可以修复或快速回滚。
使用案例
灰度发布可用于当您希望仅将功能发布给部分节点,并观察用户群体访问临时部署功能时的行为。如果一切正常,您可以放心地将功能部署到生产环境。
灰度发布在后端重构、性能改进或其他不改变用户界面的更改中尤为重要,您需要确保性能保持不变或有所提高。开发人员在使用灰度测试时需要谨慎,因为默认情况下,同一用户的请求会随机分配到灰度和非灰度节点之间,这可能会导致混淆或错误。如果需要,您可以考虑在 Kubernetes 服务定义中设置 service.spec.sessionAffinity
为 ClientIP
,但这超出了本文档的范围。
使用 Canary Ingress 进行高级流量控制
灰度发布可以通过Canary Ingress变得更具策略性,这是一种高级流量路由服务,可根据权重、会话、Cookie 等因素控制稳定和灰度发布之间的 HTTP 请求流量。极狐GitLab 在其自动部署架构中使用此服务,以便用户快速且安全地推出新部署。
如何在灰度发布中设置 Canary Ingress
如果您的自动 DevOps 流水线使用v2.0.0+
的 auto-deploy-image
,则默认安装 Canary Ingress。创建新的灰度发布时,Canary Ingress 将变得可用,并在灰度发布被提升为生产环境时销毁。
以下是从头开始设置的示例流程:
- 准备一个启用自动 DevOps 的项目。
- 在您的项目中设置一个Kubernetes 集群。
- 在您的集群中安装NGINX Ingress。
- 根据上面分配的 Ingress 端点设置基础域。
- 检查您的自动 DevOps 流水线中是否使用了
v2.0.0+
的auto-deploy-image
。如果没有,请按照文档指定镜像版本。 -
运行新的自动 DevOps 流水线,确保
production
作业成功并创建生产环境。 - 为自动 DevOps 流水线配置
canary
部署作业。 -
运行新的自动 DevOps 流水线,确保
canary
作业成功并使用 Canary Ingress 创建灰度发布。
在部署板上显示 Canary Ingress 部署(已弃用)
{{< alert type=”warning” >}}
此功能在极狐GitLab 14.5 中已弃用。
{{< /alert >}}
要查看灰度发布,您必须正确配置部署板:
根据部署,标签应为 stable
或 canary
。极狐GitLab 假设标签为空或缺失时的跟踪标签为 stable
。任何其他跟踪标签都被视为 canary
(临时)。这使得极狐GitLab 能够发现部署是稳定的还是灰度的(临时)。
一旦所有设置完成并至少运行了一次流水线,进入 Pipelines > Environments 下的环境页面。当流水线执行时,部署板会清晰地标记灰度节点,提供对每个环境和部署状态的快速清晰洞察。
灰度发布在部署板上标记为黄色点,以便您快速注意到它们。
如何检查 Canary Ingress 上的当前流量权重(已弃用)
{{< alert type=”warning” >}}
此功能在极狐GitLab 14.5 中已弃用。
{{< /alert >}}
- 访问部署板。
-
在右侧查看当前权重。
如何更改 Canary Ingress 上的流量权重(已弃用)
{{< alert type=”warning” >}}
此功能在极狐GitLab 14.5 中已弃用。
{{< /alert >}}
您可以使用 GraphiQL 或通过向 GraphQL API 发送请求,在环境的部署板上更改流量权重。
要使用您的部署板:
- 转到项目的 Operate > Environments。
- 使用右侧的下拉列表设置新权重。
- 确认您的选择。
以下是使用 GraphiQL 的示例:
- 访问 GraphiQL Explorer。
-
执行
environmentsCanaryIngressUpdate
GraphQL 变更:mutation { environmentsCanaryIngressUpdate(input:{ id: "gid://gitlab/Environment/29", # 您的环境 ID。您可以从环境页面的 URL 中获取 ID。 weight: 45 # 新的流量权重。例如,如果您设置 `45`,则 45% 的流量进入灰度发布,55% 的流量进入稳定发布。 }) { errors } }
- 如果请求成功,
errors
响应包含一个空数组。极狐GitLab 向您的 Kubernetes 集群发送PATCH
请求以更新 Canary Ingress 上的权重参数。