配置服务的运行时参数

服务商如允许用户修改服务的配置参数,可在创建服务时开启运行时参数按钮。配置相关参数后,计算巢将为用户提供图形化编辑运行时参数的界面,以降低用户变更运行时参数的门槛。

背景信息

在实际服务使用过程中,经常有需要修改服务运行参数的场景。例如,用户需修改部署服务的端口或最大连接数。通常,用户需自行登录服务部署的ECS实例或ACK集群修改相关的配置文件或ConfigMap。为降低用户编辑配置文件的门槛,您可开启运行时参数功能,并配置相关内容,计算巢将为用户提供图形化编辑参数的界面。

使用方式

  1. 点击我的服务 > 创建新服务 > 自定义创建服务 > 私有部署or全托管服务

  2. 根据服务需求,编辑各配置项与服务的ros模板。

  3. 在ros模板里的Parameters模块下,新增ConfigParam参数,可将下面代码直接复制到您的ros模板中。

    ConfigParam:
      Type: String
      Default: ''
  4. 在编辑页面服务运维(选填)模块找到运行时参数,打开按钮。

    image

  5. 运行时参数支持多模板,多文件配置。您需要首先定义参数分组名,用以在多配置文件的情况下供计算巢区分不同的文件内容。同时需指定该配置文件的指令配置文件格式,计算巢支持cnf、json、yaml、properties、xml等常见格式的配置文件。参数文件内容则需要填写该配置文件的全部内容,例如下图。

    image

  6. 定义可修改的参数。配置文件中参数众多,可供用户编辑的可能只是其中一部分。服务商需要定义这部分参数,同时需要定义这些参数的约束。下面内容请重点关注

    • 配置可编辑参数时。参数名需要与参数文件内容中的参数名一致。对于json、yaml、xml这些参数有层次结构的文件格式,可使用英文句号“.”分割各层。例如,yaml格式的参数。

      root:
        properties:
          value: 1

      参数名可填写为:root.properties.value。

    • 参数类型支持String、Number、List、Boolean、Json。

    • 不同的参数类型支持不同的参数约束规则。其中json和boolean两种不可约束;string类型的参数支持“可选参数”和“匹配表达式”两种约束;number类型的参数支持“可选参数”和“参数极值”两种约束;list类型的参数仅支持“可选参数”一种约束。您可根据自己的情况酌情选择。

      • 可选参数指的是服务商可定义几个备选值供用户选择,不可填写这些值之外的值。例如:

        image

      • 匹配表达式指的是您可以输入一个正则表达式,用户必须填写符合该正则表达式的内容才能够通过校验。同时您需要提供这个表达式的含义供用户参考。例如:

        image

      • 参数极值指的是用户可填写的数字的最大值和最小值。服务商可根据情况限制最大值,或限制最小值,或同时限制最大最小值。例如:

        image

  7. 在ros模板中定义资源,将配置文件的内容写入您的配置文件。根据您部署的方式不同,需要定义不同的ros资源。例如:服务商在运行时参数模块配置了一个叫mysql的参数分组。

    • 如果您的软件部署在ECS实例上。此时通常需要将配置文件写入到ECS机器的特定文件中,可使用ros的RunCommand资源执行写入脚本:

      Resources:
        InstanceRunCommand:
          Type: ALIYUN::ECS::RunCommand
          Properties:
            Sync: true
            CommandContent:
              Fn::Sub:
                - |
                  cat > /root/mysql.cnf << "EOF"
                  ${Mysql}
      
                  EOF
                - Mysql:
                    Fn::Select:
                      - mysql
                      - Ref: ConfigParam
            Type: RunShellScript
            InstanceIds:
              Fn::GetAtt:
                - EcsInstanceGroup
                - InstanceIds
            Timeout: '300'

      上面内容测含义是,定义一个脚本,该脚本向/root/mysql.cnf覆盖式写入内容。而写入的内容则是通过

      Mysql:
        Fn::Select:
          - mysql
          - Ref: ConfigParam

      获取的。Fn::Select:的含义是,从ConfigParam的众多参数分组中筛选参数组名是mysql的参数分组内容。

    • 如果您的软件部署在ACK集群上。这种情况一般是通过ConfigMap存储配置内容,例如:

      Resources:
        ClusterApplication:
          Type: ALIYUN::CS::ClusterApplication
          Properties:
            YamlContent:
              Fn::Sub:
                - |
                  apiVersion: apps/v1
                  kind: StatefulSet
                  metadata:
                    name: mysql-demo
                  spec:
                    replicas: 1
                    selector:
                      matchLabels:
                        app: mysql
                    template:
                      metadata:
                        labels:
                          app: mysql
                      spec:
                        containers:
                          - name: mysql
                            image: mysql:latest
                            ports:
                              - containerPort: 3306
                            volumeMounts:
                              - name: mysql-config
                                mountPath: /etc/mysql/conf.d
                        volumes:
                          - name: mysql-config
                            configMap:
                              name: mysql-config
                  ---
                  apiVersion: v1
                  kind: ConfigMap
                  metadata:
                    name: mysql-config
                  data:
                    my.cnf: |
                  ${ConfigParam}
            
                - ConfigParam:
                    Fn::Indent:
                      - Fn::Select:
                          - mysql
                          - Ref: ConfigParam
                      - 2
            ClusterId: c989ca998e381*************
            DefaultNamespace: mysql-demo

      上文通过yaml部署了一个StatefulSet,同时该StatefulSet挂载了一个ConfigMap存储运行时参数信息。该ConfigMap的key是my.cnf,内容是ConfigParam的内容。

  8. 服务运维(选填)模块的运维模块,点击添加运维操作。进入基础运维项的tab页,勾选重启选项点击确定。更多内容,请参考自定义运维操作说明基础运维项相关内容。

  9. 完成其他内容编辑,保存服务。