所选语种没有对应资源,请选择:

本站点使用Cookies,继续浏览表示您同意我们使用Cookies。Cookies和隐私政策>

提示

尊敬的用户,您的IE浏览器版本过低,为获取更好的浏览体验,请升级您的IE浏览器。

升级

FusionCloud 6.3.1 用户指南 (Region Type II) 10

评分并提供意见反馈 :
华为采用机器翻译与人工审校相结合的方式将此文档翻译成不同语言,希望能帮助您更容易理解此文档的内容。 请注意:即使是最好的机器翻译,其准确度也不及专业翻译人员的水平。 华为对于翻译的准确性不承担任何责任,并建议您参考英文文档(已提供链接)。
设计包开发规范

设计包开发规范

简介

背景

设计包用于描述托管于本产品上的应用或服务的拓扑结构及其生命周期管理流程。

  • 拓扑结构:包括构成应用的组件,以及这些组件之间的关联关系。
  • 生命周期管理流程:描述如何管理这些应用和服务。例如,为了完成应用的部署、卸载、启动、停止、伸缩、升级等管理行为需要执行哪些动作。

本产品通过解析设计包,来驱动应用的生命周期管理,因此,提供应用设计包是将应用托管于本产品上的前提条件。

目标

用户通过对本章内容的学习,能够独立制作本产品设计包。

关键概念

设计包使用TOSCA模型来描述应用的拓扑结构及其生命周期管理流程。制作设计包之前,建议先了解TOSCA的关键概念,如图38-32

图38-32 TOSCA关键概念

设计包中定义的拓扑模板由一系列的节点模板(Node Template)和关系模板(Relationship Template)构成。这些元素共同构成了一个有向图。拓扑模板实例化后,生成Stack模型。

  • 节点类型(Node Type):定义了节点模板的原型,包括节点模板的属性,行为(通过Interface定义),能力(Capability),以及依赖(Requirement)等。
  • 关系类型(Relationship Type):定义了关系模板的原型,在FustionStage中,不支持在关系类型上定义属性和行为。
  • 管理流程(Plan):应用的生命周期管理包括应用的部署、起停、升级、伸缩、删除等,这些管理流程通过不同的Plan来定义。Plan定义了一个工作流,即在生命周期管理流程中需要执行的一系列步骤,这些步骤通过调用节点类型上定义的行为,完成对节点的操作。

在本产品中,不支持为整个拓扑模板定义Plan,Plan是定义在节点类型上的。在Stack的生命周期管理过程中,本产品会分别执行节点模板所属的节点类型上定义的Plan流程,不同节点模板关联的Plan流程的执行先后次序根据节点模板间的依赖关系来决定。

节点类型上定义的能力(Capability)和依赖(Requirement)分别用于描述节点可以给其它节点提供的特性,以及节点对外部节点的要求。能力(Capability)和依赖(Requirement)模型可参考下图:

Requirement Type和Capability Type的定义可以在Node Type的Requirement Definition和Capability Definition中引用,达到复用的效果。

Requirement Type、Capability Type中仅定义类型的元数据信息,在Requirement Definition和Capability Definition中通过元数据对依赖和能力进行具体化的描述。拓扑模板中两个Node Template的之间连线表明一个Node Template的capability满足另一个Node Template的requirement。

本产品没有定义具体的Requirement Type,因为Requirement和Capabiity是相对的,所以在Requirement Definition中定义节点依赖的Capability Type即可。

举例来说,一个典型的三层架构的应用包含一个前端web子系统frontend,一个后端业务处理子系统backend,以及一个数据库DB。在拓扑模板中,您需要定义三个节点模板:

  • 第一个节点模板代表frontend子系统,节点类型为“WebFrontend”, 在“WebFrontend”节点类型上定义Web服务器的监听端口号等属性,在实例化时,用户可以设置该端口号。
  • 第二个节点模板代表backend子系统,节点类型为“WebBackend”, “WebBackend”节点类型上定义Requirement依赖于DB能力。
  • 第三个节点模板代表数据库,节点类型为“DBMS”,在“DBMS”节点类型上定义Capability提供DB能力。

节点定义后,您还需要设置backend节点模板到DB节点模板的依赖关系。在实例化该拓扑模板时,本产品先创建DB节点和frontend节点,由于backend节点依赖DB节点,所以只有创建完DB节点之后,才会创建backend节点。当然,在实际的设计过程中,拓扑模板会比上述的描述复杂很多,例如,有一些sql脚本需要在安装过程中在DB上进行初始化,则还需要再定义一个节点模板代表这些sql脚本,并定义该节点模板到DB节点模板的“HostedOn”关系,表明这些sql脚本需要在DB节点上进行执行。

本产品内置了一系列的节点类型和关系类型,一般情况下,用户直接使用这些内置的类型即可。特定情况下,用户也可以自行扩展新的类型。

设计包格式

命名

设计包的命名格式如下:

  • {模板包名称}-{版本号}.{后缀}
  • {模板包名称}.{后缀}

其中,后缀必须为tar.gz、tgz或zip,例如AOS.tgz、AOS-V1.zip等。

目录结构

设计包的目录结构如下:

{模板名}.{后缀}
|-  blueprint.yaml(TOSCA描述文件,只在包结构的顶层存在,必选)
|-  extend(TOSCA)
|-  app_name.yaml(单个app的TOSCA描述文件,可合并到blueprint.yaml中,可选)
...

目录结构说明如下:

  • blueprint.yaml:应用的TOSCA默认描述入口文件。
  • extend:存放应用的TOSCA描述的补充信息,包括子应用的描述、节点类型定义、策略定义、生命周期等,都可以定义在该目录下,也可以直接定义在应用的整体TOSCA描述中。
TOSCA描述文件字段说明
表38-151 TOSCA描述文件字段说明

字段

说明

tosca_definitions_version

TOSCA模板所基于的类型定义版本,当前平台使用的版本为fusionstage_tosca_version_2_1。

必选项。

description

TOSCA模板的描述信息。

可选项。

imports

引用的类型定义与模板文件。若全部使用本产品的内置类型时并且没有其他模板文件,将不需要引用额外的imports文件。

可选项。

node_types

用户自定义类型,即基于本产品内置的TOSCA节点类型,定义新的子类型,包括新类型的属性、生命周期管理流程等。

inputs

定义输入参数,在inputs中定义参数的类型、描述信息、默认值、所属组等。

默认值信息可以在创建堆栈时由外部输入替换。若未填写默认值,外部输入将必须填写这个参数的值。注意:

1. 如果默认值的类型和定义的参数类型不一致,解析器将会做自动转换,如 bool类型的默认值,但是参数类型为string,会对bool类型默认值转换为string类型并取小写。

2. 针对需要进行伸缩的节点,其实例数必须通过输入参数获取,同时建议不要共用输入参数。对应约束如下:

  • 模板定义的应用/资源节点实例数使用输入参数定义,没有使用输入参数定义的在拓扑更新升级等场景下会导致伸缩记录丢失。
  • 模板中多个应用/资源节点的实例数使用了同一个输入参数的情况,如果进行伸缩操作,那需要指定该输入参数关联的所有应用/资源都伸缩至同一数值,否则伸缩请求会被拒绝。
  • 模板中多个应用/资源实例数使用了同一个输入参数的情况,如果其中有应用/资源不支持伸缩,则这个输入参数关联的其他应用/资源都不允许伸缩。

node_templates

定义拓扑模板,所有的TOSCA拓扑节点模板,都需在node_templates中定义。

节点模板是基于某个节点类型(Node Type)的实例化,类型中定义的属性、关联关系、生命周期等,需要在节点模板中赋予具体的值。

outputs

定义拓扑的输出,通过一定的组织形式得到输出信息,如应用的IP运行环境地址等。

blueprint.yaml样例
# 应用模板所基于的类型定义版本
tosca_definitions_version: fusionstage_tosca_version_2_1
# 应用模板的描述信息
description: Template for deploying a specific application.
 
# 引用的类型定义/模板(可选)
imports:
  - extend/node_types.yaml   #包含自定义的节点类型
 
# 输入参数定义
inputs:
  mysql_instance_name:
    type: string
    default: 'mysql'
  mysql_bind_path:
    type: string
    default: "/opt/bind_services/mysql"
  image_id:
    type: string
    default: "demo-frontend:v2"
  user_name:
    type: string
    default: ''
  frontend_instancs:
    type: integer
    default:1
 
# 应用拓扑定义
node_templates:
  mysql-service:
    type: fusionstage.nodes.Service
    properties:
      type: mysql
      # get_input 为内嵌函数,表示该值等同于inputs中对应的mysql_instance_name的值
      instanceName: {get_input: mysql_instance_name}
      parameters: 
        - key: UserName
          value: {get_input: user_name}
          
  frontend-app:
    type: fusionstage.nodes.StatelessApplication
    properties:
      type: container
      instances:{get_input: frontend_instancs}
      bindServices: 
        - serviceInstanceName: {get_input: mysql_instance_name}
          bindPath: {get_input: mysql_bind_path}
    requirements:
      - package:
          node: frontend-soft
          relationship: fusionstage.relationships.PackageConsistsOf
      - host:
          node: my-server
          relationship: fusionstage.relationships.HostedOn
      - service:
          node: mysql-service
          relationship: fusionstage.relationships.BindsTo
 
  frontend-soft:
    type: fusionstage.nodes.ContainerComponent
    properties:
      package:
        image: {get_input: image_id}
        ports:
          - port: 8005
            containerPort: 36024
            hostPort: 56206
            protocol: TCP
              
  my-server:
    type: MyComputer
    capabilities:
      # Host container properties
      host:
        properties:
          # Compute properties
          num_cpus: 4
          mem_size: 2048 MB
          disk_size: 10 GB
 
# 输出参数定义
outputs:
  server_ip:
    description: The private IP address of the provisioned server.
    value: { get_attribute: [ my_server, private_address ] }
Yaml格式编写规范
编写规范

设计包中模板文件的编写需要遵循Yaml格式规范。Yaml是一种简洁强大的语言,它的设计目标是便于设计和使用人员阅读。其基本语法规则如下:

  • 大小写敏感。

  • 使用缩进表示层级关系。

  • 缩进时不允许使用Tab键,只允许使用空格。

  • 缩进的空格数目不重要,要求相同层级的元素左侧对齐。

Yaml支持三种数据结构:

  • 对象:键值对的集合,又称为映射(mapping) / 字典(dictionary)。

  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)。

  • 纯量(scalars):单个的、不可再分的值。

对象

对象是一组键值对,合法的表示方法如下:

animal: pets
hash: { name: Steve, foo: bar } 
数组

一组连词线开头的行,构成一个数组:

- Cat 
- Dog 
- Goldfish

也可使用行内表示法:

animal: [Cat, Dog]

对象和数组可以结合使用,形成复合结构:

languages:
 - Ruby
 - Perl
 - Python  
websites: 
 YAML: yaml.org   
 Ruby: ruby-lang.org   
 Python: python.org   
 Perl: use.perl.org 
纯量

纯量的数据类型有字符串、布尔值、整数、浮点数、Null

  • 字符串表示:

    字符串默认不使用引号表示:

    str: This_is_a_line

    如果字符串之中包含空格或特殊字符,需要放在引号之中:

    str: 'content: a string’

    单引号和双引号都可以使用,双引号不会对特殊字符转义:

    s1: 'content:\n a string'
    s2: "content:\n a string"

    单引号之中如果还有单引号,必须连续使用两个单引号转义。

    str: 'labor''s day' 

    字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格。

    str: This_is
     a_multi_line

    多行字符串可以使用|保留换行符,也可以使用>折叠换行。

    this:
     Foo
     Bar
    that: >
     Foo
     Bar

    对于整数型、浮点型、布尔型数据用两个感叹号进行强制转换:

    strbool: !!str true
    strint: !!str 10
  • 布尔型表示:
    bool2: yes
    bool3: no
    bool4: Yes
    bool5: No
    bool6: true
    bool7: false
    bool8: True
    bool9: False
  • 整数表示
    int_value: 314
  • 浮点型表示:
    float_value: 3.14

FusionStage支持的节点类型与配置模式

应用组
类型定义

应用组是一个逻辑节点,用于体现多个应用之间的组织关系,其类型定义如下:

fusionstage.nodes.AppGroup:
    description: Basic node type definition for application group
    derived_from: fusionstage.nodes.Root
    properties:
      deploy:
        description: Allow the app group to be deployed or not
        type: boolean
        default: true
        immutable: true
      customSpec:
        type: dict
        default: {}
    requirements:
      - member:
          relationship: fusionstage.relationships.ConsistsOf
          node: fusionstage.nodes.Application
      - member:
          relationship: fusionstage.relationships.ConsistsOf
          node: fusionstage.nodes.HelmApplication
      - dependency:
          relationship: fusionstage.relationships.ConnectsTo
          node: fusionstage.nodes.AppGroup
节点是否可升级

属性配置
表38-152 属性配置

属性

属性说明

是否可变更

deploy

应用组是否部署。

应用组是逻辑节点,是否配置该属性并不会影响应用组所包含的应用是否部署,但会能够影响到包含的应用是否带上这个应用组的标签。

customSpec

应用组的用户自定义配置信息。允许用户配置任意自定义属性,属性结构体也由用户自行定义,在创建应用时会将自定义的属性传递到应用的配置信息中。

关系配置
表38-153 关系配置

关系

配置说明

member

应用组的关联关系中,需要通过member关系定义应用组所包含的应用。

其中,relationship固定为fusionstage.relationships.ConsistsOf(组成关系),对应的node必须是应用类型。应用的数量目前没有限制,建议不超过5个。若不定义member,应用组没有实际意义。

dependency

dependency表示应用组之间的部署依赖关系,被依赖的应用组所包含的应用都在该应用组所包含应用之前创建。

样例
my-group:
  type: fusionstage.nodes.AppGroup
  properties:
    customSpec:     # 应用组自定义属性,配置了tag的数组
      tags:
        - key: netype
          value: "com.huawei.universe.Application" 
    requirements:
      - member:
          node: frontend-app
      - member:
          node: backend-app
无状态应用
类型定义

对于无状态应用,在应用实例化之后,所有Pod都是无差异的,一个Pod失效,可以在任意其它节点上创建新的Pod代替失效的Pod。本产品会维持无状态应用的Pod数量在一个固定的数值,当Pod数量大于该值时,本产品会自动卸载多余的Pod;当Pod数量小于该值时,本产品会自动创建新的Pod。

其类型定义如下:

 fusionstage.nodes.Application:
    derived_from: fusionstage.nodes.Root
    abstract: true
    properties:
      type:
        type: string
        description: Type of the application
        default: "process"
        immutable: true
        constrains:
          valid_values: ["process", "container"]
      deploy:
        type: boolean
        description: Allow the application to be deployed or not
        default: true
      customSpec:
        description: User defined configmap
        default: {}
      certification:
        description: Specify a certification the application needs, and it s storage path
        type: fusionstage.datatypes.Certification
        default: {}
      resourceSelector:
        description: Resource selector to specify which node the application can be deployed on
        type: fusionstage.datatypes.ResourceSelector
        default: {}
      annotations:
        description: Annotations that are injected into the application
        type: fusionstage.datatypes.NameValuePair
        islist: true
        default: []
      securityContext:
        description: SecurityContext holds application-level security attributes and common container settings.
        type: fusionstage.datatypes.ApplicationSecurityContext
        default: {}
      labels:
        type: fusionstage.datatypes.AppLabel
        islist: true
        required: false
      osType:
        type: string
        description: Type of the os
        immutable: true
        required: false
        constrains:
          valid_values: ["linux","windows"]
      automountServiceAccountToken:
        type: boolean
        required: false
    capabilities:
      endpoint:
        type: fusionstage.capabilities.Endpoint
    requirements:
      - dependency:
          relationship: fusionstage.relationships.ConnectsTo
          node: fusionstage.nodes.Application
      - dependency:
          relationship: fusionstage.relationships.ConnectsTo
          node: fusionstage.nodes.ExternalNode
      - dependency:
          relationship: fusionstage.relationships.ConnectsTo
          node: fusionstage.nodes.HelmApplication
      - volume:
          capability: fusionstage.capabilities.Attachment
          relationship: fusionstage.relationships.AttachesTo
          node: fusionstage.nodes.Volume
      - host:
          capability: fusionstage.capabilities.Container
          relationship: fusionstage.relationships.HostedOn
          node: fusionstage.nodes.Resource
      - package:
          capability: fusionstage.capabilities.SoftwarePackage
          relationship: fusionstage.relationships.PackageConsistsOf
          node: fusionstage.nodes.SoftwareComponent
      - heterogeneousResources:
          capability: fusionstage.capabilities.Attachment
          relationship: fusionstage.relationships.AttachesTo
          node: fusionstage.nodes.HeterogeneousResource

  fusionstage.nodes.StatelessApplication:
    derived_from: fusionstage.nodes.Application
    properties:
      name:
        description: Name of the stateless application
        type: string
        default: ""
        constrains:
          max_length: 63
          regex: (^$)|(^[a-z]([-a-z0-9]*[a-z0-9])?$)
        immutable: true
        required: false
      instances:
        description: The number of the stateless application to deploy
        type: integer
        default: 1
        constrains:
          in_range: [0, 1000]
      exclusive:
        description: Allow the stateful application to have its exclusive resources or not, default:(container-->false, process-->true)
        type: string
        default: "default"
        constrains:
          valid_values: ["default", "true", "false"]
      bindServices:
        description: Services that the stateless application binds to
        default: []
        type: fusionstage.datatypes.ServiceBind
        islist: true
      upgradeStrategy:
        description: Specify the upgrade strategy for the stateless application
        type: fusionstage.datatypes.UpgradeStrategy
        default: {}
      restartPolicy:
        description: The way to restart the stateless application instance when it is failed
        type: string
        default: "Always"
        constrains:
          valid_values: ["Always"]
    requirements:
      - service:
          capability: fusionstage.capabilities.Endpoint.Service
          relationship: fusionstage.relationships.BindsTo
          node: fusionstage.nodes.Service
节点是否可升级

属性定义
表38-154 属性配置

属性

属性说明

deploy

应用是否部署,默认为true。

如果deploy设置为false,则应用将不部署(包括应用所包含的软件组件,如果所依赖的主机资源不被其他应用依赖,主机资源也不部署)。

type

应用类型。

  • process:进程类应用。
  • container:容器应用。

默认为process。应用所包含的软件组件必须与应用的类型一致。

customSpec

应用组的用户自定义配置信息。允许用户配置任意自定义属性,属性结构体也由用户自行定义。在创建应用时,会将自定义属性传递到应用的配置信息中。

certification

应用需要的凭证信息,详情请参照fusionstage.datatypes.Certification类型定义。

resourceSelector

用于设置部署应用的资源的选择条件,支持按照资源的标签过滤资源等,详情请参照fusionstage.datatypes.ResourceSelector类型定义。

annotations

在实例化后的应用上打注解,注解为key-value类型的键值对,详情请参照fusionstage.datatypes.NameValuePair类型定义。

securityContext

应用安全配置,详情请参照fusionstage.datatypes.ApplicationSecurityContext类型定义。

labels

在实例化后的应用上打标签,标签为key-value类型的键值对,标签名称不能为“stack-name”、“appgroup”、“app”,这几个名称已被系统内部使用。详情请参照fusionstage.datatypes.AppLabel类型定义。

osType

操作系统的类型,缺省值为“linux”。

  • linux:Linux操作系统。
  • windows:Windows操作系统。

automountServiceAccountToken

是否自动挂载API凭证,默认值为true。

name

应用的名称,默认为空。

  • 定义应用的名称时,应用相关资源的名称都将使用这个名称。
  • 采用默认值时,应用相关资源的名称将采用节点名称+随机后缀。

instances

应用的实例数,如果需要对实例数进行伸缩或变更,需要将实例数通过输入参数定义

取值范围:[0, 1000],其中,0表示没有实例。

exclusive

应用的独占资源标记,默认值为"default"。

  • "True":资源独占,配置需要加引号(""),作为字符串处理。
  • "False":资源不独占,配置需要加引号(""),作为字符串处理。
  • "default":在进程类应用场景下为独占,在容器场景下为共享。

bindServices

应用绑定的服务列表,详情请参照fusionstage.datatypes.ServiceBind类型定义。

upgradeStrategy

设置应用升级策略,详情请参照fusionstage.datatypes.UpgradeStrategy类型定义。

restartPolicy

应用实例失效时的处理策略。

Always:不管容器是何种原因退出,总是重启容器,保证容器一直处于运行状态。

默认值为Always。

关系配置
表38-155 关系配置

关系

配置说明

dependency

定义应用的基本依赖关系,对象可以是任意类型的节点,主要用于指定先后顺序。关联关系为fusionstage.relationships.ConnectsTo

volume

应用挂载的卷资源,目前支持挂载本地卷、secret卷、configmap卷。

host

定义应用的运行主机,通过fusionstage.relationships.HostedOn的关系关联到主机上。

service

定义应用使用的服务(实例),通过fusionstage.relationships.BindsTo的关系绑定服务,对象类型是fusionstage.nodes.Service。

package

定义应用的软件组件,通过fusionstage.relationships.PackageConsistsOf关系指定软件组件fusionstage.nodes.SoftwareComponent。

样例
  • 应用绑定服务
    node_templates:
      demo-app:
        type: fusionstage.nodes.StatelessApplication
        properties:
          type: container          # 容器类应用
          instances: 3
          customSpec:
            tags:
              - key: aaa
                value: bbb
            configurations:
              testa: ok
          resourceSelector:
            labels:
              - key: zone
                Value: DMZ
            Affinities:
              antiself: true
          bindServices:                # 绑定的服务列表
            - serviceInstanceName: {get_input: mysql_instance_name}
              bindPath: {get_input: mysql_bind_path}
          upgradeStrategy:
            strategyType: InPlaceRollingUpdate
        requirements:
          - package:
              node: demo-soft
          - service:                # 配置依赖的服务实例列表
              node: mysql-service
     
      demo-soft:
        type: fusionstage.nodes.ContainerComponent
        properties:
          package:
            image: {get_input: image_id}
  • 容器应用独占资源
    node_templates:
      demo-app:
        type: fusionstage.nodes.StatelessApplication
        properties:
          type: container
          instances: 3
          exclusive: "true"      #  应用独占计算资源
          customSpec:             # 配置自定义属性
            tags:
              - key: application
                value: demo
            configurations:
              testa: ok
          resourceSelector:
            labels:
              - key: zone
                Value: DMZ
        requirements:
          - package:
              node: demo-soft
     
      demo-soft:
        type: fusionstage.nodes.ContainerComponent
        properties:
          package:
            image: {get_input: image_id}
  • 多个应用合设部署
    node_templates:
      demo-app:
        type: fusionstage.nodes.StatelessApplication
        properties:
          type: process
          instances: 3
          exclusive: "false"      #  允许进程类应用合设部署
          customSpec:              # 配置自定义属性
            tags:
              - key: application
                value: demo
            configurations:
              testa: ok
          resourceSelector:
            labels:
              - key: application
                Value: demo
            Affinities:
              antiself: true
        requirements:
          - package:
              node: demo-soft
          - host:
              node: demo-cluster       # 指定部署的计算资源集群
     
      demo-cluster:
        type: fusionstage.nodes.DynamicNodePool
        properties:
          instances: 3
          hostType: vm
          image: {get_input: imageId}
          cpu: 4U
          memory: 4096M
          disk: 10G
          authInfo:    # 虚机的访问信息
            user: {get_input login_user}
            password: {get_input login_password}
          labels:      # 创建资源的标签
            - key: application
              value: "demo"
     
      demo-soft:
        type: fusionstage.nodes.ProcessComponent
        properties:
          package:
            name: apache
            version: 7.5.2
有状态应用
类型定义

对于有状态应用,应用的每个Pod所承担的角色是不一样的。在应用的生命周期管理过程中,本产品会给每个Pod分配唯一的标识,且按特定的顺序进行创建和删除。

说明:
  • 有状态应用不支持原地滚动升级。
  • 有状态应用升级过程中,emptyDir卷会丢失数据。如果需要数据不丢失,推荐使用网络存储(如块存储)。

有状态应用的类型定义如下:

fusionstage.nodes.Application:
    derived_from: fusionstage.nodes.Root
    abstract: true
    properties:
      type:
        type: string
        description: Type of the application
        default: "process"
        immutable: true
        constrains:
          valid_values: ["process", "container"]
      deploy:
        type: boolean
        description: Allow the application to be deployed or not
        default: true
      customSpec:
        description: User defined configmap
        default: {}
      certification:
        description: Specify a certification the application needs, and it s storage path
        type: fusionstage.datatypes.Certification
        default: {}
      resourceSelector:
        description: Resource selector to specify which node the application can be deployed on
        type: fusionstage.datatypes.ResourceSelector
        default: {}
      annotations:
        description: Annotations that are injected into the application
        type: fusionstage.datatypes.NameValuePair
        islist: true
        default: []
      securityContext:
        description: SecurityContext holds application-level security attributes and common container settings.
        type: fusionstage.datatypes.ApplicationSecurityContext
        default: {}
      labels:
        type: fusionstage.datatypes.AppLabel
        islist: true
        required: false
      osType:
        type: string
        description: Type of the os
        immutable: true
        required: false
        constrains:
          valid_values: ["linux","windows"]
      automountServiceAccountToken:
        type: boolean
        required: false
    capabilities:
      endpoint:
        type: fusionstage.capabilities.Endpoint
    requirements:
      - dependency:
          relationship: fusionstage.relationships.ConnectsTo
          node: fusionstage.nodes.Application
      - dependency:
          relationship: fusionstage.relationships.ConnectsTo
          node: fusionstage.nodes.ExternalNode
      - dependency:
          relationship: fusionstage.relationships.ConnectsTo
          node: fusionstage.nodes.HelmApplication
      - volume:
          capability: fusionstage.capabilities.Attachment
          relationship: fusionstage.relationships.AttachesTo
          node: fusionstage.nodes.Volume
      - host:
          capability: fusionstage.capabilities.Container
          relationship: fusionstage.relat  fusionstage.nodes.StatelessApplicationionships.HostedOn
          node: fusionstage.nodes.Resource
      - package:
          capability: fusionstage.capabilities.SoftwarePackage
          relationship: fusionstage.relationships.PackageConsistsOf
          node: fusionstage.nodes.SoftwareComponent
      - heterogeneousResources:
          capability: fusionstage.capabilities.Attachment
          relationship: fusionstage.relationships.AttachesTo
          node: fusionstage.nodes.HeterogeneousResource

fusionstage.nodes.StatefulApplication:
    derived_from: fusionstage.nodes.Application
    properties:
      name:
        description: Name of the stateful application
        type: string
        default: ""
        constrains:
          max_length: 63
          regex: (^$)|(^[a-z]([-a-z0-9]*[a-z0-9])?$)
        immutable: true
        required: false
      instances:
        description: The number of the stateful application to deploy
        type: integer
        default: 1
        constrains:
          in_range: [0, 1000]
      exclusive:
        type: string
        description: Allow the stateful application to have its exclusive resources or not, default:(container-->false, process-->true)
        default: "default"
        constrains:
          valid_values: ["default", "true", "false"]
      bindServices:
        description: Services that the stateful application binds to
        default: []
        type: fusionstage.datatypes.ServiceBind
        islist: true
      upgradeStrategy:
        description: Specify the upgrade strategy for the stateful application
        type: fusionstage.datatypes.UpgradeStrategy
        default: {}
      restartPolicy:
        description: The way to restart the stateful application instance when it is failed
        type: string
        default: "Always"
        constrains:
          valid_values: ["Always"]
    requirements:
      - service:
          capability: fusionstage.capabilities.Endpoint.Service
          relationship: fusionstage.relationships.BindsTo
          node: fusionstage.nodes.Se
节点是否可升级

属性配置
表38-156 属性配置

属性

属性说明

deploy

应用是否部署,默认为true。

若deploy设置为false,则应用将不部署(包括应用所包含的软件组件、依赖的主机资源等)。

type

应用类型。

  • process:进程类应用。
  • container:容器应用。

默认为process。应用所包含的软件组件需要与应用的类型一致。

customSpec

应用组的用户自定义配置信息。允许用户配置任意自定义属性,属性结构体也由用户自定义。在创建应用时,会将自定义属性传递到应用的配置信息中。

certification

应用需要的凭证信息,详情请参照fusionstage.datatypes.Certification类型定义。

resourceSelector

用于设置部署应用的资源的选择条件,支持按照资源的标签过滤资源等,详情请参照fusionstage.datatypes.ResourceSelector类型定义。

annotations

在实例化后的应用上打注解,注解为key-value类型的键值对,详情请参照fusionstage.datatypes.NameValuePair类型定义。

securityContext

应用安全配置,详情请参照fusionstage.datatypes.ApplicationSecurityContext类型定义。

labels

在实例化后的应用上打标签,标签为key-value类型的键值对,标签名称不能为“stack-name”、“appgroup”、“app”,这几个名称已被系统内部使用。详情请参照fusionstage.datatypes.AppLabel类型定义。

osType

操作系统的类型,缺省值为“linux”。

  • linux:Linux操作系统。
  • windows:Windows操作系统。

automountServiceAccountToken

是否自动挂载API凭证,默认值为true。

name

应用的名称,默认为空。

  • 定义应用的名称时,应用相关资源的名称都将使用这个名称。
  • 采用默认值时,应用相关资源的名称将采用节点名称+随机后缀。

instances

应用的实例数。

取值范围:[0, 1000],其中,0表示没有实例。

exclusive

应用的独占资源标记,默认值为"default"。

  • "True":资源独占,配置需要加引号(""),作为字符串处理。
  • "False":资源不独占,配置需要加引号(""),作为字符串处理。
  • "default":在进程类应用场景下为独占,在容器场景下为共享。

bindServices

应用绑定的服务列表,详情请参照fusionstage.datatypes.ServiceBind类型定义。

upgradeStrategy

设置应用升级策略,详情请参照fusionstage.datatypes.UpgradeStrategy类型定义。

restartPolicy

应用实例失效时的处理策略。

Always:不管容器是何种原因退出,总是重启容器,保证容器一直处于运行状态。

默认值为Always。

关系配置
表38-157 关系配置

关系

配置说明

dependency

定义应用的基本依赖关系,对象可以是任意类型的节点,主要用于指定先后顺序。关联关系为fusionstage.relationships.ConnectsTo

volume

应用挂载的卷资源,目前支持挂载本地卷、secret卷、configmap卷。

host

定义应用的运行主机,通过fusionstage.relationships.HostedOn的关系关联到主机上。

service

定义应用使用的服务(实例),通过fusionstage.relationships.BindsTo的关系绑定服务,对象类型是fusionstage.nodes.Service。

package

定义应用的软件组件,通过fusionstage.relationships.PackageConsistsOf关系指定软件组件(fusionstage.nodes.SoftwareComponent)。

样例
  • 容器类应用
    node_templates:
      frontend-app:
        type: fusionstage.nodes.StatefulApplication
        properties:
          type: container
          instances: 3
          customSpec:
            tags:
              - key: aaa
                value: bbb
            configurations:
              testa: ok
          resourceSelector:
            labels:
              - key: zone
                Value: DMZ
            Affinities:
              antiself: true
          bindServices: 
            - serviceInstanceName: {get_input: mysql_instance_name}
              bindPath: {get_input: mysql_bind_path}
          upgradeStrategy:
            strategyType: InPlaceRollingUpdate
        requirements:
          - package:
              node: frontend-soft
          - service:
              node: mysql-service
          - volume:
              node: etcd-datadir  # 挂载本地卷
      etcd-datadir:              # 本地卷的定义
        type: fusionstage.nodes.LocalVolume  # 本地卷类型
        properties:
          # omitted here
  • 进程类应用
    node_templates:
      backend-app:
        type: fusionstage.nodes.StatefulApplication
        properties:
          type: process           # 默认即为进程类应用,因此此处可省略
          instances: 3
          customSpec:
            tags:
              - key: aaa
                value: bbb
            configurations:
              testa: ok
          resourceSelector:
            labels:
              - key: zone
                Value: Intranet
            Affinities:
              antiself: true
          bindServices: 
            - serviceInstanceName: {get_input: mysql_instance_name}
              bindPath: {get_input: mysql_bind_path}
          upgradeStrategy:
            strategyType: InPlaceRollingUpdate
        requirements:
          - package:
              node: backend-soft
          - service:
              node: mysql-service
          - volume:
              node: etcd-datadir  # 挂载本地卷
      etcd-datadir:              # 本地卷的定义
        type: fusionstage.nodes.LocalVolume  # 本地卷类型
        properties:
          # omitted here
任务
类型定义

任务是一种特殊的应用,用于在一个到多个节点上分别创建一个Pod来完成一项任务,当正常结束的Pod的数量达到指定数目后,则认为整个任务执行成功。

任务的类型定义如下:

fusionstage.nodes.Application:
    derived_from: fusionstage.nodes.Root
    abstract: true
    properties:
      type:
        type: string
        description: Type of the application
        default: "process"
        immutable: true
        constrains:
          valid_values: ["process", "container"]
      deploy:
        type: boolean
        description: Allow the application to be deployed or not
        default: true
      customSpec:
        description: User defined configmap
        default: {}
      certification:
        description: Specify a certification the application needs, and it s storage path
        type: fusionstage.datatypes.Certification
        default: {}
      resourceSelector:
        description: Resource selector to specify which node the application can be deployed on
        type: fusionstage.datatypes.ResourceSelector
        default: {}
      annotations:
        description: Annotations that are injected into the application
        type: fusionstage.datatypes.NameValuePair
        islist: true
        default: []
      securityContext:
        description: SecurityContext holds application-level security attributes and common container settings.
        type: fusionstage.datatypes.ApplicationSecurityContext
        default: {}
      labels:
        type: fusionstage.datatypes.AppLabel
        islist: true
        required: false
      osType:
        type: string
        description: Type of the os
        immutable: true
        required: false
        constrains:
          valid_values: ["linux","windows"]
      automountServiceAccountToken:
        type: boolean
        required: false
    capabilities:
      endpoint:
        type: fusionstage.capabilities.Endpoint
    requirements:
      - dependency:
          relationship: fusionstage.relationships.ConnectsTo
          node: fusionstage.nodes.Application
      - dependency:
          relationship: fusionstage.relationships.ConnectsTo
          node: fusionstage.nodes.ExternalNode
      - dependency:
          relationship: fusionstage.relationships.ConnectsTo
          node: fusionstage.nodes.HelmApplication
      - volume:
          capability: fusionstage.capabilities.Attachment
          relationship: fusionstage.relationships.AttachesTo
          node: fusionstage.nodes.Volume
      - host:
          capability: fusionstage.capabilities.Container
          relationship: fusionstage.relat  fusionstage.nodes.StatelessApplicationionships.HostedOn
          node: fusionstage.nodes.Resource
      - package:
          capability: fusionstage.capabilities.SoftwarePackage
          relationship: fusionstage.relationships.PackageConsistsOf
          node: fusionstage.nodes.SoftwareComponent
      - heterogeneousResources:
          capability: fusionstage.capabilities.Attachment
          relationship: fusionstage.relationships.AttachesTo
          node: fusionstage.nodes.HeterogeneousResource

fusionstage.nodes.Job:
    derived_from: fusionstage.nodes.Application
    properties:
      name:
        description: Name of the job
        type: string
        default: ""
        constrains:
          max_length: 63
          regex: (^$)|(^[a-z]([-a-z0-9]*[a-z0-9])?$)
        immutable: true
        required: false
      completions:
        description: The number of repetitions pod(s) need(s) to complete
        type: integer
        default: 1
        constrains:
          in_range: [0, 2147483647]
      parallelism:
        description: The number of job executing at the same time
        type: integer
        default: 1
        constrains:
          in_range: [0, 2147483647]
      exclusive:
        description: Allow the stateful application to have its exclusive resources or not, default:(container-->false, process-->true)
        type: string
        default: "default"
        constrains:
          valid_values: ["default", "true", "false"]
      bindServices:
        description: Services that the agent binds to
        default: []
        type: fusionstage.datatypes.ServiceBind
        islist: true
      restartPolicy:
        description: The way to restart the job instance when it is failed
        type: string
        default: "OnFailure"
        constrains:
          valid_values: ["Never", "OnFailure"]
    requirements:
      - service:
          capability: fusionstage.capabilities.Endpoint.Service
          relationship: fusionstage.relationships.BindsTo
          node: fusionstage.nodes.Service
节点是否可升级

属性配置
表38-158 属性配置

属性

属性说明

deploy

应用是否部署,默认为true。

若deploy设置为false,则应用将不部署(包括应用所包含的软件组件、依赖的主机资源等)。

type

应用类型。

  • process:进程类应用。
  • container:容器应用。

默认为process。应用所包含的软件组件需要与应用的类型一致。

customSpec

应用组的用户自定义配置信息。允许用户配置任意自定义属性,属性结构体也由用户自定义。在创建应用时,会将自定义属性传递到应用的配置信息中。

certification

应用需要的凭证信息,详情请参照fusionstage.datatypes.Certification类型定义。

resourceSelector

用于设置部署应用的资源的选择条件,支持按照资源的标签过滤资源等,详情请参照fusionstage.datatypes.ResourceSelector类型定义。

annotations

在实例化后的应用上打上的注解,注解为key-value类型的键值对,详情请参照详fusionstage.datatypes.NameValuePair类型定义。

securityContext

应用安全配置,详情请参照fusionstage.datatypes.ApplicationSecurityContext类型定义。

labels

在实例化后的应用上打标签,标签为key-value类型的键值对,标签名称不能为“stack-name”、“appgroup”、“app”,这几个名称已被系统内部使用。详情请参照fusionstage.datatypes.AppLabel类型定义。

osType

操作系统的类型,缺省值为“linux”。

  • linux:Linux操作系统。
  • windows:Windows操作系统。

automountServiceAccountToken

是否自动挂载API凭证,默认值为true。

name

应用的名称,默认为空。

  • 定义应用的名称时,应用相关资源的名称都将使用这个名称。
  • 采用默认值时,应用相关资源的名称将采用节点名称+随机后缀。

completions

完成整个任务需要调度的pod数量。

parallelism

并发运行的Pod的数目。

bindServices

应用绑定的服务列表,详情请参照fusionstage.datatypes.ServiceBind类型定义。

restartPolicy

应用实例失效时的处理策略。

目前支持两种处理策略:

  • OnFailure:Pod运行失败时,在当前Node重启。
  • Never:Pod运行失败时,不重启,而是创建一个新的Pod去执行任务。

默认值为OnFailure。

关系配置
表38-159 关系配置

关系

配置说明

dependency

定义应用的基本依赖关系,对象可以是任意类型的节点,主要用于指定先后顺序。关联关系为fusionstage.relationships.ConnectsTo

volume

应用挂载的卷资源,目前支持挂载本地卷、secret卷、configmap卷。

host

定义应用的运行主机,通过fusionstage.relationships.HostedOn的关系关联到主机上。

package

定义应用的软件组件,通过fusionstage.relationships.PackageConsistsOf关系指定软件组件(fusionstage.nodes.SoftwareComponent)。

service

定义应用使用的服务(实例),通过fusionstage.relationships.BindsTo的关系绑定服务,对象类型是fusionstage.nodes.Service。

样例

在容器中运行一个任务的样例:

node_templates:
  pi_caculation:
    type: fusionstage.nodes.Job
    properties:
      type: container
      restartPolicy: Never
    requirements:
      - package:
          node: perl-soft
代理
类型定义

代理是一种特殊应用,对于代理应用,平台在每个节点上部署一个Pod实例,且当添加一个新的节点后,新的节点上也会自动部署一个Pod。这种类型的应用一般用于在节点上安装代理(Agent)。

当有节点异常时,代理应用的部分实例可能会无法正常安装,堆栈生命周期为了容忍这种情况,会跳过部分异常的实例认为代理应用部署成功,但堆栈状态显示为异常。

代理的类型定义如下:

fusionstage.nodes.Application:
    derived_from: fusionstage.nodes.Root
    abstract: true
    properties:
      type:
        type: string
        description: Type of the application
        default: "process"
        immutable: true
        constrains:
          valid_values: ["process", "container"]
      deploy:
        type: boolean
        description: Allow the application to be deployed or not
        default: true
      customSpec:
        description: User defined configmap
        default: {}
      certification:
        description: Specify a certification the application needs, and it s storage path
        type: fusionstage.datatypes.Certification
        default: {}
      resourceSelector:
        description: Resource selector to specify which node the application can be deployed on
        type: fusionstage.datatypes.ResourceSelector
        default: {}
      annotations:
        description: Annotations that are injected into the application
        type: fusionstage.datatypes.NameValuePair
        islist: true
        default: []
      securityContext:
        description: SecurityContext holds application-level security attributes and common container settings.
        type: fusionstage.datatypes.ApplicationSecurityContext
        default: {}
      labels:
        type: fusionstage.datatypes.AppLabel
        islist: true
        required: false
      osType:
        type: string
        description: Type of the os
        immutable: true
        required: false
        constrains:
          valid_values: ["linux","windows"]
      automountServiceAccountToken:
        type: boolean
        required: false
    capabilities:
      endpoint:
        type: fusionstage.capabilities.Endpoint
    requirements:
      - dependency:
          relationship: fusionstage.relationships.ConnectsTo
          node: fusionstage.nodes.Application
      - dependency:
          relationship: fusionstage.relationships.ConnectsTo
          node: fusionstage.nodes.ExternalNode
      - dependency:
          relationship: fusionstage.relationships.ConnectsTo
          node: fusionstage.nodes.HelmApplication
      - volume:
          capability: fusionstage.capabilities.Attachment
          relationship: fusionstage.relationships.AttachesTo
          node: fusionstage.nodes.Volume
      - host:
          capability: fusionstage.capabilities.Container
          relationship: fusionstage.relat  fusionstage.nodes.StatelessApplicationionships.HostedOn
          node: fusionstage.nodes.Resource
      - package:
          capability: fusionstage.capabilities.SoftwarePackage
          relationship: fusionstage.relationships.PackageConsistsOf
          node: fusionstage.nodes.SoftwareComponent
      - heterogeneousResources:
          capability: fusionstage.capabilities.Attachment
          relationship: fusionstage.relationships.AttachesTo
          node: fusionstage.nodes.HeterogeneousResource

fusionstage.nodes.Agent:
    derived_from: fusionstage.nodes.Application
    properties:
      name:
        description: Name of the agent
        type: string
        default: ""
        constrains:
          max_length: 63
          regex: (^$)|(^[a-z]([-a-z0-9]*[a-z0-9])?$)
        immutable: true
        required: false
      bindServices:
        description: Services that the agent binds to
        default: []
        type: fusionstage.datatypes.ServiceBind
        islist: true
        invisible: true
      restartPolicy:
        description: The way to restart the agent application instance when it is failed
        type: string
        default: "Always"
        constrains:
          valid_values: ["Always"]
节点是否可升级

属性配置
表38-160 属性配置

属性

属性说明

deploy

应用是否部署,默认为true。

如果deploy设置为false,则应用将不部署(包括应用所包含的软件组件、依赖的主机资源等)。

type

应用类型。

  • process:进程类应用。
  • container:容器应用。

默认为process。应用所包含的软件组件需要与应用的类型一致。

customSpec

应用组的用户自定义配置信息。允许用户配置任意自定义属性,属性结构体也由用户自行定义。在创建应用时,会将自定义属性传递到应用的配置信息中。

certification

应用需要的凭证信息,详情请参照fusionstage.datatypes.Certification类型定义。

resourceSelector

用于设置部署应用的资源的选择条件,支持按照资源的标签过滤资源等,详情请参照fusionstage.datatypes.ResourceSelector类型定义。

annotations

在实例化后的应用上打注解,注解为key-value类型的键值对,详情请参考fusionstage.datatypes.NameValuePair类型定义。

securityContext

应用安全配置,详情请参照fusionstage.datatypes.ApplicationSecurityContext类型定义。

labels

在实例化后的应用上打标签,标签为key-value类型的键值对,标签名称不能为“stack-name”、“appgroup”、“app”,这几个名称已被系统内部使用。详情请参照fusionstage.datatypes.AppLabel类型定义。

osType

操作系统的类型,缺省值为“linux”。

  • linux:Linux操作系统。
  • windows:Windows操作系统。

automountServiceAccountToken

是否自动挂载API凭证,默认值为true。

name

应用的名称,默认为空。

  • 定义应用的名称时,应用相关资源的名称都将使用这个名称。

采用默认值时,应用相关资源的名称将采用节点名称+随机后缀。

restartPolicy

应用实例失效时的处理策略。默认值为Always,且只支持Always。

Always:只要Pod停止则自动拉起。

关系配置
表38-161 关系配置

关系

配置说明

dependency

定义应用的基本依赖关系,对象可以是任意类型的节点,主要用于指定先后顺序。关联关系为fusionstage.relationships.ConnectsTo

volume

应用挂载的卷资源,目前支持挂载本地卷、secret卷、configmap卷。

host

定义应用的运行主机,通过fusionstage.relationships.HostedOn的关系关联到主机上。

package

定义应用的软件组件,通过fusionstage.relationships.PackageConsistsOf关系指定软件组件(fusionstage.nodes.SoftwareComponent)。

样例

在节点上安装DRAgent的样例如下:

node_templates:
  drservice-app:
    type: fusionstage.nodes.Agent
    properties:
      type: process                    # 默认即为进程类应用,因此此处可省略
      resourceSelector:               # 在打上标签“apptype=drapp”的节点上安装DRAgent
        labels:
          - key: apptype
            Value: drapp
    requirements:
      - package:
          node: dragent-soft
Helm应用
类型定义

Helm应用主要用于安装chart包,其类型定义如下:

  fusionstage.nodes.HelmApplication:
    derived_from: fusionstage.nodes.Root
    properties:
     name:
        description: Name of the helm application
        type: string
        default: ""
        constrains:
          max_length: 24
          regex: (^$)|(^[a-z]([-a-z0-9]*[a-z0-9])?$)
        immutable: true
     chart:
        description: Chart information for the Helm application
        type: fusionstage.datatypes.Chart
        default: {}
     values:
        description: Values used as inputs for the Helm application
        type: dict
        default: {}
     deploy:
        type: boolean
        description: Allow the Helm application to be deployed or not
        default: true
        immutable: true
    requirements:
      - dependency:
          relationship: fusionstage.relationships.ConnectsTo
          node: fusionstage.nodes.Application
      - dependency:
          relationship: fusionstage.relationships.ConnectsTo
          node: fusionstage.nodes.ExternalNode
      - dependency:
          relationship: fusionstage.relationships.ConnectsTo
          node: fusionstage.nodes.HelmApplication
节点是否可升级

属性配置
表38-162 属性配置

属性

属性说明

name

Helm应用的名称。模板应用的名称将采用“名称+随机后缀”的格式。

chart

chart包的定位信息,详情请参照fusionstage.datatypes.Chart类型定义。

values

Helm应用实例化的配置参数,可以配置0到多个参数。格式为“<parameter_name>: <parameter_value>”,需符合yaml文件格式。

deploy

应用是否部署,默认为true。

若deploy设置为false,应用将不部署(包括应用所包含的软件组件、依赖的主机资源等)。

关系配置
表38-163 关系配置

关系

配置说明

dependency

定义应用的依赖关系,主要用于指定先后顺序。关联关系为fusionstage.relationships.ConnectsTo

样例
node_templates:
  mysql:
    type: fusionstage.nodes.HelmApplication
    properties:
      name: mysql-app
      chart:
        name: mysql
        version: 1.2.3
      values: 
        max_connections: 100
        password: {get_input: mysql_password}
容器类组件
类型定义

容器类组件的类型定义如下:

  fusionstage.nodes.SoftwareComponent:
    derived_from: fusionstage.nodes.Root
    abstract: true
    properties:
      deploy:
        type: boolean
        description: Allow the software component to be deployed or not
        default: true
        immutable: true
      package:
        description: Configuration information for the software package
        type: fusionstage.datatypes.Package
        required: true
      customSpec:
        type: dict
        default: {}
    capabilities:
      package:
        type: fusionstage.capabilities.SoftwarePackage
    requirements:
     - dependency:
         relationship: fusionstage.relationships.DependsOn
         node: fusionstage.nodes.SoftwareComponent
fusionstage.nodes.ContainerComponentfusionstage.nodes.SoftwareComponent
 
 fusionstage.nodes.ContainerComponent:
    derived_from: fusionstage.nodes.SoftwareComponent
    properties:
      package:
        description: Configuration information for the container package
        type: fusionstage.datatypes.ContainerPackage
        required: true
    interfaces:
      Standard:
        type: fusionstage.interfaces.ContainerLifecycle
节点是否可升级

属性配置
表38-164 属性配置

属性

属性说明

是否可变更

deploy

应用组件是否部署。

  • true:部署。
  • false:不部署。

当应用存在packageConsistsOf的关联关系,且依赖这个软件组件时,若软件组件属性设置为false,会导致拓扑检查失败。此时需要执行强制创建,从应用中删除这个应用组件的关联关系,才能正常的创建堆栈。

package

应用组件的打包信息,详情请参照fusionstage.datatypes.ContainerPackage类型定义。

customSpec

应用组的用户自定义配置信息。允许用户配置任意自定义属性,属性结构体也由用户自行定义。在创建应用时,会将自定义属性传递到应用的配置信息中。

关联关系
表38-165 关联关系

关系

配置说明

dependency

定义软件组件之间的依赖关系,主要用于控制安装的先后顺序。

样例
  • 容器组件配置
    node_templates:
      redis-app:
        type: fusionstage.nodes.StatelessApplication
        properties:
          type: container
        requirements:
          - package:
              node: redis-soft
              relationship: fusionstage.relationships.PackageConsistsOf
     
      redis-soft:
        type: fusionstage.nodes.ContainerComponent
        properties:
          package:
            image: {get_input: image_id}
  • 应用组件的健康检查配置
    node_templates:
      nginx-soft:
        type: fusionstage.nodes.ContainerComponent
        properties:
          package:
            image: {get_input: image_id}
            probeSpec:
              livenessProbe:
                httpGet:
                  path: /index.html
                  port: 80
            ports:
              - containerPort: 80
  • 应用组件的服务开放配置

    一个应用集群内的Pod随时可能被销毁和重建,重建后的IP将会发生变化,因此不建议通过Pod的IP来访问应用的接口。

    本产品支持将一个应用集群对外抽象成一个服务(Service)的概念,并给服务分配一个虚拟的IP,这个IP是不会变化的,客户端可以通过服务的IP来访问应用的接口。

    node_templates:
      frontend-soft:
        type: fusionstage.nodes.ContainerComponent
        properties:
          package:
            image: {get_input: image_id}
            serviceSpec:
              type: NodePort
              ports:
                - port: 80               # 外部可访问的服务端口
                  nodePort: 30002        # 主机上的监听端口
                  targePort: 30002      # 容器上的监听端口 
     
      frontend-app:
        type: fusionstage.nodes.StatelessApplication
        properties:
          type: container
        requirements:
          - package:
              node: frontend-soft
  • 应用组件的环境变量的配置
    node_templates:
      frontend-soft:
        type: fusionstage.nodes.ContainerComponent
        properties:
          package:
            image: {get_input: image_id}
            env: 
              - name: BACKEND
                value: redis
进程类组件
类型定义

进程类组件的类型定义如下:

  fusionstage.nodes.SoftwareComponent:
    derived_from: fusionstage.nodes.Root
    properties:
      deploy:
        type: boolean
        description: Allow the software component to be deployed or not
        default: true
        immutable: true
      package:
        description: Configuration information for the software package
        type: fusionstage.datatypes.Package
        required: true
      customSpec:
        type: dict
        default: {}
    capabilities:
      package:
        type: fusionstage.capabilities.SoftwarePackage
    requirements:
     - dependency:
         relationship: fusionstage.relationships.DependsOn
         node: fusionstage.nodes.SoftwareComponent
fusionstage.nodes.ProcessComponentfusionstage.nodes.SoftwareComponent

  fusionstage.nodes.ProcessComponent:
    derived_from: fusionstage.nodes.SoftwareComponent
    properties:
      package:
        description: Configuration information for the process package
        type: fusionstage.datatypes.ProcessPackage
        required: true    interfaces:
      Standard:
        type: fusionstage.interfaces.ProcessLifecycle
节点是否可升级

属性配置
表38-166 属性配置

属性

属性说明

是否可变更

deploy

应用组件是否部署。

  • true:部署。
  • false:不部署。

当应用存在packageConsistsOf的关联关系,且依赖这个软件组件时,若软件组件属性设置为false,会导致拓扑检查失败。此时需要执行强制创建,从应用中删除这个应用组件的关联关系,才能正常的创建堆栈。

package

应用组件的打包信息。关联关系为11.3.6.5.34-fusionstage.datatypes.ProcessPackage

customSpec

应用组的用户自定义配置信息。允许用户配置任意自定义属性,属性结构体也由用户自行定义。在创建应用时,会将自定义属性传递到应用的配置信息中。

关联关系
表38-167 关联关系

关系

配置说明

dependency

定义软件组件之间的依赖关系,主要用于控制安装的先后顺序。

样例
  • 应用组件的生命周期配置

    进程类应用组件的默认生命周期。如果默认的生命周期不满足用户需要,用户可以自定义应用组件的生命周期。容器类应用组件不支持生命周期的定义。

    node_templates:
      zookeeper:
        type: fusionstage.nodes.StatelessApplication
        properties:
          type: process
          instances: 5
        requirements:
          - package:
              node: zk-soft
              relationship: fusionstage.relationships.PackageConsistsOf
     
      zk-soft:
        type: fusionstage.nodes.ProcessComponent
        properties:
          customSpec:
            tags:
              - key: netype
                value: com.huawei.paas.platformservice.zookeeper
          package:
            name: DigitalWare_V6R1C00RC2_ZooKeeper_RUN_20170328_Linux.tar.gz
            version: ""
    
        interfaces:
          Standard:
            type: df.interfaces.ProcessLifecycle
    ##################################################################################
    # interfaces type definitions
    ##################################################################################
    interfaces:
      df.interfaces.ProcessLifecycle:
        derived_from: fusionstage.interfaces.NodeLifecycle
        actions:
          preinstallCheck:
            command: '[ ! -s preinstall_check.sh ] || ./preinstall_check.sh'
            fail-command: ''
          install:
            command: adaptor install '[ ! -s install.sh ] || ./install.sh'
            fail-command: ''
          start:
            command: adaptor start '[ ! -s start.sh ] || ./start.sh'
            fail-command: ''
          bind:
            command: adaptor bind '[ ! -s bind.sh ] || ./bind.sh'
            fail-command: ''
          stop:
            command: adaptor stop '[ ! -s stop.sh ] || ./stop.sh'
            fail-command: ''
          uninstall:
            command: adaptor uninstall '[ ! -s uninstall.sh ] || ./uninstall.sh'
            fail-command: ''
          srvcustom:
            command: '[ ! -s srvcustom.sh ] || ./srvcustom.sh'
            fail-command: ''
          reconfigure:
            command: '[ ! -s reconfigure.sh ] || ./reconfigure.sh'
            fail-command: ''
        plans:
          install: 
            actions: [install]
            fail-actions: []
          configure:
            actions: [bind]
          start:
            actions: [start]
            fail-actions: []
          stop:   
            actions: [stop]
            fail-actions: []
          uninstall: 
            actions: [uninstall]
            fail-actions: []
          reconfigure:  
            actions: [reconfigure]
            fail-actions: []

    脚本的执行流程:

    • 安装阶段:install > configure > start > poststart
    • 卸载阶段:prestop > stop > uninstall
  • 应用组件的访问路由配置
    node_templates:
      hello-package:
        type: fusionstage.nodes.ProcessComponent
        properties:        
          package:
            name: {get_input: package}
            version: V1
    
            env:
              - name: BIND_SERVICES
                value: default
            ports:
              - port: 9876
                protocol: TCP
            serviceSpec:
              type: NodePort
              ports:
                - port: 9876
            ingressSpec:
              tls:
              - hosts:
                - autohost 
                secretName: default-ingress-ssl
              rules:
              - host: autohost        
                http:      
                  paths:
                  - path: /hello
                    backend:
                      servicePort: 0
              tlsBackend: true
伸缩策略
类型定义

伸缩策略用于控制应用的自动弹性伸缩,其类型定义如下:

  fusionstage.nodes.AutoScaler:
    derived_from: fusionstage.nodes.Root
    properties:
      type:
        description: The type of policy group, only support app for now.
        type: string
        default: "app"
        constrains:
          valid_values: ["app"]
      name:
        type: string
        description: Policy name and its format should match reg ^[a-zA-Z][0-9a-zA-Z_-]*$
        required: true
        constrains:
          min_length: 1
          max_length: 64
          regex: "^[a-zA-Z][0-9a-zA-Z_-]*$"
      maxInstances:
        description: Maximum number of instances allowed to set, default value is 10
        type: integer
        default: 10
        constrains:
          greater_or_equal: 1
          less_or_equal: 100
      minInstances:
        description: Minimum number of instances allowed to set default value is 1
        type: integer
        default: 1
        constrains:
          greater_or_equal: 1
          less_or_equal: 1000
      cooldownTime:
        description: Scaling can be only triggered again after the defined cooldownTime in second since last triggering
        type: integer
        default: 60
        constrains:
          in_range: [0, 86400]
      rules:
        description: A list of rules used to configure auto-scaling behavior
        default: []
        type: fusionstage.datatypes.AutoscalerRule
        islist: true
    requirements:
      - application:
          relationship: fusionstage.relationships.ConnectsTo
          node: fusionstage.nodes.Application
节点是否可升级

属性配置
表38-168 属性配置

属性

属性说明

type

伸缩组的类型,只能配置为“app”,即一个应用就是一个伸缩组。

name

伸缩策略的名称。

maxInstances

伸缩组内最大的实例数目,即应用的最大Pod数,达到该最大数后应用不再扩展。

minInstances

伸缩组内最小的实例数目,即应用的最小Pod数,达到该最小数后应用不再收缩。

cooldownTime

伸缩组的冷却时间,一次伸缩结束后,只有在冷却时间段之后才能再次触发伸缩。

单位为秒。

rules

伸缩组的自动伸缩规则,详情请参照fusionstage.datatypes.AutoscalerRule类型定义。

关系配置
表38-169 关系配置

关系

配置说明

application

伸缩策略关联的应用,关联的应用即为伸缩组。弹性伸缩组(Autoscaler)和应用是多对1的关系,一个应用可以关联多个伸缩组,但是只能有一个伸缩组启用,一个弹性伸缩组只能关联一个应用。

样例

根据资源性能指标进行自动伸缩的配置样例:

my-scaling-policy:
    type: fusionstage.nodes.AutoScaler
    properties:
      name: my-scaling-policy
      maxInstances: 10
      minInstances: 3
      cooldownTime: 180
      rules: 
        - name: scaling-out-rule       # 配置弹性扩展的规则
          conditions: 
            - metricNamespace: PAAS.CONTAINER
              metricName: cpuUsage
              metricUnit: Percent
              metricOperation: >
              metricThreshold: 80
              statistic: average
              period: 60
              evaluationPeriods: 3
          actions: 
            - type: scale_out_k8s
        - name: scaling-in-rule        # 配置弹性收缩的规则
          conditions: 
            - metricNamespace: PAAS.CONTAINER
              metricName: cpuUsage
              metricUnit: Percent
              metricOperation: <
              metricThreshold: 50
              statistic: average
              period: 60
              evaluationPeriods: 3
          actions: 
            - type: scale_in_k8s
    requirements:
      - application:
          node: my-app
静态资源
类型定义
fusionstage.nodes.ResourceTemplate:
    derived_from: fusionstage.nodes.Resource
    abstract: true
    properties:
      isPublic:
        description: Allow the resource to be used by other stacks/applications or not
        type: boolean
        default: false
        immutable: true
      hostType:
        description: Type of the resource template
        type: string
        default: vm
        immutable: true
        constrains:
          valid_values: ["vm","pm"]
      authInfo:
        description: Underlying infrastructure's authentication information
        type: fusionstage.datatypes.AuthInfo
      deploy:
        description: Allow the resource to be deployed or not
        type: boolean
        default: true
        immutable: true
      instances:
        description: The number of VM or PM instances
        type: integer
        default: 1
        constrains:
          in_range: [0, 2147483647]
      labels:
        description: A list key-value pairs for the resource labels, e.g, [{"key":"lable1","value":"value1"},{"key":"lable2","value":"value2"}]
        default: []
        islist: true
        type: fusionstage.datatypes.KeyValuePair
    capabilities:
      host:
        type: fusionstage.capabilities.Container
      os:
        type: fusionstage.capabilities.OperatingSystem

  fusionstage.nodes.NodePool:
    derived_from: fusionstage.nodes.ResourceTemplate
    properties:
      ips:
        description: IP addresses of the for logging in with auth_info.
        default: []
        type: ip
        islist: true
        required: true
节点是否可升级

属性配置
表38-170 属性配置

属性

属性说明

isPublic

是否允许本堆栈以外的应用部署在这些计算资源上。

默认值为false。

如果该属性为false,则会在虚机上打一个key为beta.k8s.io/accepted-app的污点(scheduler.alpha.kubernetes.io/taints),保证在一般情况下堆栈外的节点不能部署在该节点上。

在某些特殊情况下如果需要在此节点上部署堆栈,需要针对该key配置对应的容忍度(scheduler.alpha.kubernetes.io/tolerations)。

hostType

资源的类型,默认为vm。

  • vm:虚拟机。
  • pm:物理机。

authInfo

ssh登录节点的认证信息,如用户名和密码等,详情请参照fusionstage.datatypes.AuthInfo类型定义。

deploy

是否纳管资源,默认值为true。

instances

计算资源的数量,缺省为1。如果“ips”属性中配置的IP地址数量大于0且同时配置了登陆账号密码,则实际上纳管的资源数量以“ips”属性中IP地址数量为准。

labels

在静态纳管的计算资源上打上的标签。详细配置说明请参考fusionstage.datatypes.KeyValuePair类型定义。

堆栈默认会在下属虚机上标上名为stack-name,值为堆栈名字的标签,可以使用K8s的labelSelector对堆栈下属的虚机进行选取。

ips

计算资源的IP地址列表。

必填项。

关联关系

NA。

样例

静态资源纳管样例:

zk-cluster:
    type: fusionstage.nodes.NodePool
    properties:
      instances: 3
      hostType: vm
      authInfo:
        user: {get_input login_user}
        password: {get_input login_password}
      ips: 
        - 10.71.122.1
        - 10.71.122.2
        - 10.71.122.3
  zk-app: 
    type: fusionstage.nodes.StatelessApplication
    properties:
      type: container
    requirements:
      - host:
          node: zk-cluster
动态资源
类型定义
fusionstage.nodes.ResourceTemplate:
    derived_from: fusionstage.nodes.Resource
    abstract: true
    properties:
      isPublic:
        description: Allow the resource to be used by other stacks/applications or not
        type: boolean
        default: false
        immutable: true
      hostType:
        description: Type of the resource template
        type: string
        default: vm
        immutable: true
        constrains:
          valid_values: ["vm","pm"]
      authInfo:
        description: Underlying infrastructure's authentication information
        type: fusionstage.datatypes.AuthInfo
      deploy:
        description: Allow the resource to be deployed or not
        type: boolean
        default: true
        immutable: true
      instances:
        description: The number of VM or PM instances
        type: integer
        default: 1
        constrains:
          in_range: [0, 1000]
      labels:
        description: A list key-value pairs for the resource labels, e.g, [{"key":"lable1","value":"value1"},{"key":"lable2","value":"value2"}]
        default: []
        islist: true
        type: fusionstage.datatypes.KeyValuePair
    capabilities:
      host:
        type: fusionstage.capabilities.Container
      os:
        type: fusionstage.capabilities.OperatingSystem

 fusionstage.nodes.DynamicNodePool:
    derived_from: fusionstage.nodes.ResourceTemplate
    properties:
      host:
        type: string
        description: vmware host, used by vmware only
        default: ''
      pool:
        type: string
        description: vmware pool, used by vmware only
        default: ''
      security_area:
        type: string
        description: security_area, used by hicloud only now
        default: ''
      region:
        type: string
        description: region, used by hicloud only now
        default: ''
      expired_days:
        type: string
        description: expired days, used by hicloud only now
        default: ''
      custom_name:
        type: string
        description: custom name , used by hicloud only now
        default: ''
      description:
        type: string
        description: server description detail, used by hicloud only now
        default: ''
      osType:
        type: string
        required: false
        constrains:
          valid_values: ["linux","windows"]
      image:
        description: Image user by the node pool
        type: string
        required: true
      cpu:
        description: Number of cpu core assigned to the node pool (not supported yet)
        type: string
        default: ""
        invisible: true
      memory:
        description: Memory capacity for the node pool (not supported yet)
        invisible: true
        type: string
        default: ""
      disk:
        description: Disk capacity for the node pool (not supported yet)
        invisible: true
        type: string
        default: ""
      volumes:
        description: Volumes attached to the node pool, which are shared among all the nodes in the pool (The concrete definition is on the way)
        default: []
        type: fusionstage.datatypes.Volume
        islist: true
      securityGroups:
        description: Security groups attached to the node pool
        default: []
        type: string
        islist: true
      subnets:
        description: Subnet attached to the node pool (not supported yet)
        default: []
        type: string
        islist: true
      flavor:
        description: Flavor for the node pool
        type: string
        required: true
      availabilityZone:
        description: Availability zone that node pool belongs to
        type: string
        default: ""
      datastore:
        description: Data store that node is attached to
        type: string
        default: ""
      enableManagementNetwork:
        type: boolean
        description: Allow the created node pool to bind to ManagementNetwork or not
        default: true
      vpc:
        description: Vpc for the node pool
        type: string
        default: ""
      networks:
        description: Networks attached to the node pool
        default: []
        islist: true
      affinities:
        description: vm affinities with IaaS
        type: fusionstage.datatypes.IaaSAffinity
        default: {}
      rootVolume:
        description: root volume
        type: fusionstage.datatypes.RootVolume
        default: {}
      initDataVolumes:
        description: default data volumes will be created before node is ready
        default: []
        type: fusionstage.datatypes.InitDataVolume
        islist: true
    capabilities:
      storage:
        type: fusionstage.capabilities.Attachment
    requirements:
      - port:
          capability: fusionstage.capabilities.PortBindable
          relationship: fusionstage.relationships.BindsToPort
          node: fusionstage.nodes.Port
      - vip:
          capability: fusionstage.capabilities.Attachment
          relationship: fusionstage.relationships.AttachesTo
          node: fusionstage.nodes.VIP
      - eip:
          capability: fusionstage.capabilities.Attachment
          relationship: fusionstage.relationships.AttachesTo
          node: fusionstage.nodes.EIP
属性配置
表38-171 属性配置

属性

属性说明

isPublic

是否允许本堆栈以外的应用部署在这些计算资源上。

默认值为false。

如果该属性为false,则会在虚机上打一个key为beta.k8s.io/accepted-app的污点(scheduler.alpha.kubernetes.io/taints),保证在一般情况下堆栈外的节点不能部署在该节点上。

在某些特殊情况下如果需要在此节点上部署堆栈,需要针对该key配置对应的容忍度(scheduler.alpha.kubernetes.io/tolerations)。

hostType

资源的类型。

  • vm:虚拟机。
  • pm:物理机。

authInfo

ssh登录节点的认证信息,如用户名和密码等。详情请参照fusionstage.datatypes.AuthInfo类型定义。

deploy

是否纳管资源,默认值为true。

instances

计算资源的数量,缺省为1。

需要是一个范围在[0, 1000]内的整数。

labels

在动态创建出来的计算资源上打上的标签。详细配置说明请参考fusionstage.datatypes.KeyValuePair类型定义。

堆栈默认会在下属虚机上标上名为stack-name,值为堆栈名字的标签,可以使用K8s的labelSelector对堆栈下属的虚机进行选取。

host

Vmware专有,指定你要纳管的节点所属的物理主机

pool

Vmware专有,指定节点所属的资源池

安全域(security_area)

Hicloud专有,例如:用户侧-绿区,可通过查询安全域的接口获取。

区域编码(region)

Hicloud专有,创建实例的区域。

购买时长(expired_days)

Hicloud专有,购买时长(单位:天)默认:365,最小30(1个月),最大1095(3年)。

当前到期不会销毁,自动续期,不支持设置为永久。

主机短名(custom_name)

Hicloud专有,自定义字段1~6位,必须以字母开头,且只允许小写字母和数字,考虑到研发业务和生产业务统一,自定义字段为可选项,用户申请EC2时若不填写,则系统有默认值,默认值由EC2 owner在hic admin配置,且可根据Region的主机名使用情况,随时调整。

描述(description)

Hicloud专有,实例描述信息。

osType

操作系统的类型,缺省值为“linux”。

  • linux:Linux操作系统。
  • windows:Windows操作系统。

image

创建虚拟机的镜像ID。

storagetype

挂载卷的类型,缺省值为本地卷。

  • local:本地卷。
  • volume:云存储卷。

cpu

CPU核数。单位U。1U=1vCPU。

memory

内存大小。单位M。1M=1MB。

disk

磁盘大小。单位G。1G=1GB。

volumes

挂载的卷的数组,卷会挂载到节点上,详细配置说明请参考fusionstage.datatypes.Volume类型定义。

securityGroups

节点所在的安全组的ID,只在特定IaaS下才生效。

subnets

节点所在的子网的ID。

flavor

虚拟机规格的标识,如果配置了此属性,则cpu/memory/disk等属性的配置无效。

请填写flavor的id,不能填写flavor的名称。flavor的id请向运维管理员获取。

availabilityZone

I层AZ的名称。

datastore

节点挂载的存储。

enableManagementNetwork

是否使用本产品默认的管理网络,默认为true,如果配置为false,则用户需要保证节点和本产品的管理平面能互通。

vpc

集群节点的vpc

networks

节点所在的网络。

详细配置如下:

uuid string 网络的uuid,一般与id相同

id string 网络的id,优先级高于名称

name string 网络的名称

interface string 网卡的Interface名

fixed_ip string 网卡的固定ip,不能使loopback,link-local,link-local multicast

subnets []string 网卡的子网列表

securityGroups []string 网卡的安全组列表,如果为空默认使用虚机的安全组

port string 已经存在的port id,如果ID为空则需要此字段

affinities

虚机在IaaS层的亲和性,详细配置参考fusionstage.datatypes.IaaSAffinity类型定义。

rootVolume

在共享卷上创建虚拟机系统盘,详细配置说明请参考fusionstage.datatypes.RootVolume类型定义。

initDataVolumes

在纳管节点之前创建的数据卷,详细配置说明参考fusionstage.datatypes.InitDataVolume类型定义。

关联关系
表38-172 关联关系

关系

关系说明

port

节点关联的端口。

eip

仅Hicloud场景支持,网络绑定eip, eip绑定的对象支持两种,分别为:

  1. 可以用网络列表中的网络与eip进行绑定,从而获取IP。通过在eip中配置设定具体绑定的网络。该场景下需要在集群的requirements中配置对应的eip。
  2. 可以将vip与eip进行绑定,从而获取IP。该场景下需要在需要绑定eip的vip的requirements中配置对应的eip。
说明:

每个eip同一时间最多只能绑定1个vip,只有vpc Type为openstack类型的vpc才可以创建eip。

vip

仅Hicloud场景支持,可以用网络列表中的网络与vip进行绑定,从而获取IP。

vip目前只能绑定到相同vpc子网的EC2实例,只有Available状态的vip才能够进行绑定操作。每个EC2实例只能同时绑定7个vip,每个vip同一时间最多只能绑定2个EC2实例。

说明:
  1. vip绑定成功后,需要用户在云服务器实例上配置相应的vip才能生效。
  2. 只有处于运行中和已停止状态的云服务器实例可以绑定vip,只有vpc Type为openstack类型的vpc创建的vip可以绑定eip。
样例

动态资源纳管样例:

zk-cluster:
    type: fusionstage.nodes.DynamicNodePool
    properties:
      instances: {get_input: zk-cluster-instances}
      hostType: vm
      image: {get_input: imageId}
      networks:                      # 定义双网络平面,默认提供PaaS内置的管理网络平面
        - {get_input: service}
        - {get_input: manager}
      enableManagementNetwork:false  # 不使用paas的管理网络平面。
      cpu: 4U
      memory: 4096M
      disk: 10G
      customSpec: {}
      authInfo:                    # 虚机的访问信息
        ser: {get_input login_user}
        password: {get_input login_password}
      labels:                               # 创建资源的标签
        - key: application
          value: "zookeeper"
  zk-app: 
    type: fusionstage.nodes.StatelessApplication
    properties:
      type: container
      exclusive: "true"           # 应用独占资源
    requirements:
      - host:
          node: zk-cluster
端口
类型定义

端口是指fusionsphere云平台创建出来的网络端口,其类型定义如下:

  fusionstage.nodes.Port:
    derived_from: fusionstage.nodes.Resource
    properties:
      networkID:
        description: Network ID which the port is bind to, optional when network name is specified.
        type: string
        default: ""
      network:
        description:  Network name which the port is bind to, optional when network id is specified.
        type: string
        default: ""
      securityGroups:
        description: Security groups attached to the port.
        default: []
        type: string
        islist: true
      ips:
        description: IP addresses attached to the port.
        default: []
        type: fusionstage.datatypes.FixIP
        islist: true
      allowedAddressPairs:
        description: A list of address pairs allowed to bind to the port (not supported yet)
        default: []
        type: fusionstage.datatypes.AddressPair
        islist: true
    requirements:
      - network:
          capability: fusionstage.capabilities.Linkable
          relationship: fusionstage.relationships.LinksTo
          node: fusionstage.nodes.Network
      - pair:
          capability: fusionstage.capabilities.PortPaired
          node: fusionstage.nodes.Port
          relationship: fusionstage.relationships.PortDependsOn
    capabilities:
      bind:
        type: fusionstage.capabilities.PortBindable
      pair:
        type: fusionstage.capabilities.PortPaired
节点是否可升级

属性配置
表38-173 属性配置

属性

属性说明

networkID

端口所连接的网络标识。

networkID和network属性必填一个。

network

端口所连接的网络的名称。

networkID和network属性必填一个。

securityGroups

端口所在的安全组。数组,内容为安全组的名称。

必选项。

ips

端口配置的IP地址。

数组,详情内容请参见fusionstage.datatypes.FixIP中的“类型定义”。

allowedAddressPairs

地址对,仅在需要建立vrrp关系时用到。

数组。

可选项。

一般建议通过关联关系定义地址对,而不是直接固定IP地址。详情内容请参见fusionstage.datatypes.AddressPair中的“类型定义”。

关联关系
表38-174 关联关系

关系

关系说明

pair

端口对的依赖,通过pair建立。

使用fusionstage.relationships.PortDependsOn关系。

network

端口依赖的网络。

使用fusionstage.relationships.LinksTo关系,目前未实现。

样例

为虚拟机添加接口样例:

vrrp-port-1:
    type: fusionstage.nodes.Port
    properties:
      networkID: {get_input: net1}
      securityGroups: 
        - {get_input: sg}
      ips:
        - ipAddress: {get_input: fix_ip1}
          subnetID: {get_input: subnet_net1}
  vm-port-1:
    type: fusionstage.nodes.Port
    properties:
      networkID: {get_input: net1}
      securityGroups: 
        - {get_input: sg}
      ips:
        - subnetID: {get_input: subnet_net1}
    requirements:
      - pair:
          node: vrrp-port-1
  vm-pool:
    type: fusionstage.nodes.DynamicNodePool
    properties:
      authInfo:
        user: {get_input: user}
        password: {get_input: password}
      image: {get_input: image}
      flavor: {get_input: flavor}
      securityGroups: 
        - {get_input: sg}
    requirements:
      - port:
          node: vm-port-1
本地卷

卷特指挂载到容器中的卷。如果是要往虚拟机、物理机上挂载卷,请参考计算资源的编排。

对于容器类应用,使用卷(Volume)可以解决以下问题:

  • 持久化数据

    写入本地盘中的数据是临时存在的,容器重启后数据就会丢失,如果要持久化数据,则需要将数据写入卷中。

  • 在同一个Pod的多个容器中共享文件

    同一个Pod中的多个容器共享卷的存储空间,因此可以通过将数据写入卷的方式在多个容器中共享数据。

类型定义

本地卷使用宿主机上的一个目录或者文件作为卷挂载到Pod上,属于一种普通卷,只有同一个节点上的容器才可以访问。

  fusionstage.nodes.Volume:
    abstract: true
    derived_from: fusionstage.nodes.Root
    properties:
      name:
        description: Name of the volume 
        type: string
        required: true
        immutable: true
    capabilities:
      storage:
        type: fusionstage.capabilities.Attachment


  fusionstage.nodes.LocalVolume:
    derived_from: fusionstage.nodes.Volume
    properties:
      hostPath:
        description: Host path specifies a file system location which the local storage volume attaches to
        type: string
        default: ""
        required: true
属性配置
表38-175 属性说明

属性

属性说明

name

卷的名称,必填项。

hostPath

宿主机上的一个目录或者文件,该目录或者文件作为卷挂载到Pod。

关系配置

NA。

样例

将日志文件持久化保存:

node_templates:
  app_logfile:
    type: fusionstage.nodes.LocalVolume
    properties:
      name: logfile
      hostPath: /var/paas/sys/log/app

  my_app:
    type: fusionstage.nodes.StatelessApplication
    properties:
      type: container
    requirements:
      - package:
          node: my_soft
          relationship: fusionstage.relationships.PackageConsistsOf
      - volume:
          node: logfile
          relationship: fusionstage.relationships.AttachesTo

  my_soft:
    type: fusionstage.nodes.ProcessComponent
    properties:
      package:
          image: {get_input: image}
        volumes:
          - name: app_logfile
            mountPath: /var/paas/sys/log/app
EIP

网络绑定EIP,目前只支持Hicloud环境,并且只有VPC Type为openstack类型的VPC才可以创建EIP。

eip绑定的对象支持两种,分别为:

  1. 可以用网络列表中的网络与EIP进行绑定,从而获取IP。通过在EIP中配置设定具体绑定的网络。该场景下需要在集群的requirements中配置对应的EIP。
  2. 可以将VIP与EIP进行绑定,从而获取IP。该场景下需要在需要绑定eip的vip的requirements中配置对应的EIP。每个eip同一时间最多只能绑定1个VIP
类型定义
  fusionstage.nodes.Resource:
    abstract: true
    description: Basic node type definition for resource
    derived_from: fusionstage.nodes.Root

  fusionstage.nodes.EIP:
    derived_from: fusionstage.nodes.Resource
    properties:
      vpc:
        description: vpc, used by hicloud only now
        type: string
        default: ''
      network:
        description: network, used by hicloud only now
        type: string
        default: ''
    capabilities:
      attach:
        type: fusionstage.capabilities.Attachment
节点是否可升级

属性配置
表38-176 属性说明

属性

属性说明

vpc

VPC ID

network

VPC子网ID

关系配置

NA。

样例

申请一个EIP并绑定到虚机:

node_templates:
  hello-cluster:
    type: hwpaas.nodes.Cluster
    properties:
      use_dynamic_resource: {get_input: use_dynamic_resource}
      enable_management_network: {get_input: enable_management_network}
      instances: {get_input: instances}
      auth_info:
        user: {get_input: user}
        password: {get_input: password}
      image: {get_input: image}
      flavor: {get_input: flavor}
      networks:
        - id: { get_input: network_id }
          nictype: private
        - id: { get_input: network_id_ext }
          nictype: private
        - id: { get_input: network_id_manage }
          nictype: public
      security_groups: 
        - {get_input: sg}
      labels: 
        - key: {get_input: nodelabel_key}
          value: {get_input: nodelabel_value}
      volumes:
        - size: {get_input: volume_size}
      vpc: { get_input: vpc_id }
      security_area: { get_input: security_area }
      region: { get_input: region }
      expired_days: {get_input: expired_days}
      custom_name: {get_input: custom_name}
      description: {get_input: description}
    requirements:
      - eip:
          node: imc-eip

  # eip
  imc-eip:
    type: hwpaas.nodes.EIP
    properties:
      vpc: { get_input: vpc_id }
      network: { get_input: network_id }

VIP

目前只支持Hicloud环境,可以申请一个VIP,并用网络列表中的网络与VIP进行绑定,从而获取IP。

vip目前只能绑定到相同VPC子网的EC2实例,只有Available状态的VIP才能够进行绑定操作。每个EC2实例只能同时绑定7个VIP,每个VIP同一时间最多只能绑定2个EC2实例。

  • VIP绑定成功后,需要用户在云服务器实例上配置相应的VIP才能生效。
  • 只有处于运行中和已停止状态的云服务器实例可以绑定VIP,只有VPC Type为openstack类型的VPC创建的VIP可以绑定EIP。
类型定义
  fusionstage.nodes.Resource:
    abstract: true
    description: Basic node type definition for resource
    derived_from: fusionstage.nodes.Root

  fusionstage.nodes.VIP:
    derived_from: fusionstage.nodes.Resource
    properties:
      vpc:
        description: vpc, used by hicloud only now
        type: string
        default: ''
      network:
        description: network, used by hicloud only now
        type: string
        default: ''
    capabilities:
      attach:
        type: fusionstage.capabilities.Attachment
    requirements:
      - eip:
          capability: fusionstage.capabilities.Attachment
          relationship: fusionstage.relationships.AttachesTo
          node: fusionstage.nodes.EIP
节点是否可升级

属性配置
表38-177 属性说明

属性

属性说明

vpc

VPC ID

network

VPC子网ID

关系配置

属性

属性说明

eip

将vip与eip进行绑定,从而获取IP

样例

申请一个VIP并绑定到虚机:

node_templates:
  hello-cluster:
    type: hwpaas.nodes.Cluster
    properties:
      use_dynamic_resource: {get_input: use_dynamic_resource}
      enable_management_network: {get_input: enable_management_network}
      instances: {get_input: instances}
      auth_info:
        user: {get_input: user}
        password: {get_input: password}
      image: {get_input: image}
      flavor: {get_input: flavor}
      networks:
        - id: { get_input: network_id }
          nictype: private
        - id: { get_input: network_id_ext }
          nictype: private
        - id: { get_input: network_id_manage }
          nictype: public
      security_groups: 
        - {get_input: sg}
      labels: 
        - key: {get_input: nodelabel_key}
          value: {get_input: nodelabel_value}
      volumes:
        - size: {get_input: volume_size}
      vpc: { get_input: vpc_id }
      security_area: { get_input: security_area }
      region: { get_input: region }
      expired_days: {get_input: expired_days}
      custom_name: {get_input: custom_name}
      description: {get_input: description}
    requirements:
      - vip:
          node: imc-vip

  # vip
  imc-vip:
    type: hwpaas.nodes.VIP
    properties:
      vpc: { get_input: vpc_id }
      network: { get_input: network_id }
DynamicVolume
类型定义

部署stack时动态到IaaS创建卷并绑定到容器上,其类型定义如下:

  fusionstage.nodes.Volume:
    abstract: true
    derived_from: fusionstage.nodes.Root
    properties:
      name:
        description: Name of the volume 
        type: string
        required: true
        immutable: true
    capabilities:
      storage:
        type: fusionstage.capabilities.Attachment

  fusionstage.nodes.DynamicVolume:
    derived_from: fusionstage.nodes.Volume
    properties:
      accessMode:
        description: Access mode for the persist volume, default value is ReadWriteOnce.
        type: string
        default: "ReadWriteOnce"
        immutable: true
        constrains:
          valid_values: ["ReadWriteOnce", "ReadOnlyMany", "ReadWriteMany"]
      size:
        description: Capacity of the persist volume, units is GB, default value is 1.
        type: integer
        default: 1
        constrains:
          in_range: [0, 2147483647]
      storageClass:
        description: storage class
        type: string
        immutable: true
        default: "any"
节点是否可升级

属性配置
表38-178 属性配置

属性

属性说明

是否可变更

name

卷的名称,必填项。

accessMode

持久卷的访问模式有三种:

  • ReadWriteOnce:是最基本的方式,可读可写,但只支持被单个Pod挂载。
  • ReadOnlyMany:可以以只读的方式被多个Pod挂载。
  • ReadWriteMany:这种存储可以以读写的方式被多个Pod共享。
    说明:

    若在项目管理页面关闭了“自动创建存储”,同时在资源池中存在足够大小的存储,用户通过堆栈创建DynamicVolume的时候,因资源池中创建的存储类型为ReadWriteMany,需与此访问模式一致,即堆栈中的DynamicVolume访问模式需为ReadWriteMany。

size

卷的大小,单位为GB。

storageClass

卷的类型,实现卷的管理插件接口,支持卷的动态供应。

关系配置

NA。

样例

动态到IaaS创建新的卷:

node_templates:
  my_volume:
    type: fusionstage.nodes.DynamicVolume
    properties:
      name: myVol
      accessMode: ReadWriteOnce
      storage: 8
      storageClassName: any
 
  my_app:
    type: fusionstage.nodes.StatefulApplication
    properties:
      type: container
      instances: 3
    requirements:
      - package:
          node: my_soft
          relationship: fusionstage.relationships.PackageConsistsOf
      - volume:
          node: my_volume
          relationship: fusionstage.relationships.AttachesTo
 
  my_soft:
    type: fusionstage.nodes.ProcessComponent
    properties:
      package:
          image: {get_input: image}
        volumes:
          - name: myVol
            mountPath: /data
FlexVolume
类型定义

部署stack时将IaaS中已有的卷绑定到容器上,其类型定义如下:

  fusionstage.nodes.Volume:
    abstract: true
    derived_from: fusionstage.nodes.Root
    properties:
      name:
        description: Name of the volume 
        type: string
        required: true
        immutable: true
    capabilities:
      storage:
        type: fusionstage.capabilities.Attachment

  fusionstage.nodes.FlexVolume:
    derived_from: fusionstage.nodes.Volume
    properties:
      fsType:
        description: Filesystem type of the volume
        type: string
        default: "ext4"
        immutable: true
        constrains:
          valid_values: ["ext3", "ext4"]
      volumeName:
        description: The name of the volume to be used as a container volume
        type: string
        immutable: true
        required: true
        constrains:
          min_length: 1
          max_length: 24
          regex: "^[a-z]([-a-z0-9]*[a-z0-9])?$"
节点是否可升级

属性配置
表38-179 属性配置

属性

属性说明

name

卷的名称,必填项。

fsType

文件系统类型,支持的值包括"ext3"、"ext4", 默认值为“ext4”。

volumeName

卷在IaaS中的名称。

关系配置

NA。

样例

绑定IaaS已有的卷:

node_templates:
  my_volume:
    type: fusionstage.nodes.FlexVolume
    properties:
      name: myVol
      volumeName: iaasVolumeName

  my_app:
    type: fusionstage.nodes.StatefulApplication
    properties:
      type: container
      instances: 3
    requirements:
      - package:
          node: my_soft
          relationship: fusionstage.relationships.PackageConsistsOf
      - volume:
          node: my_volume
          relationship: fusionstage.relationships.AttachesTo

  my_soft:
    type: fusionstage.nodes.ProcessComponent
    properties:
      package:
          image: {get_input: image}
        volumes:
          - name: myVol
            mountPath: /data
Secret
类型定义

Secret用于存储敏感配置信息,如用户名、密码、证书等。这种信息存储在Secret中比存储在Env或者ConfigMap中更加安全。

一个Secret会作为一个卷挂载到Pod上,容器中的进程可以从卷的挂载路径下的文件中读取配置信息。

  fusionstage.nodes.Volume:
    abstract: true
    derived_from: fusionstage.nodes.Root
    properties:
      name:
        description: Name of the volume 
        type: string
        required: true
        immutable: true
    capabilities:
      storage:
        type: fusionstage.capabilities.Attachment
 
  fusionstage.nodes.SecretVolume:
    derived_from: fusionstage.nodes.Volume
    properties:
      name:
        description: Name of the referenced secret
        type: string
        required: true
        immutable: true
        constrains:
          max_length: 24
          regex: (^$)|(^[a-z]([-a-z0-9]*[a-z0-9])?$)
      secretSpec:
        description: Definition of the configMap
        type: fusionstage.datatypes.SecretDef
        islist: true
        required: false
      decrypt:
        description: The secret should be mounted as decrypted
        type: boolean
        default: true
        immutable: true
      createNew:
        description: Whether create a new Secret
        type: boolean
        immutable: true
        default: false
节点是否可升级

属性配置
表38-180 属性配置

属性

属性说明

是否可变更

name

卷的名称,必填项。

secretSpec

Secret的数据,包含多个数据项,每个数据项保存为一个文件放在卷的挂载路径下。

decrypt

是否解密secret中的数据,默认为false,即卷中存储的数据是密文,应用需要自行解密。

createNew

是否创建新的secret。

  • true:表示创建新的secret,如果系统中已有同名的secret则报错。
  • false:表示根据名称绑定已有的secret,如果secret不存在则报错。

关联关系

NA。

样例

使用secret存储用户名密码样例如下:

Secret中有多个数据项,每一个数据项保存为一个单独的文件存储在卷的挂载目录下,文件名为数据项的name的值,文件内容为数据项的value的值。

如下,卷的挂载路径为“/etc/foo”,容器中的进程可以从“/etc/foo/username”文件中读取用户名信息,从“/etc/foo/password”文件中读取密码信息。如果“decrypt”属性值为false,则文件的内容是密文;如果“decrypt”属性值为true,则文件的内容是明文。

node_templates:
  my_secret:
    type: fusionstage.nodes.SecretVolume
    properties:
      name: mySecret
      secretSpec:
        - name: username
          value: YWRtaW4=
        - name: password
          value: MWYyZDFlMmU2N2Rm
 
  my_app:
    type: fusionstage.nodes.StatelessApplication
    properties:
      type: container
    requirements:
      - package:
          node: my_soft
          relationship: fusionstage.relationships.PackageConsistsOf
      - volume:
          node: my_secret
          relationship: fusionstage.relationships.AttachesTo
 
  my_soft:
    type: fusionstage.nodes.ContainerComponent
    properties:
      package:
          image: {get_input: image}
        volumes:
          - name: mySecret
            mountPath: /etc/foo
ConfigMap
类型定义

ConfigMap用于保存应用的配置参数,这些配置参数不应该包含敏感信息。

一个ConfigMap会作为一个卷挂载到Pod上,容器中的进程可以从卷的挂载路径下的文件中读取配置信息。

  fusionstage.nodes.Volume:
    abstract: true
    derived_from: fusionstage.nodes.Root
    properties:
      name:
        description: Name of the volume 
        type: string
        required: true
        immutable: true
    capabilities:
      storage:
        type: fusionstage.capabilities.Attachment
 
  fusionstage.nodes.ConfigMapVolume:
    derived_from: fusionstage.nodes.Volume
    properties:
      name:
        description: Name of the referenced configmap
        type: string
        required: true
        immutable: true
      configMapSpec:
        description: Definition of the configMap
        type: fusionstage.datatypes.NameValuePair
        islist: true
        required: false
      createNew:
        description: Whether create a new ConfigMap
        type: boolean
        default: false
        immutable: true
      updatePolicy:
        description:  the policy of update ConfigMap,default value is Always update configMap
        type: string
        default: "Always"
        constrains:
             valid_values: ["Always", "Never"]
节点是否可升级

属性配置
表38-181 属性配置

属性

配置说明

是否可变更

name

卷的名称,必填项。

configMapSpec

ConfigMap的数据,包含多个数据项,每个数据项保存为一个文件放在卷的挂载路径下。

createNew

是否创建新的ConfigMap。

  • true:表示创建新的ConfigMap,如果系统存在同名的ConfigMap则报错。
  • false:表示根据名称绑定系统已有的ConfigMap,此时configMapSpec属性应为空,如果configMap不存在部署时会报错。

updatePolicy

设置ConfigMap更新策略。

关联关系

NA。

样例

使用ConfigMap保存配置信息样例如下:

ConfigMap中有多个数据项,每一个数据项保存为一个单独的文件存储在卷的挂载目录下,文件名为数据项的name的值,文件内容为数据项的value的值。

如下,卷的挂载路径为“/etc/config”,容器中的进程可以从“/etc/foo/special.level”文件以及“/etc/foo/special.type”文件中读取配置项的值。

node_templates:
  my_configmap:
    type: fusionstage.nodes.ConfigMapVolume
    properties:
      name: myConfigmap
      configMapSpec:
        - name: special.level
          value: very
        - name: special.type
          value: charm
      createNew: true

  my_app:
    type: fusionstage.nodes.StatelessApplication
    properties:
      type: container
    requirements:
      - package:
          node: my_soft
          relationship: fusionstage.relationships.PackageConsistsOf
      - volume:
          node: my_configmap
          relationship: fusionstage.relationships.AttachesTo

  my_soft:
    type: fusionstage.nodes.ContainerComponent
    properties:
      package:
          image: {get_input: image}
        volumes:
          - name: myConfigmap
            mountPath: /etc/config
服务
类型定义

服务分为两种类型:

  • 服务实例

    服务实例必须经过管理员的审批才能发布,对于这类服务,用户只能在blueprint文件中通过服务实例名引用一个系统中已发布的服务实例,不支持在部署stack过程中动态创建一个新的服务实例。

  • 免审批服务

    免审批服务的服务实例的发布不需要经过管理员的审批,因此,用户可以在blueprint文件中指定一个新的服务实例名,并且在部署stack过程中动态创建一个新的服务实例。

系统中已有的服务实例和免审批服务的服务目录是一直变化的,建议用户通过系统的设计器界面在线进行服务编排。如果需要手工编辑blueprint文件,则用户应联系系统管理员获取系统最新的服务实例和面审批服务的Tosca定义。

服务的Tosca定义如下:

fusionstage.nodes.Service:
    derived_from: fusionstage.nodes.Root
    properties:
      type:
        description: Service type, e.g mysql, elb and so on
        default: ""
        type: string
      plan:
        description: Service's ordering plan e.g basic, medium and large
        default: ""
        type: string
      serviceName:
        description: Service's name for dynamic create
        default: ""
        type: string
      desc:
        description: Create info for dynamic create
        default: "Info for create service instance"
        type: string
      instanceName:
        description: Service instance's name
        default: ""
        type: string
      parameters:
        description: Parameters used for service bindings, e.g [{"key":"key1","value":{"k1":"v1"}},{{"key":"key2","value":"value2"}]
        type: fusionstage.datatypes.KeyValuePair
        islist: true
        default: []
    capabilities:
      endpoint:
        type: fusionstage.capabilities.Endpoint.Service
    interfaces:
      Standard:
        type: fusionstage.interfaces.ServiceLifecycle
    requirements:
      - dependency:
          relationship: fusionstage.relationships.DependsOn
          node: fusionstage.nodes.Service

服务实例和免审批服务的Tosca定义形如:

  fusionstage.nodes.Service.FreeApproval.<ServiceName>:
    derived_from: fusionstage.nodes.Service


其中,“ServiceName”为免审批服务的服务名。这部分的Tosca定义是变化的,手工编辑blueprint文件的情况下,可以将这部分的tosca定义保存在设计包的extend目录下的一个文件中,然后在主blueprint文件中通过“imports”指令进行引用。

节点是否可升级

属性配置
表38-182 属性配置

属性

属性说明

type

服务类型,如mysql、elb等。

plan

服务套餐名称。

serviceName

服务的名称。

instanceName

服务实例的名称。

desc

服务实例的描述,对于动态创建的服务实例生效。

parameters

服务实例启动参数,JSON对象,根据不同的服务存在不同的启动参数。

关联关系
表38-183 关联关系

关系

关系说明

dependency

定义服务实例间的依赖关系,主要用于指定实例化的先后顺序。关联关系为fusionstage.relationships.DependsOn

样例
  • 绑定一个已有的服务实例
    mysql-service:
        type: fusionstage.nodes.Service
        properties:
          instanceName: {get_input: mysql_instance_name}
          parameters: 
            - key: UserName
              value: {get_input: user_name}
              
      frontend-app:
        type: fusionstage.nodes.StatelessApplication
        properties:
          type: container
          bindServices: 
            - serviceInstanceName: {get_input: mysql_instance_name}
              bindPath: {get_input: mysql_bind_path}
        requirements:
          - package:
              node: frontend-soft
              relationship: fusionstage.relationships.PackageConsistsOf
          - service:
              node: mysql-service
              relationship: fusionstage.relationships.BindsTo
     
      frontend-soft:
        type: fusionstage.nodes.ContainerComponent
        properties:
          package:
            image: {get_input: image_id}
            serviceSpec:
              type: NodePort
              ports:
                - port: 80
  • 动态创建服务实例
    tosca_definitions_version: fusionstage_tosca_version_2_1
    imports:
    - extend/customer-service.yaml
    node_templates:
      nginx-service:
        type: fusionstage.nodes.Service.FreeApproval.nginx
        properties:
          instanceName: {get_input: nginx_instance_name}
          serviceName: nginx
          plan: m1.medium
          desc: dynamic created
        requirements:
          - dependency:
              node: zookeeper-service
     
      zookeeper-service:
        type: fusionstage.nodes.Service.FreeApproval.zookeeper
        properties:
          instanceName: {get_input: zookeeper_instance_name}
          serviceName: zookeeper
          plan: m1.medium
          desc: dynamic created
     
      frontend-app:
        type: fusionstage.nodes.StatelessApplication
        properties:
          type: container
          bindServices: 
            - serviceInstanceName: {get_input: nginx_instance_name}
              bindPath: {get_input: nginx_bind_path}
        requirements:
          - package:
              node: frontend-soft
              relationship: fusionstage.relationships.PackageConsistsOf
          - service:
              node: nginx-service
              relationship: fusionstage.relationships.BindsTo
     
      frontend-soft:
        type: fusionstage.nodes.ContainerComponent
        properties:
          package:
            image: {get_input: image_id}

    customer-service.yaml文件的内容如下:

    tosca_definitions_version: fusionstage_tosca_version_2_1
    node_types:
      fusionstage.nodes.Service.FreeApproval.nginx:
        derived_from: fusionstage.nodes.Service
输出(高级功能)

输出是指模板实例化后的输出参数,可选。

字段和约束:

  • 名称:必须由英文字母、数字、横杠(-)、下滑(_)组成,以字母开头,且长度小于64
  • 描述:必须由英文字母、数字和英文符号组成,且长度小于255。允许的英文符号有:-~!@#$%^&*() |_+={}<>?,.;:`'"\/[]
  • 值/默认值:必须由英文字母、数字和英文符号组成,且长度小于1024。允许的英文符号有:-~!@#$%^&*() |_+={}<>?,.;:`'"\/[]

样例:

源代码:

outputs:
  hostip:
    value:
      get_attribute:
        - frontend-app
        - ips

已支持的输出参数(动态attribute):

说明:

以下的动态attribute属性,只有编排到了相关的资源才能获取得到,否则得到的信息必然为空。

  • 应用:
    • 应用的IP地址:get_attribute: [{app-name}, ips],获取pod运行的主机地址

    • 应用的服务端口信息(nodePort):get_attribute: [{app-name}, Service, ports, 0, nodePort]

    • 应用的访问路由(http):get_attribute: [{app-name}, Ingress,annotations,ingress.kubernetes.io/external-address]

    • 应用的访问路由(https):get_attribute: [{app-name}, Ingress,annotations,ingress.kubernetes.io/external-ssl-address]

  • 资源:

    端口的IP地址:get_attribute: [{port-name}, Port, fixed_ips, 0, ip_address]

    端口的IP对地址:get_attribute: [{port-name}, Port, allowed_address_pairs, 0, ip_address]

输入

输入是指实例化模板时的输入参数,可选。定义可以在模板的参数部分中设置的值,可以具有默认值也可以在运行时覆盖。

字段和约束:

  • 名称:必须由英文字母、数字、横杠(-)、下滑(_)组成,以字母开头,且长度小于64
  • 类型:支持string,integer,float,boolean,secret
  • 描述:必须由英文字母、数字和英文符号组成,且长度小于255。允许的英文符号有:-~!@#$%^&*() |_+={}<>?,.;:`'"\/[]
  • 值/默认值:必须由英文字母、数字和英文符号组成,且长度小于1024。允许的英文符号有:-~!@#$%^&*() |_+={}<>?,.;:`'"\/[]

源代码:

inputs:
  user:
    default: root
    type: string
  password:
    default: ''
    type: secret
外部节点(高级功能)
类型定义

外部节点是一个高级功能,支持堆栈引用其他堆栈中的应用。主要用于调试解决方案时,可以将已完成调试的部分应用提前部署好,提高开发调试效率。其类型定义如下:

 fusionstage.nodes.ExternalNode:
    description: Basic node type definition for external node
    derived_from: fusionstage.nodes.Root
    properties:
      externalID:
        description: ID of an existing stack
        type: string
        default: ""
      externalName:
        description: Name of an existing stack
        type: string
        default: ""
      externalNode:
        description: A node has been deployed already
        type: string
        default: ""
      deploy:
        description: Allow the external node to be deployed or not
        type: boolean
        default: true
        immutable: true
节点是否可升级

属性配置
说明:

当externalID和externalName都为空时,将直接从本堆栈中检查是否存在这样的node name的节点。如果不存在将报错。

表38-184 属性配置

属性

属性说明

externalID

外部已完成的stack的id

externalName

外部已部署的stack的名称,当external_id为空时可以根据external_name查询到真实的stack的id

externalNode

外部已部署的stack中的应用名称(设计包blueprint中定义的node name)。

必填项。

关联关系

NA。

样例

在Stack引用一个已有的服务:

node_templates:
  slb-service:
    type: fusionstage.nodes.ExternalNode
    properties:
      externalName: {get_input: slb_name}
      externalNode: {get_input: slb_node}
  use-appcomponent:
    type: fusionstage.nodes.StatelessApplication
    requirements:
      - dependency:
          node: slb-service
          relationship: fusionstage.relationships.ConnectsTo
网络策略
类型定义

网络策略用于配置应用间的访问策略,只有满足以下条件,网络策略的配置才有意义:

  • 本产品系统使用Canal网络。
  • 网络策略仅适用于容器应用,不适用于虚拟机应用,且不能使用主机网络。
  fusionstage.policies.NetworkPolicy:
    properties:
      target:
        type: fusionstage.datatypes.AppEnd
        description: network policy target
        required: true
      ingress:
        type: fusionstage.datatypes.IngressNetworkPolicy
        description: network policy allow source
        islist: true
        required: false
节点是否可升级

属性配置
表38-185 属性配置

属性

属性说明

target

网络策略作用的目标应用,详情请参见fusionstage.datatypes.AppEnd中的“类型定义”。

ingress

应用入口流量的访问策略,采用白名单的配置方式,只有在规则中列举的客户端才能访问target属性指定的应用,详情请参见fusionstage.datatypes.IngressNetworkPolicy中的“类型定义”

关联关系

NA。

样例

允许label包含“app=frontend”的应用访问label包含“app=oracle”的应用的6222端口:

db-access-rule:
  type:fusionstage.policies.NetworkPolicy
  properties:
    target:
      appLabels: 
          - key: app
            value: oracle
    ingress:
      - from:
          - appSource:
              appLabels:
                - key: app
                  value: frontend
        ports: 
          - protocol: TCP
            port: 6222		
Subnet
类型定义

子网, FusionSphere环境上支持subnet的查询,不支持创建、删除、条件过滤。不支持FusionCloud环境。

其定义类型如下:

fusionstage.nodes.Resource:
    abstract: true
    description: Basic node type definition for resource
    derived_from: fusionstage.nodes.Root

fusionstage.nodes.Subnet:
    derived_from: fusionstage.nodes.Resource
    properties:
      name:
        description: Specifies the subnet name.
        type: string
        required: true
        constrains:
          max_length: 24
          regex: (^$)|(^[a-z]([-a-z0-9]*[a-z0-9])?$)
      cidr:
        description: CIDR of the subnet.
        type: string
        required: true
        constrains:
          max_length: 18
          regex: (^$)|(^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}\/(\d|[1-2]\d|3[0-2])$)
      gateway:
        description: Gateway of the subnet
        type: ip
        required: true
      dhcpEnable:
        description: Enable DHCP or not, default value is true.
        type: boolean
        default: true
      dnsList:
        description: Specifies the IP address of DNS servers.
        default: []
        type: string
        islist: true
      availabilityZone :
        description: Identifies the availability zone (AZ) to which the subnet belongs.
        type: string
        default: ""
节点是否可升级

属性定义
表38-186 属性配置

属性

属性说明

name

指定子网名称,string类型,最长24个字符。

命名规则:(^$)|(^[a-z]([-a-z0-9]*[a-z0-9])?$)

cidr

子网的cidr网段。

gateway

子网网关。

dhcpEnable

是否启用DHCP,缺省值为true。

dnsList

DNS服务器的指定IP地址。

availabilityZone

标识子网所属的可用分区 (AZ)。

关联关系

N/A

样例

指定一个子网:

node_templates:
  subnet-1:
    type: fusionstage.nodes.Subnet
    properties:
      cidr: {get_input: cidr}
      gateway: {get_input: gateway}
      name: {get_input: netname}
Vpc
类型定义

虚拟私有云(Virtual Private Cloud,简称Vpc),是一套为实例构建的逻辑隔离的、由用户自主配置和管理的虚拟网络环境,旨在提升用户资源的安全性,简化用户的网络部署。

FusionSphere环境上支持Vpc的查询,不支持创建、删除、条件过滤。不支持FusionCloud环境。

其类型定义如下:

fusionstage.nodes.Vpc:
    description: vpc definition
    derived_from: fusionstage.nodes.Network
    properties:
      isExternal:
        type: boolean
        default: false
    requirements:
     - subnet:
         relationship: fusionstage.relationships.ConsistsOf
节点是否可升级

属性定义
表38-187 属性配置

属性

属性说明

isExternal

是否为外部的,缺省值为false。

关联关系

N/A

样例

无。

AffinityGroup
类型定义

节点关联的亲合组,允许您确保实例位于同一管理程序主机或其他主机上。FusionSphere环境支持AffinityGroup创建、删除、查询,不支持FusionCloud环境。

其类型定义如下:

fusionstage.nodes.Resource:
    abstract: true
    description: Basic node type definition for resource
    derived_from: fusionstage.nodes.Root

fusionstage.nodes.AffinityGroup:
    derived_from: fusionstage.nodes.Resource
    properties:
      name:
        description: affinity group name
        type: string
        required: false
        constrains:
          max_length: 24
          regex: (^$)|(^[a-z]([-a-z0-9]*[a-z0-9])?$)
      memberLimitPerGroup:
        description: member number for each affinity group, 0 means no limit
        type: integer
        required: true
        constrains:
          in_range: [0, 512]
      policies:
        description: affinity policies
        type: string
        islist: true
        required: true
节点是否可升级

属性定义
表38-188 属性配置

属性

属性说明

name

亲合组类型的元素名称,string类型,最长24个字符。

命名规则:(^$)|(^[a-z]([-a-z0-9]*[a-z0-9])?$)

memberLimitPerGroup

每个亲合组的成员数,0表示没有限制。

policies

亲合组的关联策略。

List类型,合法值为anti-affinity、affinity,缺省值为anti-affinity。

关联关系

N/A

样例
node_templates:
  gaussdb-nodes:
    type: fusionstage.nodes.DynamicNodePool
    properties:
      custom_name: ddm_gaussdb
      flavor:
        get_input: flavor_id
      image:
        get_input: os_image_id
      instances:
        get_input: instances
      isPublic: true
      networks:
      - id:
          get_input: network_id
      securityGroups:
      - get_input: security_group_id
      availabilityZone:
        get_input: zone      
    requirements:
    - affinityGroup:
        node: affinitygroup-3
        relationship: fusionstage.relationships.LinksTo
  affinitygroup-3:
    type: fusionstage.nodes.AffinityGroup
    properties:
      name: aff1 
      memberLimitPerGroup: 2 
      policies: 
      - get_input: policies
  processcomponent-2:
    type: fusionstage.nodes.ProcessComponent
    properties:
      package:
        url:
          get_input: package
  statelessapplication-1:
    type: fusionstage.nodes.StatelessApplication
    properties:
      exclusive: false
      instances:
        get_input: instance
      type: process
    requirements:
    - package:
        node: processcomponent-2
        relationship: fusionstage.relationships.PackageConsistsOf
SecurityGroupRule
类型定义

节点关联的安全组规则,其类型定义如下:

fusionstage.nodes.Resource:
    abstract: true
    description: Basic node type definition for resource
    derived_from: fusionstage.nodes.Root

fusionstage.nodes.SecurityGroupRule:
    derived_from: fusionstage.nodes.Resource
    properties:
      direction:
        description: ingress or egress
        type: string
        default: ingress
        constrains:
          valid_values:
            - ingress
            - egress
      ethertype:
        description: ethertype
        type: string
        default: IPv4
        constrains:
          valid_values:
            - IPv4
            - IPv6
      protocol:
        description: protocol for tcp/udp
        type: string
        default: "any"
        constrains:
          valid_values: ["tcp", "udp", "icmp", "any"]
      remoteIpPrefix:
        description: remote ip address
        type: string
        default: ""
      remoteSecurityGroup:
        description: id for remote security group
        type: string
        default: ""
      minPort:
        description: Specifies the start port number.
        type: integer
        required: false
        constrains:
          in_range: [0,65535]
      maxPort:
        description: Specifies the end port number.
        type: integer
        required: false
        constrains:
          in_range: [0,65535]
    requirements:
      - target:
          node: fusionstage.nodes.SecurityGroup
          relationship: fusionstage.relationships.ConnectsTo
节点是否可升级

属性定义
表38-189 属性配置

属性

属性说明

direction

应用安全组规则的方向。对于计算实例,入口安全组规则匹配该实例的传入(入口)流量,出口规则应用于传出实例的流量。有效值为ingress、egress,缺省值为ingress。

Ethertype

网络类型。有效值为IPv4、IPv6,缺省值为IPv4,并且cidr网段必须与ingress或egress匹配。

Protocol

与安全组规则匹配的协议。有效值为tcp、udp、icmp、any,缺省值为any。

RemoteIpPrefix

与此安全组规则关联的远程IP地址。

remoteSecurityGroup

远程安全组的ID,string类型。如果没有指定值,则该规则将使用该安全组作为远程安全组。

minPort

安全组规则匹配的范围内的最小端口号,有效值[0,65535]。如果协议是TCP或UDP,则此值必须小于或等于maxPort属性的值。如果协议为ICMP,则该值必须为ICMP类型。

maxPort

安全组规则匹配的范围内的最大端口号,有效值[0,65535]。minPort属性必须与maxPort属性保持一致。

关联关系

N/A

样例

无。

SecurityGroup
类型定义

安全组是应用于实例网络的IP过滤规则集主要被应用在节点纳管场景。FusionSphere和FusionCloud环境支持安全组查询,不支持创建、删除。

其类型定义如下:

fusionstage.nodes.Resource:
    abstract: true
    description: Basic node type definition for resource
    derived_from: fusionstage.nodes.Root

fusionstage.nodes.SecurityGroup:
    derived_from: fusionstage.nodes.Resource
    properties:
      name:
        description: security group name
        type: string
        required: false
      securityGroupRules:
        description: security group rules for sg
        islist: true
        required: false
        type: fusionstage.datatypes.SecurityGroupRule
    requirements:
      - rule:
          node: fusionstage.nodes.SecurityGroupRule
          relationship: fusionstage.relationships.ConsistsOf
节点是否可升级

属性定义
表38-190 属性配置

属性

属性说明

name

安全组名称,string类型。

securityGroupRules

安全组规则,详见SecurityGroupRule

关联关系

N/A

样例
node_templates:
  gaussdb-nodes:
    type: fusionstage.nodes.DynamicNodePool
    properties:
      custom_name: ddm_gaussdb
      flavor:
        get_input: flavor_id
      image:
        get_input: os_image_id
      instances:
        get_input: instances
      isPublic: true
      networks:
      - id:
          get_input: network_id
      securityGroups:
      - get_input: sgname1       
      availabilityZone:
        get_input: zone      
    requirements:
    - securityGroup:
        node: securitygroup-1
        relationship: fusionstage.relationships.LinksTo

  securitygroup-1:
    type: fusionstage.nodes.SecurityGroup
    properties:
      name: security 
      securityGroupRules:
      - direction: 
          get_input: ingress    
  processcomponent-2:
    type: fusionstage.nodes.ProcessComponent
    properties:
      package:
        url:
          get_input: package
  statelessapplication-1:
    type: fusionstage.nodes.StatelessApplication
    properties:
      exclusive: false
      instances:
        get_input: instance
      type: process
    requirements:
    - package:
        node: processcomponent-2
        relationship: fusionstage.relationships.PackageConsistsOf
HeterogeneousResource
类型定义

部署stack时,堆栈中的应用添加对应数量的异构资源。其类型定义如下:

fusionstage.nodes.HeterogeneousResource:
    derived_from: fusionstage.nodes.Root
    properties:
      type:
        description: heterogeneous resource name
        type: string
      model:
        description: heterogeneous types
        type: string
    capabilities:
          storage:
            type: fusionstage.capabilities.Attachment
节点是否可升级

属性定义
表38-191 属性配置

属性

属性说明

type

异构资源名称,string类型,目前有效值为:gpu。

model

异构资源的型号,string类型,例如:Nvidia-Tesla-P4。

关联关系

N/A

样例
gpuresource:
  type: fusionstage.nodes.HeterogeneousResource
  properties: 
    model: Nvidia-Tesla-P4
    type: gpu
NFS共享存储卷

NFS(Network File System,简称NFS),它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。

NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利。

类型定义

本地卷使用宿主机上的一个目录或者文件作为卷挂载到Pod上,属于一种普通卷,只有同一个节点上的容器才可以访问。

  fusionstage.nodes.Volume: 
    abstract: true 
    derived_from: fusionstage.nodes.Root 
    properties: 
      name: 
        description: Name of the volume  
        type: string 
        required: true 
        immutable: true 
    capabilities: 
      storage: 
        type: fusionstage.capabilities.Attachment 

  fusionstage.nodes.NFSVolume:
    derived_from: fusionstage.nodes.Volume
    properties:
      path:
        description: Path is the exported NFS share
        type: string
        required: true
      server:
        description: Server is the hostname or IP address of the NFS server
        type: string
        required: true
      readOnly:
        description: ReadOnly here will force the NFS export to be mounted with read-only permissions
        type: boolean
        required: false
属性配置
表38-192 属性说明

属性

属性说明

name

卷的名称,必填项。

path

NFS服务器上的一个共享目录,该目录作为卷挂载到Pod。

server

NFS服务器的IP。

readOnly

卷是否通过只读方式挂载,默认为false。

关系配置

N/A

样例

通过NFS服务器共享存储卷:

node_templates:
  nfsvolume:
    type: fusionstage.nodes.NFSVolume
    properties:
      path:
        get_input: nfs-path
      server:
        get_input: nfs-server
      name: {"get_input":"nfs-volume-name"}
  volume-app:
    type: fusionstage.nodes.StatelessApplication
    properties:
      instances:
        get_input: instances
      type: container
    requirements:
    - package:
        node: volume-container
        relationship: fusionstage.relationships.PackageConsistsOf
    - volume:
        node: nfsvolume
        relationship: fusionstage.relationships.AttachesTo
  volume-container:
    type: fusionstage.nodes.ContainerComponent
    properties:
      package:
        image: {"get_input":"images"}
        imagePullPolicy: Always
        volumes:
        - mountPath: {"get_input":"mountpath"}
          name: {"get_input":"nfs-volume-name"}

应用编排支持的函数

函数关键字

以下关键字可用于TOSCA函数中,具体含义见表38-193

说明:

部分关键字只能用于特定的上下文环境中。

表38-193 关键字列表

关键字

合法的上下文

描述

SELF

Node Template或者Relationship Template

代表函数所在的Node Template或Relationship Template。

SOURCE

Relationship Template

代表函数所在的Relationship Template的源。

TARGE

Relationship Template

代表函数所在的Relationship Template的目标。

get_input函数

get_input函数用于获取在blueprint文件的inputs章节中声明的入参的值。

语法
get_input: <input_property_name>
参数说明
表38-194 参数说明

参数

是否必填

类型

描述

<input_property_name>

Y

string

在blueprint文件的inputs章节中定义的入参的名称。

样例
inputs:
  image_id:
    type: string
node_templates:
  containercomponent-2:
    type: fusionstage.nodes.ContainerComponent
    properties:
      package:
        image:
          get_input: image_id   # 获取入参image_id的值
  statelessapplication-1:
    type: fusionstage.nodes.StatelessApplication
    properties:
      name: app1
      type: container
    requirements:
    - package:
        node: containercomponent-2
        relationship: fusionstage.relationships.PackageConsistsOf
说明:

1. 针对需要进行伸缩操作的节点,其实例数需要通过get_input函数获取,同时遵循以下规则:

  • 可伸缩的节点(如无状态应用,动态资源)和不可伸缩的节点(如有状态应用,代理等)实例数不要共用一个输入参数,否则会导致共用该参数的所有节点都不能伸缩。
  • 可伸缩的节点的实例数也建议不要共用输入参数,否则除非指定所有该输入参数关联的节点伸缩至同一个数值,其他伸缩请求都会被拒绝。

2. 建议节点的属性不要共用输入参数,除非你明确了解和接受修改该输入参数带来的联动影响。

get_property函数

get_property函数用于获取在blueprint文件中定义的实体(Node Template)的属性的值。

语法
get_property: [ <modelable_entity_name>, <property_name>, <nested_property_name_or_index_1>, ...,<nested_property_name_or_index_n> ]
参数说明
表38-195 参数说明

参数

是否必填

类型

描述

<modelable entity name> | SELF | SOURCE | TARGET

Y

string

在blueprint文件中定义的实体(Node Template)的名称。get_property函数将返回该实体中的属性的值。

<property_name>

Y

string

实体的属性的名称。

<nested_property_name_or_index_*>

N

string | integer

如果实体的属性是一个复杂结构,则可以通过制定子属性名的方式获取内层属性的值。

如果属性是一个list类型,则需要指定index获取list中特定位置的实体的属性的值。

样例
node_templates:
  mysql_database:
    type: fusionstage.nodes.Service
    properties:
      instanceName: mysqlInstance1
      serviceName: mysql
      plan: m1.medium

  wordpress:
    type: fusionstage.nodes.StatelessApplication
    properties:
      name: wordpress
      type: container
      bindServices: 
        - serviceInstanceName: { get_property: [ mysql_database, instanceName ] }
          bindPath: /data/mysql
    requirements:
      - service:   
          node: mysql_database
get_attribute函数

get_attribute函数用于获取blueprint实例化之后的实体模型的动态属性的值。

语法
get_attribute: [ <modelable_entity_name>, <property_name>, <nested_property_name_or_index_1>, ...,<nested_property_name_or_index_n> ]
参数说明
表38-196 参数说明

参数

是否必填

类型

描述

<modelable entity name> | SELF | SOURCE | TARGET

Y

string

在blueprint文件中定义的实体(Node Template)的名称。get_attribute函数将返回该实体中的属性的值。

<property_name>

Y

string

实体的属性的名称。

<nested_property_name_or_index_*>

N

string | integer

如果实体的属性是一个复杂结构,则可以通过制定子属性名的方式获取内层属性的值。

如果属性是一个list类型,则需要指定index获取list中特定位置的实体的属性的值。

样例
node_templates:
  adpapp:
    type: hwpaas.nodes.Application
    properties:
      # omitted here

outputs:
  adp-ip:
    description: adp ip information
    value: { get_attribute: [ adpapp, ips ] }
说明:

在outputs中使用get_attribute获取动态属性的值,因为要获取实时值,系统在每次获取时都需要进行动态刷新,这可能会耗费一些时间,如果针对时间敏感,请根据实际情况谨慎配置outputs中get_attribute的数量。

concat函数

concat函数用于将多个字符串连接成一个字符串。

语法
concat: [<string_value_expressions_*> ]
参数说明
表38-197 参数说明

参数

是否必填

类型

描述

<string_value_expressions_*>

Y

list of string

用于连接成单个字符串的string数组。

说明:

concat不支持包含get_attribute函数,如果存在此类定义,处理时get_attribute将作为普通字符串。

样例
properties:
    value: { concat: [ 'http://',
                       get_input: address,
                       ':',
                       get_input: port ] }

concat函数可用于将integer类型的值转换成string类型。举例来说,应用的环境变量的值必须是字符串类型,如果环境变量需要引用一个整形的值,则可以使用concat函数完成类型转换,如下:

inputs:
  global_cbs_cbpapp_number:
    default: 1
    type: integer

node_templates:
  cbpapp:
    type: fusionstage.nodes.StatelessApplication
    properties:
      instances: { get_input: global_cbs_cbpapp_number }
    requirements:
      - package:
          relationship: hwpaas.relationships.PackageConsistsOf
          node: swcomponent-4

  swcomponent-4:
    type: fusionstage.nodes.ProcessComponent
    properties:
      package:
        name:  ylltest_package
        version: V1
        env:
          - name: swnetype
            value: swcbpapp
          - name: cbs_cbpapp_number
            value: { concat: [ get_input: global_cbs_cbpapp_number ] }  # 需要进行类型转换,将integer类型转换成string类型

Tosca模型定义参考

fusionstage.nodes.Root
类型定义

fusionstage.node.Root是所有节点类型的根,其类型定义如下:

  fusionstage.nodes.Root:
    abstract: true
    interfaces:
      Standard:
        type: fusionstage.interfaces.NodeLifecycle
    capabilities: {}
    requirements: []
字段说明
表38-198 字段说明

字段

含义

abstract

true

抽象节点类型,不能用于定义node template。

interfaces

NA

类型的生命周期管理接口的定义。

|--Standard

NA

生命周期管理接口的名称。

Standard表示标准的生命周期管理接口。

| |--type

fusionstage.interfaces.NodeLifecycle

生命周期管理接口的类型。

capabilities

{}

fusionstage.node.Root是一个抽象类型,不提供能力。

requirements

{}

fusionstage.node.Root是一个抽象类型,没有依赖。

fusionstage.nodes.Resource
类型定义

fusionstage.nodes.Resource是所有节点类型的根,其类型定义如下:

  fusionstage.nodes.Resource:
    abstract: true
    description: Basic node type definition for resource
    derived_from: fusionstage.nodes.Root
字段说明
表38-199 字段说明

字段

含义

abstract

true

抽象节点类型,不能用于定义node template。

description

NA

类型的描述信息。

derived_from

fusionstage.nodes.Root

父类型为fusionstage.nodes.Root

fusionstage.nodes.Network
类型定义

fusionstage.nodes.Network是Vpc节点类型的根,其类型定义如下:

fusionstage.nodes.Network:
    derived_from: fusionstage.nodes.Resource
    properties:
      name:
        type: string
        description: resource name
        default: ''
        constrains:
          max_length: 24
          regex: (^$)|(^[a-z]([-a-z0-9]*[a-z0-9])?$)
      cidr:
        description: cidr for network, all subnets in network should in this cidr
        type: string
        default: "192.168.0.0/16"
    capabilities:
      network:
        type: fusionstage.capabilities.Linkable
字段说明
表38-200 字段说明

字段

含义

derived_from

fusionstage.nodes.Resource

父类型为fusionstage.nodes.Resource

properties

N/A

支持的属性列表。

|-- name

N/A

Network的名称,string类型,最长24个字符。

命名规则:(^$)|(^[a-z]([-a-z0-9]*[a-z0-9])?$)

|-- cidr

N/A

网络的cidr网段,所有的网络都必须在此网段内,缺省值为:"192.168.0.0/16"。

fusionstage.relationships.Root
类型定义

fusionstage.relationships.Root是所有关系类型的根,其类型定义如下:

  fusionstage.relationships.Root:
    properties:
      connectionType:
        default: all_to_all
字段说明
表38-201 字段说明

字段

含义

properties

NA

支持的属性列表。

|--connectionType

可选属性,默认值为all_to_all。

连接类型。

fusionstage.relationships.DependsOn
类型定义

fusionstage.relationships.DependsOn表示节点间的依赖关系,实例化过程中,被依赖的节点会先创建。其类型定义如下:

  fusionstage.relationships.DependsOn:
    derived_from: fusionstage.relationships.Root
字段说明

NA。

fusionstage.relationships.ConsistsOf
类型定义

fusionstage.relationships.ConsistsOf表示节点间的组合关系,其类型定义如下:

  fusionstage.relationships.ConsistsOf:
    derived_from: fusionstage.relationships.DependsOn
字段说明

NA。

fusionstage.relationships.HostedOn
类型定义

fusionstage.relationships.HostedOn只能用于Application与Resource间,表示应用运行在资源上,其类型定义如下:

  fusionstage.relationships.HostedOn:
    derived_from: fusionstage.relationships.DependsOn
字段说明

NA。

fusionstage.relationships.ConnectsTo
类型定义

fusionstage.relationships.ConnectsTo只能用于Application与Application之间,表示调用或连接关系,其类型定义如下:

  fusionstage.relationships.ConnectsTo:
    derived_from: fusionstage.relationships.DependsOn
字段说明

NA。

fusionstage.relationships.AttachesTo
类型定义

fusionstage.relationships.AttachesTo只能用于Storage与Compute之间,表示挂载关系,其类型定义如下:

  fusionstage.relationships.AttachesTo:
    derived_from: fusionstage.relationships.DependsOn
字段说明

NA。

fusionstage.relationships.BindsTo
类型定义

fusionstage.relationships.BindsTo只能用于Application与Service之间,表示应用和服务实例的绑定关系,其类型定义如下:

 fusionstage.relationships.BindsTo:
    derived_from: fusionstage.relationships.DependsOn
字段说明

NA。

fusionstage.relationships.PackageConsistsOf
类型定义

fusionstage.relationships.PackageConsistsOf只能用于Application与SoftwareComponent间,表示应用包含哪些组件,其类型定义如下:

  fusionstage.relationships.PackageConsistsOf:
    derived_from: fusionstage.relationships.DependsOn
字段说明

NA。

fusionstage.relationships.LinksTo
类型定义

fusionstage.relationships.LinksTo只能用于Application与Application之间,表示连接关系,其类型定义如下:

  fusionstage.relationships.LinksTo:
    derived_from: fusionstage.relationships.DependsOn
字段说明

NA。

fusionstage.relationships.BindsToPort
类型定义

fusionstage.relationships.BindsToPort用于表示虚拟机和端口的绑定关系,其类型定义如下:

  fusionstage.relationships.BindsToPort:
    derived_from: fusionstage.relationships.DependsOn
字段说明

NA。

fusionstage.relationships.PortDependsOn
类型定义

fusionstage.relationships.PortDependsOn的类型定义如下:

  fusionstage.relationships.PortDependsOn:
    derived_from: fusionstage.relationships.DependsOn
字段说明

NA。

fusionstage.relationships.ChartDependsOn
类型定义

fusionstage.relationships.ChartDependsOn的类型定义如下:

  fusionstage.relationships.ChartDependsOn:
    derived_from: fusionstage.relationships.Root
字段说明

NA。

fusionstage.interfaces.Root
类型定义

fusionstage.interfaces.Root是所有生命周期管理接口类型(后面简称接口类型)的根,其类型定义如下:

  fusionstage.interfaces.Root:
    description: The base interface that all the other interfaces derive from
    actions: {}
    plans: {}
字段说明

NA。

fusionstage.interfaces.NodeLifecycle
类型定义

fusionstage.interfaces.NodeLifecycle是所有节点的接口类型的父类,其类型定义如下:

  fusionstage.interfaces.NodeLifecycle:
    derived_from: fusionstage.interfaces.Root
字段说明

NA。

fusionstage.interfaces.RelationshipLifecycle
类型定义

fusionstage.interfaces.RelationshipLifecycle是所有关系的接口类型的父类,其类型定义如下:

  fusionstage.interfaces.RelationshipLifecycle:
    derived_from: fusionstage.interfaces.Root
字段说明

NA。

fusionstage.interfaces.ProcessLifecycle
类型定义

fusionstage.interfaces.ProcessLifecycle是VM/PM类应用的接口类型,其类型定义如下:

  fusionstage.interfaces.ProcessLifecycle:
    description: The lifecycle definition for process/VM application
    derived_from: fusionstage.interfaces.NodeLifecycle
    actions:
      create:
        command: "[ ! -s scripts/create.sh ] || sh scripts/create.sh"
        shell: ""
        fail-command: ""
      configure:
        command: "[ ! -s scripts/configure.sh ] || sh scripts/configure.sh"
        shell: ""
        fail-command: ""
      start:
        command: "[ ! -s scripts/start.sh ] || sh scripts/start.sh"
        shell: ""
        fail-command: ""
      postStart:
        command: "[ ! -s scripts/poststart.sh ] || sh scripts/poststart.sh"
        shell: ""
        fail-command: ""
      preStop:
        command: "[ ! -s scripts/prestop.sh ] || sh scripts/prestop.sh"
        shell: ""
        fail-command: ""
      stop:
        command: "[ ! -s scripts/stop.sh ] || sh scripts/stop.sh"
        shell: ""
        fail-command: ""
      delete:
        command: "[ ! -s scripts/delete.sh ] || sh scripts/delete.sh"
        shell: ""
        fail-command: ""
      restart:
        command: "[ ! -s scripts/restart.sh ] || sh scripts/restart.sh"
        shell: ""
        fail-command: ""
      rollback:
        command: "[ ! -s scripts/rollback.sh ] || sh scripts/rollback.sh"
        shell: ""
        fail-command: ""
      reconfigure:
        command: "[ ! -s scripts/reconfigure.sh ] || sh scripts/reconfigure.sh"
        shell: ""
        fail-command: ""
      active:
        command: "[ ! -s scripts/active.sh ] || sh scripts/active.sh"
        shell: ""
        fail-command: ""
      standby:
        command: "[ ! -s scripts/standby.sh ] || sh scripts/standby.sh"
        shell: ""
        fail-command: ""
      scaleIn:
        command: "[ ! -s scripts/scalein.sh ] || sh scripts/scalein.sh"
        shell: ""
        fail-command: ""
      scaleOut:
        command: "[ ! -s scripts/scaleout.sh ] || sh scripts/scaleout.sh"
        shell: ""
        fail-command: ""
      update:
        command: "[ ! -s scripts/update.sh ] || sh scripts/update.sh"
        shell: ""
        fail-command: ""
    plans:
      install:
        actions: [create]
        fail-actions: []
      configure:
        actions: [configure]
        fail-actions: []
      start:
        actions: [start]
        fail-actions: []
      postStart:
        actions: [postStart]
        fail-actions: []
      preStop:
        actions: [preStop]
        fail-actions: []
      stop:
        actions: [stop]
        fail-actions: []
      uninstall:
        actions: [delete]
        fail-actions: []
      reconfigure:
        actions: [reconfigure]
        fail-actions: []
      restart:
        actions: [restart]
        fail-actions: []
      scaleIn:
        actions: [scaleIn]
        fail-actions: []
      scaleOut:
        actions: [scaleOut]
        fail-actions: []
      standby:
        actions: [standby]
        fail-actions: []
      active:
        actions: [active]
        fail-actions: []
      update:
        actions: [update]
        fail-actions: []
      rollback:
        actions: [rollback]
        fail-actions: []
字段说明
表38-202 字段说明

字段

含义

description

NA。

类型的描述信息。

derived_from

fusionstage.interfaces.NodeLifecycle

fusionstage.interfaces.NodeLifecycle继承。

actions

NA

类型支持的Action列表。

|--<ActionName>

NA

Action的名称。

| |--command

NA

Action对应的脚本。

| |--shell

NA

执行command的shell。

| |--fail-command

NA

command执行失败后需要执行的清理命令。

plans

NA

类型的生命周期管理的流程编排。

|--<PlanName>

NA

Plan的名称。

| |--actions

NA

流程需要执行的Action列表。

| |--fail-actions

NA

流程执行失败需要回滚时执行的Action列表。

|--install

NA

部署流程。

执行的action列表为:

[create]

|--configure

NA

配置流程。

执行的action列表为:

[configure]

|--start

NA

启动流程。

执行的action列表为:

[start]

|--postStart

NA

启动后流程。

执行的action列表为:

[postStart]

|--preStop

NA

停止前流程。

执行的action列表为:

[preStop]

|--stop

NA

停止流程。

执行的action列表为:

[stop]

|--uninstall

NA

卸载流程。

执行的action列表为:

[delete]

|--reconfigure

NA

重配置流程。

执行的action列表为:

[reconfigure]

|--restart

NA

重启流程。

执行的action列表为:

[restart]

|--scaleIn

NA

收缩流程。

执行的action列表为:

[scaleIn]

|--scaleOut

NA

扩展流程。

执行的action列表为:

[scaleOut]

|--standby

NA

去激活流程。

执行的action列表为:

[standby]

|--active

NA

激活流程。

执行的action列表为:

[active]

|--update

NA

升级流程。

执行的action列表为:

[update]

|--rollback

NA

回滚流程。

执行的action列表为:

[rollback]

fusionstage.interfaces.ServiceLifecycle
类型定义

fusionstage.interfaces.ServiceLifecycle是服务的接口类型,其类型定义如下:

  fusionstage.interfaces.ResourceLifecycle:
    derived_from: fusionstage.interfaces.NodeLifecycle
    actions: {}
    plans:
      install: {}
      start: {}
      stop: {}
      upgrade: {}
      uninstall: {}
字段说明
表38-203 字段说明

字段

含义

description

NA

类型的描述信息。

derived_from

fusionstage.interfaces.NodeLifecycle

父类型为fusionstage.interfaces.NodeLifecycle

actions

{}

类型支持的Action列表。

服务的生命周期管理由ServiceBroker控制,此处无须定义。

plans

{}

类型的生命周期管理的流程定义。

服务的生命周期管理由ServiceBroker控制,此处无须定义。

fusionstage.interfaces.ResourceLifecycle
类型定义

fusionstage.interfaces.ResourceLifecycle是资源的接口类型,其类型定义如下:

  fusionstage.interfaces.ResourceLifecycle:
    derived_from: fusionstage.interfaces.NodeLifecycle
    actions: {}
    plans:
      install: {}
      start: {}
      stop: {}
      upgrade: {}
      uninstall: {}
字段说明
表38-204 字段说明

字段

含义

description

NA

类型的描述信息。

derived_from

fusionstage.interfaces.NodeLifecycle

父类型为fusionstage.interfaces.NodeLifecycle

actions

{}

类型支持的Action列表。

资源的生命周期管理由IaaS完成,此处无须定义。

plans

{}

类型的生命周期管理的流程定义。

资源的生命周期管理由IaaS完成,此处无须定义。

fusionstage.interfaces.ContainerLifecycle

fusionstage.interfaces.ContainerLifecycle是容器应用的接口类型,其类型定义如下:

  fusionstage.interfaces.ContainerLifecycle:
    derived_from: fusionstage.interfaces.NodeLifecycle
    actions:
      poststart:
        command: ''
        fail-command: ''
      prestop:
        command: ''
        fail-command: ''
    plans:
      poststart:
        actions: []
        fail-actions: []
      prestop:
        actions: []
        fail-actions: []
字段说明
表38-205 字段说明

字段

含义

description

NA。

类型的描述信息。

derived_from

fusionstage.interfaces.NodeLifecycle

fusionstage.interfaces.NodeLifecycle继承。

actions

NA

类型支持的Action列表。

|--<ActionName>

NA

Action的名称。

| |--command

NA

Action对应的脚本。

| |--fail-command

NA

command执行失败后需要执行的清理命令。

plans

NA

类型的生命周期管理的流程编排。

|--<PlanName>

NA

Plan的名称。

| |--actions

NA

流程需要执行的Action列表。

| |--fail-actions

NA

流程执行失败需要回滚时执行的Action列表。

|--poststart

NA

应用启动后要执行的action列表。

|--prestop

NA

应用停止前要执行的action列表。

fusionstage.datatypes.Root
类型定义

fusionstage.datatypes.Root是所有数据类型的根,其类型定义如下:

  fusionstage.datatypes.Root:
    description: The root data type that all the other data types derive from
字段说明
表38-206 字段说明

字段

含义

description

NA

类型的描述信息。

fusionstage.datatypes.AuthInfo
类型定义
fusionstage.datatypes.AuthInfo:
    derived_from: fusionstage.datatypes.Root
    description: AuthInfo include user password keypair
    properties:
      user:
        type: string
        default: ""
        description: User name.
      password:
        type: secret
        default: ""
        description: User password.
      keypair:
        type: secret
        default: ""
        description: Key pair for login. 
字段说明
表38-207 字段说明

字段

含义

description

NA

类型的描述信息。

derived_from

fusionstage.datatypes.Root

父类型为fusionstage.datatypes.Root

properties

NA

类型支持的属性列表。

|-- user

NA

认证的用户名。

string类型。

|-- password

NA

认证的密码。

secret类型。

|-- keypair

NA

认证的私有密钥。

secret类型。

fusionstage.datatypes.SecretDef
类型定义
fusionstage.datatypes.SecretDef:
    description: Secret definition to hold sensitive information, such as password
    properties:
      name:
        type: string
        default: ""
      value:
        type: secret
        default: ""
字段说明
表38-208 字段说明

字段

含义

description

NA

类型的描述信息。

properties

NA

类型支持的属性列表。

|-- name

NA

敏感信息的名称。

string类型。

|-- value

NA

敏感信息的值。

secret类型。

fusionstage.datatypes.Certification
类型定义
 fusionstage.datatypes.Certification:
    properties:
      path:
        type: string
        default: "/var/paas/srv/kubernetes"
      secret:
        type: string
        required: false
      defaultMode:
        type: integer
        required: false
字段说明
表38-209 字段说明

字段

含义

description

NA

类型的描述信息。

properties

NA

类型支持的属性列表。

|-- path

NA

证书的存放路径。

string类型。

说明:

如果用户指定path为空串或不指定,则对于容器应用不进行挂载,对于虚机应用挂载路径默认为/var/lib/kubelet/pods/[poduid]/volumes/kubernetes.io~secret/。

|-- secret

NA

证书内容。

string类型。

|-- defaultMode

NA

证书权限,可以指定作为卷挂载后的文件权限,取值须符合linux文件权限的取值,并且以十进制表示。比如0400权限,需使用256来表示。

fusionstage.datatypes.ResourceSelector
类型定义
fusionstage.datatypes.ResourceSelector:
    properties:
      labels:
        type: fusionstage.datatypes.KeyValuePair
        islist: true
        default: []
      affinities:
        type: fusionstage.datatypes.Affinities
        default: {}
字段说明
表38-210 字段说明

字段名称

含义

properties

NA

类型支持的属性列表。

|-- labels

NA

根据标签选择资源,用户可以定义多个标签,多个标签之间是“与”的关系,如果资源上都打了这些标签,则表示该资源匹配条件。

一个标签是一个key-value键值对,详情请参照fusionstage.datatypes.KeyValuePair中的“类型定义”。

|-- affinities

NA

根据资源的亲和性选择资源。labels条件和affinities是“与”的关系,只有两个条件都满足的资源,才会被选中。详情请参照fusionstage.datatypes.Affinities中的“类型定义”。

fusionstage.datatypes.Affinities
类型定义
fusionstage.datatypes.Affinities:
    description: To constrain which nodes a pod to schedule on based pods that are already running on the node
    properties:
      hosts:
        type: fusionstage.datatypes.LabelSelector
        default: []
        islist: true
      antiself:
        type: boolean
        default: true
字段说明
表38-211 字段说明

字段名称

含义

description

NA

类型的说明。

properties

NA

类型支持的属性列表。

|-- hosts

NA

根据标签条件选择资源,用户可以定义多个标签条件,多个标签条件之间是“与”的关系,如果资源上的标签都满足这些标签条件,则表示该资源匹配条件。

详情请参照fusionstage.datatypes.LabelSelector中的“类型定义”。

|-- antiself

NA

设置应用实例间的亲和性,默认为true。

  • true:表示应用实例需要部署在不同的节点上。
  • false:表示应用实例可以部署在系统的节点上,由本产品根据实际情况进行资源调度。

boolean类型。

fusionstage.datatypes.LabelSelector
类型定义
fusionstage.datatypes.LabelSelector:
    description: To constrain which nodes your pod is eligible to schedule on, based on labels on the node
    properties:
      key:
        type: string
      values:
        default: []
        type: string
        islist: true
      op:
        type: string
        default: "In"
        constrains:
          valid_values: ["In", "NotIn", "Exists", "DoesNotExist", "Gt", "Lt"]
字段说明
表38-212 字段说明

字段名称

含义

description

NA

类型的说明。

properties

NA

类型支持的属性列表。

|-- key

NA

标签的名称。

string类型。

|-- values

NA

标签的值,支持配置多个值,值用符号[]括起来。

string类型。

|-- op

NA

标签的值的比较操作符,支持:

  • In:标签的值在values范围内。
  • NotIn:标签存在,但值不再values范围呢。
  • Exists:标签存在,可以为任意值。
  • DoesNotExist:标签不存在。
  • Gt:标签的值大于values中指定的值,这种情况下,values只能指定一个值,且为数字类型。
  • Lt:标签的值小于values中指定的值,这种情况下,values只能指定一个值,且为数字类型。
fusionstage.datatypes.KeyValuePair
类型定义
fusionstage.datatypes.KeyValuePair:
    properties:
      key:
        type: string
      value:
        type: string
字段说明
表38-213 字段说明

字段名称

含义

description

NA

类型的说明。

properties

NA

类型支持的属性列表。

|-- key

NA

键的名称。

string类型。

|-- value

NA

键对应的值。

string类型。

fusionstage.datatypes.NameValuePair
类型定义
fusionstage.datatypes.NameValuePair:
    description: Definition in key-value pairs
    properties:
      name:
        type: string
        default: ""
      value:
        type: string
        default: ""
字段说明
表38-214 字段说明

字段名称

含义

description

NA

类型的说明。

properties

NA

类型支持的属性列表。

|-- name

NA

键的名称。

string类型。

|-- value

NA

键对应的值。

string类型。

fusionstage.datatypes.ServiceBind
类型定义
fusionstage.datatypes.ServiceBind:
    properties:
      bindPath:
        type: string
      serviceInstanceName:
        type: string
      parameters:
        type: fusionstage.datatypes.KeyValuePair
        islist: true
        default: []

字段说明
表38-215 字段说明

字段名称

含义

description

NA

类型的说明。

properties

NA

类型支持的属性列表。

|-- bindPath

NA

服务的绑定路径。

string类型。

|-- serviceInstanceName

NA

服务实例名。

string类型。

|-- parameters

NA

服务实例的参数,详情请参照fusionstage.datatypes.KeyValuePair中的“类型定义”。

说明:

当应用绑定已有的服务实例时,portal页面“服务 > 服务实例”的服务凭证的参数以此处配置参数为准。

不会取用服务中的服务模型中定义的parameter参数值。

fusionstage.datatypes.UpgradeStrategy
类型定义
fusionstage.datatypes.UpgradeStrategy:
    properties:
      strategyType:
        type: string
        default: "RollingUpdate"
        constrains:
            valid_values: ["RollingUpdate", "InPlaceRollingUpdate"]
      maxUnavailable:
        type: string
        default: "1"
      maxSurge:
        type: string
        default: "1"
      deploymentRollback:
        type: boolean
        required: false
        description: >
          For process application with InplaceRollingUpdate strategy only.
          Figure out whether to call rollback script to do rollback lifecycle.
          If not specified, will call update script to do rollback lifecycle generally.
字段说明
表38-216 字段说明

字段名称

含义

description

NA

类型的说明。

properties

NA

类型支持的属性列表。

|-- strategyType

NA

升级的策略,合法值包括:

  • RollingUpdate:滚动升级,创建新的pod取代原来的pod。
  • InPlaceRollingUpdate:原地滚动升级,pod保留在原地,例如修改容器的镜像,但是不杀死容器里面的pod。

|-- maxUnavailable

NA

升级过程中最多有多少个pod处于无法提供服务的状态。

string类型。

|-- maxSurge

NA

升级过程中最多可以比设定的数目多出来的Pod数量。例如,“maxSurge: 1,replicas: 5”,表示会先创建一个新的pod后再删掉一个旧的pod,整个升级过程中最多会有5+1个pod。

string类型。

|-- deploymentRollback

N/A

原地滚动升级的无状态虚机应用专属。回退目标版本应用的此参数值,控制其是否采取“执行rollback生命周期对应脚本”的方式回退。若不指定或指定为false,则采取“执行update生命周期对应脚本”升级到旧版本的方式。

fusionstage.datatypes.Package
类型定义
fusionstage.datatypes.Package:
    properties:
      probeSpec:
        description: Defines probe specification for liveness and readiness detection
        type: fusionstage.datatypes.ProbeSpec
      ingressSpec:
        description: Defines ingress specification
        type: fusionstage.datatypes.IngressSpec
      resourceSpec:
        description: Defines resource specification
        type: fusionstage.datatypes.ResourceSpec
      serviceSpec:
        description: Defines service specification
        type: fusionstage.datatypes.ServiceSpec
        required: false
      env:
        type: fusionstage.datatypes.NameValuePair
        islist: true
        default: []
      secrets:
        default: []
        islist: true
        type: fusionstage.datatypes.SecretDef
      ports:
        type: fusionstage.datatypes.PackagePortDef
        islist: true
        default: []
      volumes:
        type: fusionstage.datatypes.VolumeMount
        islist: true
        default: []
      packagePullSecret:
        type: secret
        default: ""
字段说明
表38-217 字段说明

字段名称

含义

description

NA

类型的说明。

properties

NA

类型支持的属性列表。

|-- probeSpec

NA

Pod健康检查的探针。详细配置说明请参考fusionstage.datatypes.ProbeSpec类型定义。

|-- ingressSpec

NA

将内网的访问地址暴露到外网的路由规则设置,详细配置说明请参考fusionstage.datatypes.IngressSpec类型定义。

|-- resourceSpec

NA

资源配额配置,详细配置说明请参考fusionstage.datatypes.ResourceSpec类型定义。

|-- serviceSpec

NA

由于Pod的IP可能会发生变化,因此将应用需要向外提供的访问接口发布为服务,客户端使用服务的IP访问应用,而不是Pod的IP。

详细配置说明请参考fusionstage.datatypes.ServiceSpec类型定义。

|-- env

NA

Package运行的环境变量,详细配置说明请参考fusionstage.datatypes.NameValuePair类型定义。

|-- secrets

NA

Package运行所需的敏感信息,例如密码等,详细配置说明请参考fusionstage.datatypes.SecretDeff类型定义。

|-- ports

NA

Package运行时的可访问端口配置,详细配置说明请参考fusionstage.datatypes.PackagePortDef类型定义。

|-- volumes

NA

卷的挂载路径配置,详细配置说明请参考fusionstage.datatypes.PackageVolumeDef类型定义。

|-- packagePullSecret

NA

授权密钥,用于安装软件组件时,从软件/镜像仓库下载获取指定的包/镜像。默认为空的情况下,会根据用户的项目信息自动配置成使用名为project-secret的密钥;非空时使用用户指定的密钥。

当用户指定为空或非法密钥时,会拉取软件包失败。

secret类型。

fusionstage.datatypes.ProcessPackage
类型定义
fusionstage.datatypes.ProcessPackage:
    derived_from: fusionstage.datatypes.Package
    description: Define package specification for VM application
    properties:
      name:
        type: string
        default: ""
        description: Package info, url or full name
      version:
        type: string
        default: ""
        description: Package version
      repository:
        type: string
        required: false
        description: Package repository info
      url:
        type: string
        default: ""
        description: URL points to where to download the specified package
      domainName:
        type: string
        description: Package domain name
        required: false
      namespace:
        type: string
        description: name space
        required: false
      packageName:
        type: string
        description: Package name
        required: false
      scriptPath:
        description: Path points to where to execute lifecycle scripts, reserved
        type: string
        required: false
      ports:
        type: fusionstage.datatypes.ProcessPortDef
        islist: true
        default: []
字段说明
表38-218 字段说明

字段名称

含义

derived_from

fusionstage.datatypes.Package

父类型中的属性说明,详情请参照fusionstage.datatypes.Package中的说明

description

NA

类型的说明。

properties

NA

类型支持的属性列表。

|-- name

NA

软件包名称,在url为空时用到。

string类型。

|-- version

NA

软件包版本,在url为空时用到。

string类型。

|-- repository

NA

软件包所在的软件仓库的名称,在url为空时用到。

string类型。

|-- url

NA

软件包地址,为空时将根据name和version进行查询。

string类型。

|-- scriptPath

NA

软件包中脚本存放的相对路径。

string类型。

|-- ports

NA

进程组件的端口定义,详情请参照fusionstage.datatypes.ProcessPortDeff中的“类型定义”。

fusionstage.datatypes.ContainerPackage
类型定义
  fusionstage.datatypes.ContainerPackage:
    derived_from: fusionstage.datatypes.Package
    description: Container specification to define container
    properties:
      image:
        description: URL points to where to pull the specified container image
        type: string
        required: true
      command:
        description: Command to execute inside a container
        type: string
        islist: true
        default: []
      securityContext:
        description: SecurityContext defines the security options the container should be run with, Optional
        type: fusionstage.datatypes.SecurityContext
        required: false
        default: {}
      imagePullPolicy:
        required: false
        type: string
        default: Always
        constrains:
          valid_values: [Always, IfNotPresent, Never]
      ports:
        type: fusionstage.datatypes.ContainerPortDef
        islist: true
        default: []
字段说明
表38-219 字段说明

字段名称

含义

derived_from

fusionstage.datatypes.Package

父类型中的属性的说明请参考fusionstage.datatypes.Package类型的说明。

description

NA

类型的说明。

properties

NA

类型支持的属性列表。

|-- image

NA

镜像在仓库中的地址。

string类型。

|-- command

NA

容器启动命令,默认为空,使用镜像中自带的启动命令。

string类型。

|-- securityContext

NA

容器运行的安全配置,详情请参照fusionstage.datatypes.SecurityContext中的“类型定义”。

|--

imagePullSecret

NA

授权密钥,用于安装软件组件时,从软件/镜像仓库下载获取指定的包/镜像。默认为空的情况下,会根据用户的项目信息自动配置成使用名为project-secret的密钥;非空时使用用户指定的密钥。

当用户指定为空或非法密钥时,会拉取镜像包失败。

secret类型。

|-- imagePullPolicy

NA

NA

创建pod时容器镜像的获取策略。

  • Always:从镜像仓库中拉取镜像。
  • IfNotPresent:优先使用本地镜像,如果本地不存在,则从镜像仓库中拉取镜像。
  • Never:只使用本地镜像。

默认值为Always。

|-- ports

NA

NA

容器组件的端口定义,详情请参照fusionstage.datatypes.ContainerPortDef中的“类型定义”。

fusionstage.datatypes.PackageVolumeDef
类型定义
fusionstage.datatypes.PackageVolumeDef:
    properties:
      name:
        description: The name of the volume
        type: string
        default: ''
      mountPath:
        description: mount path of the volume
        type: string
        default: ''
      readOnly:
        description: Volume can be read/write or read only.
        type: boolean
        default: false
      subPath:
         required: false
         type: string
      extendPathMode:
         required: false
         type: string
         constrains:
              valid_values: ["PodUID", "PodName", "PodUID/ContainerName", "PodName/ContainerName"]
      policy:
         required: false
         type: fusionstage.datatypes.PackageVolumePolicy
字段说明
表38-220 字段说明

字段名称

含义

description

NA

类型的说明。

properties

NA

类型支持的属性列表。

|-- name

NA

卷的名称。

|-- mountPath

NA

卷的挂载路径,以“/”开头的绝对路径。

string类型。

|-- readOnly

NA

是否只读卷。

boolean类型,默认值为false。

|-- subPath

NA

子路径。

string类型。

|-- extendPathMode

NA

路径扩展模式 。

string类型。

不建议指定该字段。如果指定了该字段,升级应用后hostPath文件会不存在。

|-- policy

NA

策略配置,详情请参考11.3.6.5.37 fusionstage.datatypes.PackageVolumePolicy中的类型定义

fusionstage.datatypes.PackageVolumePolicy
类型定义
fusionstage.datatypes.PackageVolumePolicy:
    derived_from: fusionstage.datatypes.Root
    properties:
      logs:
        required: false
        islist: false
        type: fusionstage.datatypes.PackageVolumePolicyLog
字段说明
表38-221 字段说明

字段名称

含义

description

NA

类型的说明。

properties

NA

类型支持的属性列表。

|-- logs

NA

转储策略列表, 详情请参照11.3.6.5.38 fusionstage.datatypes.PackageVolumePolicyLog中的类型定义

fusionstage.datatypes.PackageVolumePolicyLog
类型定义
fusionstage.datatypes.PackageVolumePolicyLog:
    derived_from: fusionstage.datatypes.Root
    properties:
      rotate:
        required: true
        type: string
        constrains:
          valid_values: ["Daily", "Hourly", "Weekly", ""]
字段说明
表38-222 字段说明

字段名称

含义

description

NA

类型的说明。

properties

NA

类型支持的属性列表。

|-- rotate

NA

转储周期,系统会每隔一分钟检测,如果配置了rotate转储策略,当满足以下任意一个条件则会对文件进行压缩处理:

1、巡检时发现业务日志大小>20MB

2、自上一次转储之后满(Hourly:一小时、Daily:一天、Weekly:一周)

支持可配置的值如下:

  • Daily:每天
  • Hourly:每小时
  • Weekly:每周
  • “”: 代表不转储
fusionstage.datatypes.Volume
类型定义
fusionstage.datatypes.Volume:
    properties:
      name:
        description: The name of the volume
        type: string
        default: ''
      size:
        description: The size of the volume, unit GB, must be greater than 0
        type: integer
        constrains:
          greater_than: 0
      availabilityZone:
        description: The availability zone of the volume
        type: string
        default: ''
      volumeType:
        description: The type of the volume
        type: string
        default: ''
      isThin:
        description: The model of the volume. Set to true to run the volume in thin model, otherwise to normal model (for FusionCompute only)
        type: boolean
        default: true
      dataStore:
        description: Disk name or URN (for FusionCompute only)
        type: string
        default: ''
字段说明
表38-223 字段说明

字段名称

含义

properties

NA

类型支持的属性列表。

|-- name

NA

卷的名称。

|-- size

NA

卷的大小,单位为GB。

integer类型。

|-- availabilityZone

NA

卷所在的IaaS的AZ的名称。

string类型。

|-- volumeType

NA

卷的类型。

string类型。

|-- isThin

NA

-

|-- dataStore

NA

-

fusionstage.datatypes.ProbeSpec
类型定义
fusionstage.datatypes.ProbeSpec:
    properties:
      livenessProbe:
        description: Command or scripts to perform liveness probe
        default: {}
        type: fusionstage.datatypes.Probe
      readinessProbe:
        description: Command or scripts to perform readiness probe
        default: {}
        type: fusionstage.datatypes.Probe
字段说明
表38-224 字段说明

字段名称

含义

description

NA

类型的说明。

properties

NA

类型支持的属性列表。

|-- livenessProbe

NA

存活探针,检查容器是否正在运行,如果探针返回失败,则杀死容器,然后应用restart pollicy。详情请参照fusionstage.datatypes.Probe中的“类型定义”。

|-- readinessProbe

NA

就绪探针,检查容器是否可以提供访问服务。如果探针返回失败,则外部请求不会路由到该Pod。详情请参照fusionstage.datatypes.Probe中的“类型定义”。

fusionstage.datatypes.Probe
类型定义
fusionstage.datatypes.Probe:
    description: Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic
    properties:
      initialDelaySeconds:
        description: Length of time before health checking is activated
        type: integer
        required: false
      timeoutSeconds:
        description: Length of time before health checking times out
        type: integer
        required: false
      periodSeconds:
        description: How often (in seconds) to perform the probe
        type: integer
        required: false
      successThreshold:
        description: Minimum consecutive successes for the probe to be considered successful after having failed
        type: integer
        required: false
      failureThreshold:
        description: Minimum consecutive failures for the probe to be considered failed after having succeeded
        type: integer
        required: false
      exec:
        description: Executes a specified command inside the Container. The diagnostic is considered successful if the command exits with a status code of 0.
        type: fusionstage.datatypes.ExecAction
        required: false
      httpGet:
        description: Performs an HTTP Get request against the Container’s IP address on a specified port and path. The diagnostic is considered successful if the response has a status code greater than or equal to 200 and less than 400.
        type: fusionstage.datatypes.HTTPGetAction
        required: false
      tcpSocket:
        description: Performs a TCP check against the Container’s IP address on a specified port. The diagnostic is considered successful if the port is open.
        type: fusionstage.datatypes.TCPSocketAction
        required: false
字段说明
表38-225 字段说明

字段名称

含义

description

NA

类型的说明。

properties

NA

类型支持的属性列表。

|-- initialDelaySeconds

NA

容器启动后到首次执行探针的延迟时间,单位为秒。

integer类型。

|-- timeoutSeconds

NA

探针检查的超时时间,单位为秒。如果出现超时,则按故障处理。

默认为1秒。

|-- periodSeconds

NA

探针执行检查的周期,单位为秒。

默认为10秒。

|-- successThreshold

NA

出现故障后,需要探针连续几次都返回成功才认为Pod恢复正常。

默认值为1。

|-- failureThreshold

NA

探针连续几次都返回失败则认为Pod故障。

|-- exec

NA

在容器内执行一个命令,如果命令返回0表示成功。

详细配置说明请参考fusionstage.datatypes.ExecAction类型定义。

|-- httpGet

NA

发送一个http get请求到容器的指定端口,如果http响应的结果码大于等于200,小于400,则认为成功。

详情请参照详细配置说明请参考fusionstage.datatypes.HTTPGetAction类型定义。

|-- tcpSocket

NA

发送一个socket请求到容器的指定端口,如果端口处于监听状态,则认为成功。

详细配置说明请参考fusionstage.datatypes.TCPSocketAction类型定义。

fusionstage.datatypes.ExecAction
类型定义
fusionstage.datatypes.ExecAction:
    properties:
      command:
        type: string
        required: true
        islist: true
字段说明
表38-226 字段说明

字段名称

含义

description

NA

类型的说明。

properties

NA

类型支持的属性列表。

|-- command

NA

需要在容器内执行的命令,返回0标识成功,其它表示失败。例如:

command:

- cat

- /tmp/healthy

表示执行“cat /tmp/healthy”命令。

string数组类型。

fusionstage.datatypes.TCPSocketAction
类型定义
fusionstage.datatypes.TCPSocketAction:
    properties:
      port:
        description: Number of the port to access on the container. Number must be in the range 1 to 65535.
        type: integer
        required: true
字段说明
表38-227 字段说明

字段名称

含义

description

NA

类型的说明。

properties

NA

类型支持的属性列表。

|-- port

NA

容器的监听端口,如果容器正在监听此端口则返回成功,否则返回失败。例如:

integer数组类型。

fusionstage.datatypes.HTTPGetAction
类型定义
fusionstage.datatypes.HTTPGetAction:
    properties:
      host:
        description: Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead.
        type: string
        required: false
      httpHeaders:
        description: Custom headers to set in the request. HTTP allows repeated headers.
        type: fusionstage.datatypes.HTTPHead
        islist: true
        required: false
      path:
        description: Path to access on the HTTP server.
        type: string
      port:
        description: Number of the port to access on the container. Number must be in the range 1 to 65535.
        type: integer
      scheme:
        description: Scheme to use for connecting to the host. Defaults to HTTP.
        type: string
        default: HTTP
        constrains:
          valid_values: ["HTTP"]
字段说明
表38-228 字段说明

字段名称

含义

description

NA

类型的说明。

properties

NA

类型支持的属性列表。

|-- host

NA

http请求的服务器IP地址,可选字段,默认值为Pod的IP。

string类型。

|-- httpHeaders

NA

http请求的头域信息,可选字段

详细配置说明请参考fusionstage.datatypes.HTTPHead类型定义。

|-- path

NA

http请求的url的path部分。

string类型。

|-- port

NA

http请求的服务器的监听端口。

integer类型。

|-- scheme

NA

http请求的shema,默认值为HTTP,且只允许配置为HTTP。

string类型。

fusionstage.datatypes.HTTPHead
类型定义
fusionstage.datatypes.HTTPHead:
    properties:
      name:
        description: The header field name.
        type: string
        required: true
      value:
        description: The header field value.
        type: string
        required: true
字段说明
表38-229 字段说明

字段名称

含义

description

NA

类型的说明。

properties

NA

类型支持的属性列表。

|-- name

NA

http消息头的名称。

string类型。

|-- value

NA

http消息头的值。

string类型。

fusionstage.datatypes.IngressSpec
类型定义
fusionstage.datatypes.IngressSpec:
    properties:
      rules:
        description: A list of host rules used to configure the Ingress
        default: []
        type: fusionstage.datatypes.IngressRule
        islist: true
      tls:
        description: TLS configuration
        default: []
        type: fusionstage.datatypes.IngressTls
        islist: true
      tlsBackend:
        type: boolean
        default: false
      ingressType:
        description: Type of ingress
        type: string
        default: external
        constrains:
          valid_values: ["external"]
      role:
        type: string
        default: data
        constrains:
          valid_values: ["data","manage"]
      loadbalancerIP:
        description: IP of load balancer
        default: ""
        type: string
字段说明
表38-230 字段说明

字段名称

含义

description

NA

类型的说明。

properties

NA

类型支持的属性列表。

|-- rules

NA

路由规则配置,将外部请求转发给内部的服务。详细配置说明请参考fusionstage.datatypes.IngressRule类型定义。

|-- tls

NA

Ingress支持TLS的配置。详细配置说明请参考fusionstage.datatypes.IngressTls类型定义。

|-- tlsBackend

NA

值为true表示后端转发需要使用https协议。

|-- ingressType

NA

ingress的类型,只能取值为external。

|-- role

NA

当ingressType的值为“external”时有效,表示注册到哪个LB上。可用取值为:

data:注册到数据面上。

manage:注册到管理面上。

|-- loadbalancerIP

NA

负载均衡器的IP地址,外部客户端可以通过此IP访问服务,消息根据rules指定的路由规则进行转发。

ip类型。

fusionstage.datatypes.IngressRule
类型定义
fusionstage.datatypes.IngressRule:
    description: Rules mapping the paths under a specified host to the related backend services
    properties:
      host:
        description: Host is the fully qualified domain name of a network host
        type: string
        default: ""
      http:
        description: http represents a rule to route requests for this IngressRule
        type: fusionstage.datatypes.IngressHttpRule
        default: {}
字段说明
表38-231 字段说明

字段名称

含义

description

NA