Knative on ASM提供了基于流量的灰度发布能力。当创建Knative服务时,Knative会自动为服务创建第一个修订版本Revision。此后当Knative服务的配置发生变化时,Knative都会创建一个新的修订版本。通过修改流量发往不同修订版本的分配比例,即可实现灰度发布功能。本文介绍如何在Knative on ASM中基于流量灰度发布服务。
本系列文章包括以下部分:
使用ASM管理Knative服务(1):Knative on ASM概述
使用ASM管理Knative服务(2):使用Knative on ASM部署Serverless应用
使用ASM管理Knative服务(3):在Knative on ASM中使用自定义域名
使用ASM管理Knative服务(4):使用ASM网关实现HTTPS访问Knative服务
使用ASM管理Knative服务(5):在Knative on ASM中基于流量灰度发布服务
使用ASM管理Knative服务(6):基于流量请求数实现服务自动扩缩容
前提条件
- 已使用Knative on ASM创建Knative服务。具体操作,请参见使用Knative on ASM快速部署Serverless应用
- 使用默认的域名example.com, 如果使用其他自定义域名, 请参见在Knative on ASM中使用自定义域名
通过控制台创建修订版本
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择应用 > Knative。
- 创建修订版本。选择服务管理页签,然后单击目标服务名称或右侧操作列下的详情。
- 进入服务详情页面后,单击右上角的创建修订版本按钮。
- 在基本信息配置向导步骤,单击高级设置,设置最新修订版本的环境变量, 名称为TARGET, 变量值为Knative on ASM。
- 单击下一步。在流量设置配置向导步骤,设置最新修订版本的流量比例为0,单击创建。
注意 所有修订版本的流量比例之和需要等于100。
- 创建完成后,选择服务管理页签,可以看到新创建服务版本的详细信息。
- 执行以下命令,访问服务。
curl http://helloworld-go.default.example.com
预期输出:
Hello World!
可以看到,由于新版本服务的流量比例为0,访问helloworld-go服务,还是请求到旧版本的服务。
修改流量比例灰度发布服务
- 在服务管理页面,单击目标服务右侧操作列下的详情。
- 单击设置流量比例。
- 在设置流量比例对话框中,将新版本和旧版本的流量比例都设置为50%,然后单击确定。
- 服务流量比例设置成功后,选择服务管理页签,可以看到新版本和旧版本服务的详细信息。
- 执行以下命令,访问服务。
for i in `seq 20`; do curl http://helloworld-go.default.example.com; done;
预期输出:
Hello Knative on ASM!
Hello Knative on ASM!
Hello World!
Hello Knative on ASM!
Hello World!
Hello World!
Hello World!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello World!
Hello Knative on ASM!
Hello World!
Hello Knative on ASM!
Hello Knative on ASM!
Hello World!
Hello World!
由于新、旧版本的流量比例各为50%,所以当前访问helloworld服务的话,基本是按接近50%进行流量分配。
- 可以通过调整流量比例继续灰度发布服务,直到新版本服务的流量比例为100%,完成灰度发布服务。在这个过程中,如果发现新版本有问题,您可以随时通过调整流量比例的方式进行回滚操作。
- 再次访问服务, 可以得到如下类似结果:
for i in `seq 20`; do curl http://helloworld-go.default.example.com; done;
预期输出:
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!
Hello Knative on ASM!