服务商如允许用户修改服务的配置参数,可在创建服务时开启运行时参数按钮。配置相关参数后,计算巢将为用户提供图形化编辑运行时参数的界面,以降低用户变更运行时参数的门槛。
背景信息
在实际服务使用过程中,经常有需要修改服务运行参数的场景。例如,用户需修改部署服务的端口或最大连接数。通常,用户需自行登录服务部署的ECS实例或ACK集群修改相关的配置文件或ConfigMap。为降低用户编辑配置文件的门槛,您可开启运行时参数功能,并配置相关内容,计算巢将为用户提供图形化编辑参数的界面。
使用方式
点击
。根据服务需求,编辑各配置项与服务的ros模板。
在ros模板里的Parameters模块下,新增ConfigParam参数,可将下面代码直接复制到您的ros模板中。
ConfigParam: Type: String Default: ''
在编辑页面服务运维(选填)模块找到运行时参数,打开按钮。
运行时参数支持多模板,多文件配置。您需要首先定义参数分组名,用以在多配置文件的情况下供计算巢区分不同的文件内容。同时需指定该配置文件的指令配置文件格式,计算巢支持cnf、json、yaml、properties、xml等常见格式的配置文件。参数文件内容则需要填写该配置文件的全部内容,例如下图。
定义可修改的参数。配置文件中参数众多,可供用户编辑的可能只是其中一部分。服务商需要定义这部分参数,同时需要定义这些参数的约束。下面内容请重点关注:
配置可编辑参数时。参数名需要与参数文件内容中的参数名一致。对于json、yaml、xml这些参数有层次结构的文件格式,可使用英文句号“.”分割各层。例如,yaml格式的参数。
root: properties: value: 1
参数名可填写为:root.properties.value。
参数类型支持String、Number、List、Boolean、Json。
不同的参数类型支持不同的参数约束规则。其中json和boolean两种不可约束;string类型的参数支持“可选参数”和“匹配表达式”两种约束;number类型的参数支持“可选参数”和“参数极值”两种约束;list类型的参数仅支持“可选参数”一种约束。您可根据自己的情况酌情选择。
可选参数指的是服务商可定义几个备选值供用户选择,不可填写这些值之外的值。例如:
匹配表达式指的是您可以输入一个正则表达式,用户必须填写符合该正则表达式的内容才能够通过校验。同时您需要提供这个表达式的含义供用户参考。例如:
参数极值指的是用户可填写的数字的最大值和最小值。服务商可根据情况限制最大值,或限制最小值,或同时限制最大最小值。例如:
在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的内容。
在服务运维(选填)模块的运维模块,点击添加运维操作。进入基础运维项的tab页,勾选重启选项点击确定。更多内容,请参考自定义运维操作说明的基础运维项相关内容。
完成其他内容编辑,保存服务。