更新时间: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协议的自定义文件下载地址作为组件模板包下载地址,您需要提前将组件模板包上传至对应的自定义文件地址下。

    如果上传软件包失败,请参考如何解决上传软件包失败的问题?

使用组件模板创建组件

  1. 登录ServiceStage控制台
  2. 选择以下任意方式进入“创建组件”页面:

    • 选择“组件管理 > 新增组件 > 基于组件模板创建” 。
    • “应用管理”页面,选择待创建部署组件的应用,在“操作”列选择更多 > 基于组件模板创建
    • “应用管理”页面,单击待创建部署组件的应用名称,在“应用概览”页面,选择新增组件 > 基于组件模板创建

  3. “基本信息”区域,参考下表设置组件基本信息,其中带“*”标志的参数为必填参数。

    参数名称

    参数说明

    *所属应用

    组件所属应用。

    *所属环境

    组件部署环境。

  4. “模板包配置”区域,根据模板包存储方式选择已经上传的组件模板包。

    • CodeArts软件发布库:单击“选择软件包”,从CodeArts软件发布库选择已经上传的模板包,单击“确定”
    • OBS对象存储:单击“选择软件包”,从OBS桶选择已经上传的模板包,单击“确定”
    • SWR软件仓库:单击“选择软件包”,从SWR软件仓库选择已经上传的模板包,单击“确定”
    • 自定义文件地址:如果需要使用例如JFrog(制品仓库)作为组件模板包存储仓库,您可以执行以下操作获取已经上传到自定义文件地址下的组件模板包。
      1. 输入软件包所在的HTTP/HTTPS协议的自定义文件下载地址。自定义文件地址必须是组件模板包文件的完整路径,例如:https://172.16.0.1:8082/artifactory/template-component.zip。
      2. 选择是否开启认证。

        不开启认证,则默认任何用户都可以下载上传到自定义文件地址的软件包。

        单击开启认证,则只有通过认证的用户才能下载上传到自定义文件地址的软件包。“认证方式”支持“用户密码认证”“自定义Header认证”,认证方式及对应的认证参数由您自定义的文件地址所在服务器支持的认证方式决定。

  5. 单击“下一步”

    • “模板预览”区域,您可以查看组件模板文件的详细内容。
    • “配置参数”区域,您可以查看并修改组件配置参数。

  6. 单击“创建并部署”

    • 在组件部署过程中,如果发现组件配置错误等原因,您可以单击“中断”终止组件部署。然后单击“升级”,参考使用组件模板升级组件版本配置,重新设置组件配置并完成组件升级部署。
    • 在组件“查看历史部署记录”页面,可查看部署日志,等待组件部署完成。

后续操作