使用 Argo Rollouts 进行金丝雀发布
Argo Rollouts 使用 Rollout 取代 Kubernetes Deployment,并按照声明的步骤推进发布。它会更新两个 Service,使其分别选择稳定版和金丝雀 ReplicaSet,然后修改路由权重,让网关按指定比例把流量发送到各版本。
本指南会在 20% 流量处创建人工暂停,然后推进到 50%,最后完成发布;还会演示如何中止有问题的版本并恢复期望的 Pod 模板。请选择 Gateway API HTTPRoute 或 ApisixRoute,并在整篇指南中保持一致。
集成成熟度
Argo Rollouts 将其内置 APISIX 流量路由器标记为 alpha。Gateway API 也把本指南使用的外部 Argo Rollouts Gateway API 插件列为 alpha,且该插件没有把 APISIX 或 API7 列入已测试的提供方。在采用任一路径前,请在非生产集群中验证具体版本、权限、提升和中止行为。
前置条件
- 完成设置 Ingress Controller 和网关。
- 安装 Helm、
kubectl和 Argo Rollouts kubectl 插件。 - 确保网关能够访问应用命名空间中的 Service。
- 使用
HTTPRoute时,创建一个状态为Programmed=True的Gateway,其监听器允许应用命名空间中的 Route。 - 使用
ApisixRoute时,为 APISIX 自定义资源配置IngressClass。 - 确定由哪些指标或人工批准决定生产发布能否继续。
以下命令使用 Argo Rollouts Chart 2.41.1(安装 Argo Rollouts v1.9.1)和 Gateway API 流量路由插件 v0.16.0。如果使用更新版本,请先查看其发布说明并验证兼容性。