更新时间:2025-05-21 GMT+08:00
分享

灰度服务配置

本章介绍通过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

表1 灰度服务类型说明

灰度路由引擎

对应ruleType

SLB(>1.3.11)

SLB

微服务

MicroService

DMQ

DMQ

分布式Job

Job

函数

Function

表2 灰度服务配置字段说明

参数名

类型

是否必选

说明

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>

灰度阶段

表3 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时无效。

表4 GrayRule

参数名

类型

是否必选

说明

param

String

参数名variable为percent时可以为空,否则不能为空,长度<=50。

  • Position为header 时, [a-zA-Z0-9_\-]+
  • Position不为header且RuleType不为Function时, [.a-zA-Z0-9_\-]+
  • Position不为header且RuleType为Function时, [.a-zA-Z0-9_\-\[\]]+

variable

String

  • RuleType为SLB时,传输类型:"province"、"city"、"countryArea"、"custom"、"advance"、"path"、"CLIENT-IP"、"REAL-IP"
  • RuleType非SLB时,传输类型: "province"、"city"、"countryArea"、"custom"、"percent"、"CLIENT-IP"、"REAL-IP"

position

String

位置

  • RuleType非SLB时,不传
  • variable为 "CLIENT-IP"、"REAL-IP" 时,为 "NA"
  • variable为其他时,为"url"、"body-json"、"body-form"、"header"、"locale"、"resource"、"localeCountryArea"、"NA"、"path"、"percent"

match

String

匹配方法

  • RuleType为SLB时: "pattern"、"sha256"、"equal"、"rangeIP"、"locateIn"、"tailEqual"、"locateInCountryArea"、"NA"
  • RuleType非SLB时: "pattern"、"sha256"、"equal"、"rangeIP"、"locateIn"、"tailEqual"、"locateInCountryArea"、"NA"、"gt"、"ge"、"lt"、"le"、"notEqual"、"percent"
  • variable为 "CLIENT-IP"、"REAL-IP" 时,为 "sha256"、"rangeIP"
  • variable为 " path " 时,为 "pattern"、"equal"

values

String

匹配值列表,多个值逗号分隔

  • match为 "tailEqual" 时,每个长度小于4
  • match为 " rangeIP " 时,样例xx.xx.xx.x-xx.xx.xx.xx
表5 GrayRuleGroup

参数名

类型

是否必选

说明

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

相关文档