更新时间:2025-08-26 GMT+08:00
使用组件模板创建组件
同一个项目下,ServiceStage可支持最多创建15,000个组件。
ServiceStage提供了通过组件模板自动化创建组件的能力,通过已经创建好的组件模板创建组件的同时可以进行配置、Kubernetes资源创建。
组件模板说明
组件模板仅支持YAML格式,创建好的模板文件需要打包成zip包。包目录总体结构示例如下:
Component/ ├── spec.yaml ├── variables.yaml ├── values.yaml ├── component/ │ ├── demo_component.yaml │ ├── demo_config.yaml │ ├── deployment.yaml │ ├── configmap.yaml │ ├── service.yaml └───└── ...(其他Kubernetes资源文件)
其中,Kubernetes资源文件只在容器部署方式部署的组件中生效。
- spec.yaml,配置信息文件。包含模型版本、Kubernetes资源创建顺序等。文件内容示例如下:
# 模型版本号,当前只有v1.0.0一个版本 model_version: v1.0.0 # 组件列表 component: component_dir: comp_demo/ # Kubernetes资源对象 k8s_resources: # 类型:SYSTEM,系统默认顺序;CUSTOM:自定义顺序 order_type: CUSTOM # CUSTOM类型下指定顺序 custom_orders: - ConfigMap - Deployment - Service
- variables.yaml,支持的变量声明文件,所有变量在该文件中声明,包含变量名、类型、描述和默认值。支持普通类型变量(string、integer、double、bool)、复杂类型变量(list(<T>), map(<T>), object(<T>))、ServiceStage模型类型(config,值为分组名/配置名;runtimestack,值为技术栈ID)、环境资源类型(cce、ecs、customServer、elb、rds、dcs、cse、nacos、gaussdb、dms_rocketmq。可多选,以英文逗号分隔)。文件内容示例如下:
variable: namespace: type: string default: demo description: 命名空间 dep_name: type: string default: demo-dep description: 工作负载的名字 svc_port: type: integer default: 8080 description: 服务的端口号 value: type: string default: World description: Hello接口响应数据 cce_resource: type: cce description: CCE资源 image: type: string description: 工作负载镜像 labels: type: list(object({key = string, value = string})) default: [{"key":"key1", "value":"value1"}] description: 组件标签 resources: type: object({requests = object({cpu = string, memory = string}), limits = object({cpu = string, memory = string})}) default: {"limits": {"cpu":"100m", "memory":"256Mi"}} description: 容器资源申请配置 map_variable: type: map(list(object({name = string, age = integer}))) default: {"persons": [{"name":"tom", "age": 20}], "animals": [{"name": "jack", "age": 18}]} description: map、list、object类型的结合数据
- values.yaml,变量值说明文件。文件内容示例如下:
dep_name: demo-dep svc_port: 8080 comp_cpu_request: 0.5 comp_config: test-group/test.yaml comp_elb: elb-id-xxx comp_namespace: cce-id-xxx/default
- component,组件目录。目录名可以自定义,包含以下文件:
- demo_component.yaml,组件文件,有且只能有一个。详细说明请参考demo_component.yaml。
- demo_config.yaml,配置文件,最多允许包含6个配置文件。详细说明请参考config_demo.yaml。
- cce_xxx.yaml,Kubernetes资源中的工作负载类型限制,最多允许有50个Kubernetes资源。有且仅有一个Deployment、StatefulSet、DaemonSet、Pod、Job、CronJob资源,生成对应的组件。
- demo_component.yaml,组件文件,用于描述组件名称、组件资源等。 文件内容示例如下:
kind: ServiceStageComponent spec: name: ${var.comp_name} description: 描述内容 # 环境ID和环境名必须指定一个,优先根据ID查询。 environment_id: ${var.env_id} environment_name: ${var.env_name} # 应用ID和应用名必须指定一个,优先根据ID查询。 application_id: ${var.app_id} application_name: ${var.app_name} # version可以不指定,没指定时系统自动生成。 version: 2024.0914.14111 # 优先根据runtime_stack_id查询,为空时根据runtime_stack确定。runtime_stack默认值是Docker。 runtime_stack_id: ${var.runtime_id} runtime_stack: name: "OpenJDK8" version: "1.3.8" type: "Java" deploy_mode: "virtualmachine" source: kind: package storage: obs url: "obs://obs-lxz/unit-provider-1.0-SNAPSHOT.jar" http_username: null http_password: null http_command: null http_headers: - key: key value: value jvm_opts: "-Xms256m" # TomcatOptsV3模型 tomcat_opts: server_xml: | <?xml version="1.0" encoding="UTF-8"?> <Server port="-1" shutdown="SHUTDOWN"> </Server> # TongWebOptsV3模型 tongweb_opts: tongweb_xml: | <?xml version="1.0" encoding="UTF-8"?> <Server port="-1" shutdown="SHUTDOWN"> </Server> external_vmoptions: "-Xms256m" # 环境变量 envs: - name: key1 value: value1 - name: key2 value: value2 deploy_strategy: type: RollingRelease rolling_release: fail_strategy: STOP batches: 1 termination_period_seconds: 30 update_strategy: type: RollingUpdate termination_period_seconds: 30 max_unavailable: 2 refer_resources: - type: dcs parameters: password: test-xxx // refer_alias可以为空, 自动设置为:distributed_session,distributed_cache refer_alias: distributed_session,distributed_cache - type: rds parameters: connection_type: JNDI jndi_name: db_name: demo db_user: root password: test-xxx - id: ${env.resources.elb.elb001.id} type: elb parameters: // HTTPS访问方式下需要配置cert。 cert: id: xxxx - type: rds id: ${var.rds_id} - type: cce id: ${var.cce_id} configs: # config_name引用配置,命名规则是:分组名/配置名。只有一个容器时, container_name可以不填, 多容器需要根据name决定配置。 - config_name: group/filename.yaml mount_path: /teast.yaml container_name: default - config_name: ${var.config} mount_path: /teast1.yaml container_name: default external_accesses: - protocol: http forward_port: 8080 address: demo.com enable_sermant_injection: false enable_sermant_spring_register: false enable_sermant_dubbo_register: false enable_sermant_config: false
组件资源引用方式包括以下三种:
- 只指定类型,自动绑定环境中该类型的资源,满足条件资源大于1个时报错。
- 指定资源的逻辑ID,例如:${env.resources.elb.elb001.id},匹配环境elb类型下的逻辑ID为elb001的资源。
- 指定物理资源ID,例如:${var.cce_id},cce_id是cce类型变量,值为CCE集群ID。
- config_demo.yaml,配置文件,描述组件配置。文件内容示例如下:
kind: ServiceStageConfig spec: name: test-group/test.yaml description: desc sensitive: true content: | test: world hello: 12313
前提条件
- 只能在应用下创建组件,需要先创建应用,请参考创建应用。
- 组件需要部署在指定环境下,需要先根据组件部署方式创建环境并纳管资源。
- 已经参考组件模板说明将准备好的组件模板文件打包为zip包并上传到存储库。
- 将模板包上传至SWR软件仓库,请参考上传软件包。
如果禁用了PKIToken,则不支持使用SWR软件仓库。
- 从OBS对象存储选择对应的模板包。需要提前将模板包上传至OBS桶中,相关操作请参考流式上传(PUT上传)。
- 如果需要使用例如JFrog(制品仓库)作为组件模板包存储仓库,支持HTTP/HTTPS协议的自定义文件下载地址作为组件模板包下载地址,您需要提前将组件模板包上传至对应的自定义文件地址下。
如果上传软件包失败,请参考如何解决上传软件包失败的问题?。
- 将模板包上传至SWR软件仓库,请参考上传软件包。
使用组件模板创建组件
- 登录ServiceStage控制台。
- 选择以下任意方式进入“创建组件”页面:
- 选择“组件管理 > 新增组件 > 基于组件模板创建” 。
- 在“应用管理”页面,选择待创建部署组件的应用,在“操作”列选择 。
- 在“应用管理”页面,单击待创建部署组件的应用名称,在“应用概览”页面,选择 。
- 在“基本信息”区域,参考下表设置组件基本信息,其中带“*”标志的参数为必填参数。
参数名称
参数说明
*所属应用
组件所属应用。
*所属环境
组件部署环境。
- 在“模板包配置”区域,根据模板包存储方式选择已经上传的组件模板包。
- CodeArts软件发布库:单击“选择软件包”,从CodeArts软件发布库选择已经上传的模板包,单击“确定”。
- OBS对象存储:单击“选择软件包”,从OBS桶选择已经上传的模板包,单击“确定”。
- SWR软件仓库:单击“选择软件包”,从SWR软件仓库选择已经上传的模板包,单击“确定”。
- 自定义文件地址:如果需要使用例如JFrog(制品仓库)作为组件模板包存储仓库,您可以执行以下操作获取已经上传到自定义文件地址下的组件模板包。
- 单击“下一步”。
- 在“模板预览”区域,您可以查看组件模板文件的详细内容。
- 在“配置参数”区域,您可以查看并修改组件配置参数。
- 单击“创建并部署”。
- 在组件部署过程中,如果发现组件配置错误等原因,您可以单击“中断”终止组件部署。然后单击“升级”,参考使用组件模板升级组件版本配置,重新设置组件配置并完成组件升级部署。
- 在组件“查看历史部署记录”页面,可查看部署日志,等待组件部署完成。
后续操作
- 使用组件模板创建的组件完成部署后,只能通过模板进行升级,请参考使用组件模板升级组件版本配置。
- 使用组件模板创建的组件完成部署后,您可以根据实际业务需要参考组件运维对组件进行维护。
父主题: 创建和部署组件