灰度服务配置
本章介绍通过IaC进行灰度服务配置的管理,包括灰度规则的管理及灰度阶段切换。对应的资源类型为WiseCloud::LoadBalancer::GrayConfig。
灰度比例转换为pod个数是通过向下取整法,例如:共6个pod,如果灰度比例配置为10%,灰度pod个数则为6 * 0.1 = 0.6,向下取整 = 0,但是必须保持1个的副本数,所以仍要置为1;如果灰度比例配置为20%,灰度pod个数则为6 * 0.2 = 1.2,向下取整 = 1。
使用限制
- 如果灰度集群(bindSlb.grayStatus配置为2)想要使用多阶段灰度升级,要求bindSlb.grayStatus在灰度期间保持配置为2。
- 首次部署时不要配置grayStage,因为要进行灰度升级首先要保证有一个正常运行的版本作为生产,而如果首次部署是满足不了这个条件的,所以要至少正确部署过一次之后才能进行灰度升级。
- 配置了grayInstances即代表要进入多阶段灰度升级,且百分比只能配置为1%~100%(字符串);但是如果第一阶段就直接配置为100%,则仍然执行普通升级模式。
- 灰度升级期间(包括进入灰度时),IaC配置中不允许修改grayStage.grayStatus、min_instances、max_instances和SLB相关配置,其他配置可以修改。
- 灰度升级过程中,如果grayInstances的比例达到了100%,grayProcess为INGRAY时,再进行比例缩小时,该场景只允许修改灰度比例。
- 灰度升级过程中,如果发现灰度版本配置错误,可以修改IaC配置将灰度集群进行重新部署,但是这时不允许修改grayInstances,即IaC配置和灰度比例只能修改其中一个。
- 多阶段灰度升级中,业务将grayInstances配置为100%(未配置grayProcess字段)或grayInstances配置为100%、grayProcess为FINISHED并部署成功后,才算灰度结束了;中间一个阶段部署成功了不算结束灰度,只算这一阶段部署成功了,此时仍然算在灰度升级过程中。
- 灰度过程中,不允许业务再执行普通部署,不允许在管理台上修改配置,只能通过IaC部署修改。
- 多阶段灰度升级和滚动升级同时使用时,maxUnavailable值必须配为0。
配置字段说明
灰度服务类型如表1所示,灰度服务配置字段说明请参见表2,各类型灰度路由引擎配置样例请参见配置样例,灰度升级配置demo请参见灰度升级配置demo。
参数名 |
类型 |
是否必选 |
说明 |
---|---|---|---|
ruleType |
String |
是 |
类型:SLB、MicroService、Job、DMQ、Function。 |
currentStage |
int |
否 |
当前阶段,1=<currentStage<=sizeOf(Stages),默认为1。 |
currentStatus |
String |
否 |
当前状态,取值为Processing、Pause、Complete,默认为Complete。 |
functionName |
String |
否 |
ruleType为Function时必填,否则无效,长度<=200。 |
functionAliasName |
String |
否 |
ruleType为Function时必填,否则无效,长度<=255。 functionAliasName别名不能重复,一个别名只能有一条记录。 |
routeFlag |
String |
否 |
取值为Default/Special,默认为Default。 |
Stages |
List<GrayStage> |
是 |
灰度阶段 |
参数名 |
类型 |
是否必选 |
说明 |
---|---|---|---|
stageIndex |
int |
否 |
阶段编号,最好按照顺序填写1 , 2 , 3 , 4… ,缺省为0 ,后台会排序后,按顺序赋值为1.2.3.4….。 |
greyRuleRelation |
String |
否 |
取值为or或and RouteType为SLB时必选,不为SLB时无效。 |
rules |
List<GrayRule> |
否 |
RouteType为SLB时必选,不为SLB时无效。 |
groupRelation |
String |
否 |
取值为or或and RouteType不为SLB时必选,为SLB时无效。 |
userExtendedParameter |
String |
否 |
RouteType为Job时有意义,非必选,不为job时无效,必须是json字符串格式。 |
groups |
List<GrayRuleGroup> |
否 |
RouteType为非SLB时必选,为SLB时无效。 |
参数名 |
类型 |
是否必选 |
说明 |
---|---|---|---|
param |
String |
是 |
参数名variable为percent时可以为空,否则不能为空,长度<=50。
|
variable |
String |
是 |
|
position |
String |
否 |
位置
|
match |
String |
是 |
匹配方法
|
values |
String |
是 |
匹配值列表,多个值逗号分隔
|
参数名 |
类型 |
是否必选 |
说明 |
---|---|---|---|
groupIndex |
Int |
否 |
建议按照顺序填写0,1,2,3,4… 不写默认从0开始排序,按顺序赋值为0,1,2,3,4….。 |
greyRuleRelation |
String |
是 |
取值为and或or |
microServiceVersion |
String |
否 |
微服务版本号,MicroServiceVersion和useInstanceProperty二选一。 Function类型可以两个都不选,DMQ类型只支持版本号。 如果配置组之间关系为与,各个配置组的版本号相同。 长度<=50 |
useInstanceProperty |
String |
否 |
微服务自定义灰度参数,MicroServiceVersion和useInstanceProperty二选一。 Function类型可以两个都不选,DMQ类型只支持版本号。 长度<=50 |
rules |
List<GrayRule> |
是 |
灰度规则列表 |
配置样例
SLB类型样例:
- name: clf_iac3.0_example_gray_SLB // name+type唯一定位到一个灰度服务资源 type: 'WiseCloud::LoadBalancer::GrayConfig' //资源类型为灰度服务配置 properties: ruleType: SLB stages: - stageIndex: 1 rules: - param: path values: '5555' match: equal variable: path position: path greyRuleRelation: or
微服务类型样例:
- name: clf_iac3.0_example_gray_MicroService type: 'WiseCloud::LoadBalancer::GrayConfig' properties: currentStatus: Processing ruleType: MicroService stages: - stageIndex: 1 groupRelation: or groups: - microServiceVersion: latest rules: - param: aaa values: '111' match: equal variable: custom groupIndex: 1 greyRuleRelation: or
DMQ类型样例:
- name: clf_iac3.0_example_gray_DMQ type: 'WiseCloud::LoadBalancer::GrayConfig' properties: ruleType: DMQ stages: - stageIndex: 1 groupRelation: and groups: - microServiceVersion: gray_1 rules: - param: aaa values: '2222' match: pattern variable: custom - param: bbb values: '1111' match: equal variable: custom groupIndex: 1 greyRuleRelation: or
Job类型样例:
- name: clf_iac3.0_example_gray_Job type: 'WiseCloud::LoadBalancer::GrayConfig' properties: ruleType: Job stages: - stageIndex: 1 groupRelation: or groups: - microServiceVersion: last rules: - param: ccc values: ccc match: equal variable: custom position: '' groupIndex: 1 greyRuleRelation: or - stageIndex: 2 groupRelation: or groups: - microServiceVersion: last rules: - param: ddd values: ddd match: tailEqual variable: custom groupIndex: 1 greyRuleRelation: or
Function类型样例:
- name: clf_iac3.0_example_gray_Function type: 'WiseCloud::LoadBalancer::GrayConfig' properties: functionAliasName: >- wisefunction:222cn:iot:mcb1fbf087634f199f3a4251c5b8a91e:function:pyd:quanzhong2wisefunction:cn:iot:mcb1fbf087634f199f3a4251c5b8a91e:function:pyd:quanzhong2wisefunction:cn:iot:mcb1fbf087634f199f3a4251c5b8a91e:function:pyd:quanzhong2 functionName: pyd ruleType: Function stages: - stageIndex: 1 groupRelation: or groups: - rules: - param: appid values: '123456,22222' match: equal variable: custom groupIndex: 1 greyRuleRelation: or