当您在进行应用迭代升级时面临新版本兼容性和稳定性挑战时,可以在Knative on ASM中基于流量灰度发布服务。创建Knative服务时,系统会自动创建第一个修订版本Revision,随着服务配置的每次更新变化,Knative都会自动生成新的修订版本,并通过灵活调整发往不同修订版本的流量比例,实现对新版本的精准、实时验证,从而显著降低大规模部署新版本可能引发的潜在风险,保障服务的连续性、用户体验以及问题的及时发现与修复。
前提条件
已使用Knative on ASM创建Knative服务。具体操作,请参见使用Knative on ASM部署Serverless应用。
本示例以默认域名example.com为例为您演示功能。如需使用自定义域名, 请参见在Knative on ASM中使用自定义域名。
通过控制台创建修订版本
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
单击服务管理页签,在服务列表,单击目标服务名称,然后在页面右上角,单击创建修订版本。
在基本信息配置向导的下方,单击高级设置,然后单击环境变量右侧的新增,设置最新修订版本的类型为自定义,变量名称为TARGET,变量/变量引用为Knative on ASM,然后单击下一步。
在流量设置配置向导,设置最新修订版本的流量比例%为0,旧版本服务为100,然后单击创建。
说明所有修订版本的流量比例百分比之和需等于100。
创建完成后,您可以单击服务管理页签,在服务列表,单击目标服务名称,然后在修订版本信息区域查看新创建服务版本的详细信息。
执行以下命令,访问服务。
curl http://helloworld-go.default.example.com
预期输出:
Hello Knative!
预期输出表明,由于新版本服务的流量比例为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 Knative! Hello Knative on ASM! Hello Knative! Hello Knative! Hello Knative! 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! Hello Knative on ASM! Hello Knative! Hello Knative on ASM! Hello Knative on ASM! Hello Knative! Hello Knative!
预期输出表明,由于新、旧版本的流量比例各为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!
预期输出表明,由于新版本服务的流量比例为100%,访问helloworld-go服务时,所有流量都分配至新版本,即灰度发布服务成功。
相关文档
Knative Serving为每个Pod注入QUEUE代理容器(queue-proxy)。该容器负责向Autoscaler报告业务容器的并发指标。接收到这些指标之后,Autoscaler会根据并发请求数及缩放算法,调整Deployment的Pod数量,从而实现自动扩缩容。具体操作,请参见基于流量请求数实现服务自动扩缩容。