开发模板规范 - 完整版
基本介绍
如果想快速了解规范可以先阅读应用开发模板规范 - 基础版。
开发者提交一个应用需要包含以下几个文件:
-
config.json
该文件包含最终用户创建此应用实例时需设置的参数等信息,包括各种角色的节点配置、参数配置等。
-
cluster.json.mustache
该文件包含创建此应用实例时的基础架构、应用实例生命周期管理和自定义监控告警等信息,这是一个改进版的 mustache 文件。
-
replace_policy.json
类型替换策略
-
locale/en.json
英文翻译文件
-
locale/zh-cn.json
中文翻译文件
说明 |
---|
|
规范
config.json
此配置文件定义用户在创建应用的时候需填入的参数信息,参数包括资源信息如 CPU、内存、节点数等,还包括应用本身配置参数以及外面依赖集群信息等。
对于弹性裸金属服务器BM(BareMetal)类型的应用,不需要在 config.json
中配置CPU、内存、硬盘大小等信息,只需要配置弹性裸金属服务器的类型 instance_type
即可。
这些信息有集群级别的全局设置,也有基于角色节点级别的信息设置。下面是对每个参数详细的解释:
说明 |
---|
role_name, common.param名称自定义,右上角带3个星号(*)表示该项有 sibling (兄弟)节点,开发者提交的时候也要去掉这个标记。cluster 的 name 和 description 不需要自定义。另外,env 表示集群的环境变量,每一个变量的 key 会作为配置名直接展示给用户(key不能包含空格),它的 label 属性可以是空字符串 ""。 |
{
"type": "array",
"properties": [{
"key": "cluster",
"description": "cluster properties",
"type": "array",
"properties": [{
"key": "name",
"label": "Name",
"description": "The name of the application",
"type": "string",
"default": "",
"required": "no"
}, {
"key": "resource_group",
"label": "Resource Configuration",
"description": "The resource configuration of the service",
"type": "string",
"customizable": true,
"default": "Standard",
"range": ["Standard", "Enterprise", "Enterprise Plus"]
}, {
"key": "description",
"label": "Description",
"description": "The description of the application",
"type": "string",
"default": "",
"required": "no"
}, {
"key": "vxnet",
"label": "VxNet",
"description": "The vxnet that the application will join",
"type": "string",
"default": "",
"required": "yes"
}, {***
"key": "external_service",
"label": "External Service",
"description": "Choose an external service to use",
"type": "service",
"limits": {
"app-id"***: ["app-version"***]
},
"allowed_operations": ["add", "modify", "delete"],
"default": "",
"required": "yes"
}, {***
"key": "role_name",
"description": "role-based node properties",
"label": "Role Name",
"type": "array",
"properties": [{
"key": "loadbalancer",
"label": "Loadbalancer Service",
"description": "Choose a loadbalancer service to use",
"type": "loadbalancer",
"port": 80,
"default": [],
"required": "yes"
}, {
"key": "cpu",
"label": "CPU",
"description": "CPUs of each node",
"type": "integer",
"default": 1,
"range": [1, 2, 4, 8, 16],
"required": "yes",
"resource_group": [1, 4, 16]
}, {
"key": "cpu_model",
"label": "CPU Microarchitecture",
"description": "CPU Microarchitecture",
"type": "string",
"default": "Westmere",
"changeable_when_create": false,
"range": [
"",
"Westmere",
"SandyBridge",
"IvyBridge",
"Haswell",
"Broadwell",
"Skylake",
"CascadeLake"
],
"required": "no"
}, {
"key": "memory",
"label": "Memory",
"description": "Memory of each node (in MiB)",
"type": "integer",
"default": 2048,
"range": [2048, 8192, 16384, 32768, 49152],
"required": "yes"
}, {
"key": "gpu",
"label": "GPU",
"description": "GPUs of each node",
"type": "integer",
"default": 1,
"range": [0, 1, 2],
"required": "yes"
}, {
"key": "count",
"label": "Count",
"description": "Number of nodes for the cluster to create",
"type": "integer",
"default": 3,
"max": 100,
"min": 1,
"required": "yes",
"auto_scale_step": 2,
"resource_group": [3, 5, 7]
}, {
"key": "instance_class",
"label": "Instance Class",
"description": "The instance type for the cluster to run,such as high performance,high performance plus",
"type": "integer",
"default": 101,
"range": [101, 202],
"required": "yes"
}, {
"key": "gpu_class",
"label": "GPU Class",
"description": "The gpu type for the cluster to run,such as high performance",
"type": "integer",
"default": 0,
"range": [0, 2],
"required": "yes"
}, {
"key": "volume_class",
"label": "Volume Class",
"description": "The volume type for each instance,such as high performance,high performance plus,high capacity",
"type": "integer",
"default": 100,
"range": [100, 200, 5],
"required": "yes"
}, {
"key": "volume_size",
"label": "Volume Size",
"description": "The volume size for each instance",
"type": "integer",
"default": 10,
"min": 10,
"step": 10,
"auto_scale_step": 10,
"required": "yes"
}, {
"key": "replica",
"label": "Replica",
"description": "The replica number for each node with this role",
"type": "integer",
"default": 1,
"required": "yes"
}]
}]
}, {
"key": "env",
"description": "application configuration properties",
"type": "array",
"properties": [{***
"key": "common.param",
"label": "Common Param",
"description": "The common.param1 for all nodes",
"type": "string",
"changeable": true,
"default": "value1,value11",
"separator": ",",
"range": ["value1", "value11", "value111"],
"multichoice": true,
"system": false,
"required": "yes",
"expanded": true
}, {***
"key": "role_name",
"description": "The role configuration properties of the application",
"type": "array",
"properties": [{***
"key": "param",
"label": "Role Param",
"description": "The param for all slave nodes",
"type": "string",
"changeable": true,
"default": "value1",
"range": ["value1", "value11"],
"required": "yes"
}]
}]
}, {
"key": "service_params",
"description": "Custom service configuration properties",
"type": "array",
"properties": [{***
"key": "common.param",
"label": "Common Param",
"description": "The common.param1 for all nodes",
"type": "string",
"default": "value1,value11",
"separator": ",",
"range": ["value1", "value11", "value111"],
"multichoice": true,
"required": "yes"
}, {***
"key": "role_name",
"description": "Custom service the role (role_name) configuration properties",
"type": "array",
"properties": [{***
"key": "param",
"label": "Role Param",
"description": "The param for all slave nodes",
"type": "string",
"pattern": "^value.+",
"default": "value1",
"range": ["value1", "value11"],
"required": "yes"
}]
}]
}]
}
对于弹性裸金属服务器 BM(BareMetal) 类型的应用,我们无需配置 CPU、内存、硬盘大小等参数,只需指定弹性裸金属服务器的类型即可,示例见 config.json,与 KVM
类型应用稍有不同。
json 配置项中的每一项,都是一个含有 key、label、description、type、range 等参数的 object。配置项支持嵌套,若 type 为 array,则该项的 properties 填写一个有序列表,在用户部署应用的时候填写配置使用,因此需要注意配置项的顺序。配置项中各参数的解释如下:
参数 | 描述 |
---|---|
key |
对应 cluster.json.mustache 文件索引的值,例如 {{cluster.name}} 表示 config.json 中 cluster 内 key=name 的项用户所填写的值。 |
label |
用户部署应用时,填写配置项的名称。如果提供了国际化的配置文件,会进行国际化。 |
description |
用户部署应用时,填写配置项的描述。如果提供了国际化的配置文件,会进行国际化。 |
type |
该配置项的类型,请参考数据类型。 |
range |
限定配置项的取值范围,是一个可枚举的数组。 |
multichoice |
和 range 配合使用,定义为 true 则为多选,默认是 false 为单选。 |
separator |
定义 multichoice 为 true 时有效,多选后多个值连接所使用的分隔符,默认值为逗号。 |
min |
若配置项 type 为 integer 或 number(浮点数),指定该项的最小值。 |
max |
若配置项 type 为 integer 或 number(浮点数),指定该项的最大值。若配置项是 volume_size,通常不建议指定该值。 |
step |
若配置项是 volume_size,指定硬盘每次调整的最小步长单位。在每个云服务器挂多块盘时,通常需要指定该项。 |
auto_scale_step |
自动伸缩的步长。若配置项是 volume_size,指定硬盘每次自动伸缩的步长单位;若配置项是 count,指定该类角色节点数自动伸缩的步长单位。 |
pattern |
正则表达式,可用该值规范填写内容。 |
default |
该项的默认取值,若 required 设为 "no",default 值必须提供。 |
参数 | 描述 |
---|---|
customizable |
若配置项是 resource_group,该项表示用户部署应用时,除 resource_group 中定义好的组合外,是否允许自定义。默认值是 true。 |
changeable_when_create |
指示在用户 |
system |
定义在某个 env 下,如果是 true,就会将这个变量的展示提升到最上层,优先让用户看到并选择。默认值是 false。 |
expanded |
是否展开配置项,值范围:true、false。部署集群时,true 值会将配置项展开,false 值会将配置项折叠,优先级最高。 |
required |
是否为必填项,值范围:yes、no。部署集群时,yes 值会将配置项展开,no 值会将配置项会折叠,优先级低于 expanded。 |
changeable |
如果为 false 表示该项用户在创建应用实例时候需要赋值,创建完毕以后则不能修改,比如数据库实例用户名和密码等类型的参数,默认值为 true。 |
dependencies |
当前配置项与其他配置项有依赖关系,值为:[{"refkey":"xxx","values":["value"],"operator":"in"}],其中 refkey 表示依赖的同一级别的且有 range 配置项的 key;values 表示当选中依赖的配置项 key 的 value 值范围;operator 可选值为 in 或 nin,分别在 values 范围内或不在 values 范围内。样例参考:环境变量里如何支持层级联动关系 |
associate_mode |
type 是 eip 的 env 中,可定义此参数,表示公网 IP 绑定模式:0 为外部绑定,1 为内部绑定,默认是 0。 |
一些系统预留(即必须提供)的项含义如下:
参数 | 描述 |
---|---|
name |
创建应用时用户填入的名称 |
description |
创建应用时用户填入描述信息 |
vxnet |
创建应用时所在网络ID |
一些特殊项含义如下:
参数 | 描述 |
---|---|
external_service |
此应用依赖外部应用信息,名称可以任意定义,即可以命名为 zk_service 表示依赖 ZooKeeper,用户可以选择在同一 VPC 中满足 limits 限定条件的集群作为此应用依赖的服务。
limits 限定条件可以指定应用所依赖服务的 app id 及 app version。
|
resource_group |
用来说明当前这个集群支持哪些配置组合,必须定义range。 在 role 下的 cpu/memory/count/instance_class/volume_size/volume_class/replica 里面可以定义 resource_group, 表示每个 resource_group 对应的值。 |
cluster.json.mustache
该文件是在用户创建应用时需要传给云平台 API 的参数,这些信息的具体值是来自用户在 UI 上根据 config.json 定义的变量的输入,每个字段的具体描述如下:
说明 |
---|
|
{
"name": {{cluster.name}},
"description": {{cluster.description}},
"vxnet": {{cluster.vxnet}},
"need_tag": false,
"links": {
"external_service"***: {{cluster.external_service}}
},
"exclude_node_columns": ["private_ip"],
"need_intranet_api_server": false,
"backup_policy": "device",
"incremental_backup_supported": false,
"upgrade_policy": [
"appv-xxxxxxxx",
"appv-yyyyyyyy"
],
"upgrading_policy": "parallel",
"nodes": [{***
"role": "role_name",
"loadbalancer": {{cluster.role_name.loadbalancer}},
"container": {
"type": "kvm",
"image": "img-skhdp16m",
"zone": "pek3a"
},
"cpu": {{cluster.role_name.cpu}},
"cpu_model": {{cluster.role_name.cpu_model}},
"memory": {{cluster.role_name.memory}},
"instance_class": {{cluster.role_name.instance_class}},
"gpu": {{cluster.role_name.gpu}},
"gpu_class": {{cluster.role_name.gpu_class}},
"count": {{cluster.role_name.count}},
"volume": {
"size": {{cluster.role_name.volume_size}},
"mount_point": "/data",
"mount_options": "defaults,noatime",
"filesystem": "ext4",
"class": {{cluster.role_name.volume_class}}
},
"replica": {{cluster.role_name.replica}},
"extra_quota": {
"cpu": 2,
"memory": 8,
"instance_class": 101,
"gpu": 2,
"gpu_class": 0,
"count": 2,
"volume": {
"size": 20,
"count": 2,
"class": 100
},
"loadbalancer": 2,
"bucket": 2,
"security_group": 2
},
"reserved_ips": {
"wvip": {
"value": ""
}
},
"passphraseless": "ssh-dsa",
"vertical_scaling_policy": "parallel",
"user_access": false,
"eip_class": "base",
"services": {
"init": {
"nodes_to_execute_on": 1,
"post_start_service": false,
"cmd": "mkdir -p /bigdata1/myapp;/opt/myapp/bin/init-cluster.sh"
},
"start": {
"order": 1,
"cmd": "/opt/myapp/bin/start-server.sh"
},
"stop": {
"cmd": "/opt/myapp/bin/stop-server.sh"
},
"scale_out": {
"pre_check": "/opt/myapp/sbin/scale-out-pre-check.sh",
"cmd": "/opt/myapp/sbin/scale-out.sh"
},
"scale_in": {
"pre_check": "/opt/myapp/sbin/scale-in-pre-check.sh",
"cmd": "/opt/myapp/sbin/scale-in.sh",
"timeout": 86400
},
"restart": {
"cmd": "/opt/myapp/sbin/restart-server.sh"
},
"destroy": {
"allow_force": true,
"nodes_to_execute_on": 1,
"post_stop_service": true,
"cmd": "/opt/myapp/sbin/destroy-server.sh"
},
"upgrade": {
"cmd": "/opt/myapp/sbin/upgrade.sh"
},
"rollback": {
"cmd": "/opt/myapp/bin/rollback.sh"
},
"get_nodes_order": {
"event": ["upgrade", "rollback", "scale_vertical"],
"cmd": "/opt/myapp/bin/get-nodes-order.sh"
},
"backup": {
"cmd": "/opt/myapp/sbin/backup.sh",
"nodes_to_execute_on": 1,
"with_replica": false,
"order": 1,
"service_params": {
"service_param"***: {{service_params.role_name.param}}
},
"timeout": 86400
},
"restore": {
"cmd": "/opt/myapp/sbin/restore.sh",
"nodes_to_execute_on": 1,
"with_replica": false,
"order": 1,
"service_params": {
"service_param"***: {{service_params.role_name.param}}
},
"timeout": 86400,
},
"delete_snapshot": {
"cmd": "/opt/myapp/sbin/delete_snapshot.sh",
"nodes_to_execute_on": 1,
"order": 1,
"service_params": {
"service_param"***: {{service_params.role_name.param}}
},
"timeout": 86400
},
"custom_service"***: {
"type": "custom",
"cmd": "/opt/myapp/sbin/custom_service.sh",
"timeout": 86400,
"service_params": {
"service_param"***: {{service_params.role_name.param}}
}
}
},
"server_id_upper_bound": 255,
"env": {
"param"***: {{env.role_name.param}}
},
"agent_installed": true,
"custom_metadata": {
"cmd": "/opt/myapp/sbin/get_token.sh"
},
"health_check": {
"enable": true,
"interval_sec": 60,
"timeout_sec": 10,
"action_timeout_sec": 30,
"healthy_threshold": 3,
"unhealthy_threshold": 3,
"check_cmd": "/opt/myapp/bin/check.sh",
"action_cmd": "/opt/myapp/bin/action.sh"
},
"monitor": {
"enable": true,
"cmd": "/opt/myapp/bin/monitor.sh",
"items": {
"item_name_x"***: {
"unit": "",
"value_type": "str",
"statistics_type": "avg",
"scale_factor_when_display": 1,
"enums": ["value_y"***]
}
},
"groups": {
"group_name_z"***: ["item_name_x"***]
},
"display": ["group_name_z"***, "item_name_x"***],
"alarm": ["item_name_x"***]
}
}],
"env": {
"common.param"***: {{env.common_param}}
},
"advanced_actions": ["change_vxnet", "scale_horizontal", "associate_eip"],
"endpoints": {
"client": {
"port": 2181,
"protocol": "tcp"
},
"reserved_ips": {
"rvip": {
"value": ""
}
}
},
"metadata_root_access": false,
"health_check": {
"enable": true,
"interval_sec": 60,
"timeout_sec": 10,
"action_timeout_sec": 30,
"healthy_threshold": 3,
"unhealthy_threshold": 3,
"check_cmd": "/opt/myapp/bin/check.sh",
"action_cmd": "/opt/myapp/bin/action.sh"
},
"monitor": {
"enable": true,
"cmd": "/opt/myapp/bin/monitor.sh",
"items": {
"item_name_x"***: {
"unit": "",
"value_type": "str",
"statistics_type": "avg",
"scale_factor_when_display": 1,
"enums": ["value_y"***]
}
},
"groups": {
"group_name_z"***: ["item_name_x"***]
},
"display": ["group_name_z"***, "item_name_x"***],
"alarm": ["item_name_x"***]
},
"display_tabs": {
"node_details_tab": {
"cmd": "/opt/myapp/bin/node_details_tab.sh",
"roles_to_execute_on": ["master", "slave"],
"description": "More infomation about nodes",
"timeout": 10
}
}
}
name
新建应用的名称,必填项,但值可以为空。
description
新建应用描述,必填项,但值可以为空。
vxnet
新建应用所在网络 ID,必填项。
need_tag
部署的集群内会创建一些其他资源,希望这些资源与集群同生命周期:随着集群销毁一并销毁。 need_tag 值为 true 时,会为集群绑定一个 tag_id,并注册到 metadata service, 参见 Metadata 服务中的 cluster_tag, 所有集群内通过 api 创建的资源,需要调用 api 绑定上这个 tag_id, 这样创建的资源,会在集群详情页以列表形式展示给用户,支持的资源包括: volume、loadbalancer、eip、security_group、snapshot、nic。
need_intranet_api_server
部署的集群,是否需要依赖 intranet api server,进行云平台 api 的调用。若环境基础网络中未部署 intranet api server,会报错。
exclude_node_columns
部署后的集群详情页中,哪些列不需要展示,目前支持 private_ip 表示不展示 ip 列,非必填项。
links
新建应用可能会依赖外部应用,比如 Kafka 依赖 ZooKeeper,依赖名称可以任意命名,不一定是 external_service,比如命名为 zk_service;可以依赖多个外部应用,非必填项。
说明 |
---|
|
backup_policy
定义应用的备份策略,支持 "device" 和 "custom" 两种类型。"device" 表示对节点的挂盘做snapshot;"custom" 则是使用自定义的备份命令进行备份操作,比如备份到某个目录,或拷贝到某个节点。非必填项。
incremental_backup_supported
定义应用是否支持增量备份。备份分为全量备份和增量备份,全量备份每次创建新的备份链,而增量备份会在原有备份链上基于上一个备份点创建新的备份点,删除备份链上某一备份点后,其后的所有备份点都会被相应删除。默认值为 false 表示只支持全量备份,非必填项。
upgrade_policy
定义当前应用的哪些版本可以升级到当前版本,新老版本之间 role 必须相同,数据盘挂载位置必须一致。由于升级后会替换集群的镜像,所以在开发阶段_请仔细测试升级功能_。
upgrading_policy
定义版本升级的模式,支持parallel、sequential、in-place-parallel 和 in-place-sequential,默认是parallel,非必填项。
升级后再开启集群将会以新版本的镜像启动。对于 user_access 为 true 的节点也会使用新的镜像启动,请在使用说明中提醒用户自行备份 user_access 为 true 节点上的数据。
-
parallel:并行升级,需要关闭集群才能执行,集群节点会同 时启动并执行升级,因此升级的过程中集群提供的服务会短时中断,升级失败时,需先关闭集群再降级或启动。
-
sequential:滚动升级,需要集群在开机状态才能执行,集群节点会逐个重启并执行升级,这样集群提供的服务不会中断,滚动升级的流程参考集群升级,升级失败时,需先关闭集群再降级或启动。
-
in-place-parallel:原地并行升级,不更新 image,所以不需要重启云服务器,定义方式可以参考:如何定义原地升级方式,拷贝数据完成后,按照 upgrade 的 order 顺序,并行执行 cmd。升级失败时,只支持集群活跃状态下再次升级或降级,降级时,按照 rollback 的 order 顺序,并行执行 cmd。升级完成后,关闭集群再启动集群会替换 image(只有在升级或降级成功后才会替换;升级失败,关闭启动,不会更新 image)。
-
in-place-sequential:原地串行升级,不更新 image,所以不需要重启云服务器,定义方式可以参考:如何定义原地升级方式,拷贝数据完成后,按照 get_nodes_order 的执行结果,以及 upgrade 的 order 顺序,串行执行 cmd。升级失败时,只支持集群活跃状态下再次升级或降级,降级时,按照 get_nodes_order 的执行结果,以及 rollback 的 order 顺序,串行执行 cmd。升级完成后,关闭集群再启动集群会替换 image(只有在升级或降级成功后才会替换;升级失败,关闭启动,不会更新 image)。
nodes
新建应用节点信息,必填项。一个应用的节点可能是无角色区分的,这个时候 nodes 只有一种角色的信息;也可能是多角色组成的复杂应用,这个时候 nodes 就是这些角色节点信息组成的一个数组。
role
多角色节点应用必填项,单角色应用可以无此项。角色名称自定义,但必须和 config.json 里定义的名字一致。
loadbalancer
新建应用可能会依赖负载均衡器,不同角色 (role) 以依赖不同的负载均衡器。
container
镜像信息,必填项。
参数 | 描述 |
---|---|
type |
镜像类型,目前支持 kvm,docker。 |
image |
镜像 ID,开发者根据镜像制作指南制作的以 img- 开头的镜像 ID,如果是 docker 则是 docker image name,包含 tag 部分。 |
zone |
镜像制作时所属区域 (如果是 docker 镜像,则无需填写该字段) |
cpu
每个节点 cpu 个数,可选值范围:1, 2, 4, 8, 12, 16, 24, 32, 64。
cpu_model
节点的 CPU 体系结构,可选值范围:Westmere、SandyBridge、IvyBridge、Haswell、Broadwell、Skylake、CascadeLake。 查看对应的 CPU 指令集
memory
每个节点内存大小,单位 MiB。可选值范围:1024, 2048, 4096, 6144, 8192, 12288, 16384, 24576, 32768, 40960, 49152, 65536, 81920, 98304, 114688, 131072, 163840, 196608, 229376, 262144, 327680。
instance_class
节点类型,可选值范围:0, 1, 101, 201, 202, 301。其中 0 表示性能云服务器,1 表示超高性能云服务器,101 表示基础型云服务器,201 表示企业型 e1 云服务器,202 表示企业型 e2 云服务器,301 表示专业增强型云服务器。可选项,默认值为 0。
建议值:101, 202, 301。其中 0, 1, 201 这三种云服务器类型,会逐步做下架处理,故不建议使用。
gpu
每个节点 gpu 个数,可选值范围:0, 1, 2, 4, 8。
gpu_class
节点 gpu 类型,可选值范围:0,2。其中 0 表示 NVIDIA GPU,2 表示 AMD GPU。可选项,默认值为0。
count
节点个数,必填项,可以为0,但集群节点总数必须大于0。
volume
每个节点数据盘信息,如果此类节点不需要数据盘,不需要填写此项。
参数 | 描述 |
---|---|
size |
每个节点数据容量大小,单位 GiB,注:是单个节点总容量大小,不是每个挂盘容量大小,如果有多个挂盘,则容量平均分配到每个挂盘上,必填项。单张容量盘最大5000G,单张性能盘和超高性能盘最大1000G,且单张步长大小需是10的整数倍。 |
mount_point |
每个节点数据盘挂载路径,可以是单个数据盘, 也可以有多个数据盘,多个数据盘以数组形式表示,如 "mount_point": ["/data1","/data2"]。如果image是基于 Linux 操作系统,默认挂载路径为 /data; 如果 image 是基于 Windows 操作系统,默认挂载路径是 d:, 挂载路径是盘符(后面须带冒号,可选的盘符名从 d 开始,z 结束)。目前最大支持3块数据盘挂载到节点上。请注意,如果挂载了多块数据盘,config.json 对应的 volume_size 部分,最好设置一下 min,step 这 2 个值,以配置创建集群、扩容集群时的范围和步长。例如挂载盘数为3,可以指定 |
mount_options |
描述数据盘的挂接方式,默认值 ext4 是 defaults,noatime,xfs 是 rw,noatime,inode64,allocsize=16m。 |
filesystem |
数据盘文件系统类型。如果 image 是基于 Linux 操作系统,目前支持 ext4 和 xfs,默认为 ext4; 如果 image 是基于 Windows 操作系统,目前支持 ntfs, 默认为 ntfs。 |
class |
数据盘类型,支持 0、2、3、5、6、100、200 其中 0 表示性能盘,3 表示超高性能盘,2 表示容量盘,5 表示 NeonSAN,6 表示 NeonSAN 容量盘,100 表示基础型硬盘,200 表示企业性硬盘。可选项,如果不写此项,数据盘类型和云服务器类型一样,即性能云服务器挂载性能硬盘,超高性能云服务器挂载超高性能硬盘,基础型云服务器挂载基础型硬盘,企业型云服务器和专业增强型云服务器挂载企业型硬盘。容量盘、NeonSAN、NeonSAN 容量盘可以挂载在不同类型云服务器上,容量盘是通过网络协议挂载的,所以性能相对来说比较差,通常来说如果不是提供必须基于容量盘的服务,最好去掉这个选项,大容量存储可以考虑 NeonSAN 对象存储。 |
说明 |
---|
建议值:100, 200。其中 0, 3 这两种云服务器类型,会逐步做下架处理,故不建议使用。 |
replica
此类节点每个节点的副本个数,这是给分片式 (即多主多从,如 redis cluster) 分布式系统使用的功能,定义每个分片的 master 有多少个 replica。 这类应用需要指定 role 名称比如 master,副本节点的 role 系统会自动在 master 添加 -replica 后缀,如 master-replica。 因此开发者在定义节点角色名称时不能定义后缀为 "-replica",这是一个系统保留命名规则。replica 为非必填项。
extra_quota
除了集群内部资源以外,额外需要使用的资源列表。这些独立资源都有自己的配额限制,部署带有 extra_quota 的集群时,会对 extra_quota 中的资源进行额外的配额校验,校验失败会提示用户申请特定资源的配额,防止资源配额不足而导致的部署失败。
参数 | - | 描述 |
---|---|---|
cpu |
- |
需要校验的总 cpu 个数 |
memory |
- |
需要校验的总 memory 大小,单位 MiB |
instance_class |
- |
需要校验节点类型,如果未定义,则以当前节点的 instance_class 进行校验 |
gpu |
- |
需要校验的总 gpu 个数 |
gpu_class |
- |
需要校验的节点 gpu 类型,如果未定义,则以当前节点的 gpu_class 进行校验 |
count |
- |
需要校验的总节点个数 |
volume |
- |
需要校验的 volume 信息 |
- |
size |
需要校验的总数据盘大小,单位 GiB |
- |
count |
需要校验的总数据盘个数 |
- |
class |
需要校验的数据盘类型,如果未定义,则以当前节点的 volume class 进行校验 |
loadbalancer |
- |
需要校验的总负载均衡器个数 |
bucket |
- |
需要校验的总对象存储 bucket 个数 |
security_group |
- |
需要校验的总防火墙个数 |
reserved_ips
表示集群要预留一些 IP 资源给当前角色节点,由应用自己来分配使用,如果无此需求可不定义。
passphraseless
生成密钥信息,即提供此类节点能无密码登录其它节点的可能性,但云平台调度系统只负责把此信息注册到 metadata service 中,开发者自行去获取密钥配置云服务器。目前支持 ssh-dsa, ssh-rsa,非必填项。
vertical_scaling_policy
配置纵向伸缩时的操作策略,目前支持:sequential 和 parallel,默认是 parallel 即并行操作,非必填项。比如 ZooKeeper 在扩容时希望不影响对外服务,可设置该值为 sequential,串行重启。
user_access
是否允许用户访问,true 表示该角色节点允许用户通过 vnc 登录,默认值为 false, 该镜像的初始用户名和密码需要在"`版本描述`"中写清楚以便告知用户。 允许用户登录的节点在集群非活跃状态如关闭时不会销毁云服务器,所以用户可以往这类云服务器写入数据。 而其它云服务器是不会持久化数据,必须在挂盘上持久化数据,
eip_class
是否为节点绑定基础网络ip,只支持值为base
,表示绑定基础网络ip。如果配置此项,则在集群创建时会自动为角色中的每个节点绑定基础网络ip,并给基础绑定上默认的防火墙。如果在集群横向扩容的过程中,配置了此项的角色节点数量为0,则会自动解绑集群防火墙。
server_id_upper_bound
节点的 index 的上限,从1开始记起,有些服务如 ZooKeeper 要求这个 index (myid) 必须控制在某一个范围内。缺省没有上限,非必填项。
services
应用本身服务的初始化、启停等指令,AppCenter 调度系统会发送这些命令到指定节点执行,非必填项。
init
初始化命令,在创建集群或者新加节点时会触发该命令的执行。
参数 | 描述 |
---|---|
nodes_to_execute_on |
控制此命令在此类角色节点上某几个节点上执行,如果需要在所有此类节点上执行该命令可不填此项。 |
post_start_service |
控制初始化命令是在 start 命令执行完毕后执行还是之前执行,如果 post_start_service 为 true 则表示 init 在 start 后执行;默认 (即不加此项) 是之前执行。此项是 init 独有。 |
order |
控制不同角色节点之间执行此命令顺序。比如主从节点,有时候需要主节点先启动服务,从节点后启动服务,非必填项。 |
cmd |
具体需执行的命令,必填项。如果 image 是基于 Windows 操作系统,目前仅支持 bat 脚本,且脚本需通过变量 %ERRORLEVEL% 设定返回值。 |
timeout |
执行该命令 timeout 时间(单位秒),系统默认10分钟,由于某些命令可能需要迁移数据而耗时比较长,这种情况下需要计算出最长可能时间,最大值是86400,非必填项。 |
start
服务启动命令,具体参数参考初始化命令 init。
stop
停止服务命令,具体参数参考初始化命令 init。
scale_out
加节点时在非新加节点上需执行的命令,具体参数参考初始化命令 init。 同时系统会捕获这个命令的非0返回值作为错误码, 参考执行操作失败时如何展示给用户错误提示。
参数 | 描述 |
---|---|
pre_check |
删除节点时在非删除节点上执行的预检查命令,若返回非0值表示不可删除节点。 此项是 scale_in 和 scale_out 独有。 |
scale_in
删除节点时在非删除节点上需执行的命令,具体参数参考初始化命令 init。 同时系统会捕获这个命令的非0返回值作为错误码, 参考执行操作失败时如何展示给用户错误提示。
参数 | 描述 |
---|---|
pre_check |
删除节点时在非删除节点上执行的预检查命令,若返回非0值表示不可删除节点。此项是 scale_in 和 scale_out 独有。 |
restart
服务重启动命令,具体参数参考初始化命令 init。
destroy
销毁命令,在删除集群或者节点时会触发该命令的执行,通常用作删除资源之前检查安全性,具体参数参考初始化命令 init。
参数 | 描述 |
---|---|
allow_force |
是否允许强制删除, 默认值为 true 表示允许强制删除该节点, 强制删除时即使 destroy 的 cmd 返回非 0 值也会继续将节点删除。 |
post_stop_service
控制销毁命令是在 stop 命令执行完毕后执行还是之前执行,如果 post_stop_service 为 true 则表示 destroy 在 stop 后执行;默认 (即不加此项) 是之前执行。此项是 destroy 独有。
upgrade
升级集群后执行的命令,具体参数参考初始化命令 init。
get_nodes_order
在特定生命周期,以 cmd 的返回结果作为执行指令的顺序。具体参数参考初始化命令 init。 参考串行纵向扩容或滚动升级时,如何按照一定顺序进行操作。
参数 | 描述 |
---|---|
event |
可选值:upgrade, rollback, scale_vertical。表示在定义的生命周期到来时,使用 get_nodes_order 中 cmd 的执行结果作为该生命周期节点的操作顺序。 |
rollback
升级失败,集群为活跃状态时进行降级操作,会被调用。具体参数参考初始化命令 init。
backup
定义该角色的备份操作,若不定义表示该角色不支持备份。若 "backup_policy" 定义为 "custom" 则必须定义 cmd;若 "backup_policy" 定义为 "device" 可不定义 cmd,具体参数参考初始化命令 init,除此之外自定义的服务参数还有:
参数 | 描述 |
---|---|
service_params |
service_params 中定义这个 cmd 所需要传的参数,json 格式,非必须项,参数具体定义在 config.json 里,可参考 env 的定义方式。 |
with_replica |
备份操作是否在 replica 节点上执行,默认值为 false。 |
说明 |
---|
提供手动备份的同时也会提供 "定时自动备份" 支持,手动备份时会以 json 形式传入用户填入具体 "service_params" 到 backup 的 cmd,而 "定时自动备份" 操作时不会传入参数。 |
restore
定义该角色的备份恢复操作。若该角色定义该服务,恢复时使用 restore 进行恢复;若该角色未定义该服务,恢复时使用 start 进行恢复。具体参数参考备份命令 backup。
参数 | 描述 |
---|---|
with_replica |
备份恢复操作是否在 replica 节点上执行,默认值为 false。 |