更新时间:2024-12-16 GMT+08:00

应用中创建组件

功能介绍

组件是组成应用的某个业务特性实现,以代码或者软件包为载体,可独立部署在环境下运行。

此API用于在应用中创建组件。

URI

POST /v3/{project_id}/cas/applications/{application_id}/components

表1 路径参数

参数

是否必选

参数类型

描述

project_id

String

租户项目ID。获取方法,请参考获取项目ID

application_id

String

应用ID。获取方法,请参考获取所有应用

请求消息

表2 请求Header参数

参数

是否必选

参数类型

描述

Content-Type

String

消息体的类型(格式),默认取值为“application/json;charset=utf8”。

X-Auth-Token

String

调用接口的认证方式分为Token和AK/SK两种,如果您使用的Token方式,此参数为必填,请填写Token的值。Token获取方式,请参考获取用户Token

表3 请求Body参数

参数

是否必选

参数类型

描述

name

String

组件名称。

由英文字母、数字、中划线(-)或下划线(_)组成,并以英文字母开头,英文字母或者数字结尾,长度为2~64个字符。

labels

Array of objects

标签。

容器部署方式部署的组件,可通过标签查询对应工作负载;虚机部署方式部署的组件可配置对应的微服务名称的标签来使用优雅上下线功能。请参考表4

说明:

“华东二”区域支持设置“标签”参数。

runtime_stack

Object

运行时,请参考表30,可通过查询查询运行时栈接口返回的信息获取。

environment_id

String

环境ID,可通过获取所有环境接口返回的信息获取。

description

String

组件描述。

最大长度为128个字符。

source

Object

代码/软件包来源,请参考表31

build

Object

组件构建,容器部署并没有使用镜像时必传,请参考表32

limit_cpu

Number

最大CPU限制,单位为Core。

limit_memory

Number

最大内存限制,单位为GiB。

request_cpu

Number

申请CPU资源,单位为Core。

request_memory

Number

申请内存资源,单位为GiB。

version

String

组件版本号,最大长度32,规则为:

^([0-9]+)(.[0-9]+){2,3}$

envs

Array of objects

环境变量列表,请参考表28

replica

Integer

实例数。

storages

Array of objects

存储,请参考表5

deploy_strategy

Object

组件部署,请参考表8

command

Object

启动命令,请参考表12

post_start

Object

启动后处理,请参考表13

pre_stop

Object

停止前处理,请参考表13

mesher

Object

多语言接入服务网格,当技术栈选择Node.js且绑定CSE引擎时为必选,请参考表14

timezone

String

指定组件运行的时区,比如Asia/Shanghai。

jvm_opts

String

jvm参数,例如-Xms256m -Xmx1024m,多个参数以空格间隔,不填则使用默认值。

tomcat_opts

Object

tomcat参数,技术栈选择tomcat时生效,请参考表15

host_aliases

Array of objects

主机别名,请参考表16

dns_policy

String

DNS策略。

  • Default,继承pod所在节点域名解析配置。
  • ClusterFirst,追加域名解析配置。
  • ClusterFirstWithHostNet,仅对以hostNetWork方式运行的pod生效。
  • None,替换域名解析策略。

dns_config

Object

DNS配置,请参考表17

workload_kind

String

工作负载类型。

  • deployment,无状态工作负载。
  • statefulset,有状态工作负载。

security_context

Object

安全策略,请参考表19

logs

Array of objects

日志采集,请参考表21

custom_metric

Object

自定义指标监控,请参考表22

affinity

Array of objects

亲和性,请参考表23

anti_affinity

Array of objects

反亲和性,请参考表23

liveness_probe

Object

组件存活探针,请参考表25

readiness_probe

Object

组件业务探针,请参考表25

refer_resources

Array of objects

关联资源,请参考表26

external_accesses

Array of Objects

外部访问,请参考表34

表4 labels

参数

是否必选

参数类型

描述

key

String

标签名称。

1到36个字符,只能包含数字、英文字母、下划线(_)、中划线(-)或中文。

须知:

Key的取值不能是系统内置的app、casid或version,否则会导致创建并部署组件时报错。

value

String

标签值。

0到43个字符,只能包含数字、英文字母、下划线(_)、点(.)、中划线(-)或中文。

表5 storages

参数

是否必选

参数类型

描述

type

String

数据存储类型。

  • HostPath,本地磁盘主机路径挂载。
  • EmptyDir,本地磁盘临时路径挂载。
  • ConfigMap, 本地磁盘配置项挂载。
  • Secret,本地磁盘密钥挂载。
  • PersistentVolumeClaim, 云存储挂载。

name

String

存储盘名称。

parameters

Object

对应各种数据存储类型的信息参数,请参考表6

mounts

array of objects

数据存储挂载路径,请参考表7

表6 component_storage_parameters

参数

是否必选

参数类型

描述

path

String

主机路径, 适用于HostPath的存储类型。当数据存储类型为HostPath为必选参数。

name

String

配置项、密钥或者PVC的名字, 适用于ConfigMap、Secret和PersistentVolumeClaim的存储类型。当数据存储类型为ConfigMap、Secret和PersistentVolumeClaim为必选参数。

default_mode

Integer

挂载的权限,十进制格式,例如:384。适用于ConfigMap和Secret的存储类型。

medium

String

适用于EmptyDir类型的存储。不传参数为默认的磁盘介质,传参为memory则开启内存存储。

表7 mounts

参数

是否必选

参数类型

描述

path

String

挂载路径,数据存储挂载到应用上的路径。例如,/tmp。

sub_path

String

挂载路径的子路径。

read_only

Boolean

是否只读。

  • true:只读,只能读应用路径中的数据存储。
  • false:读写,可修改应用路径中的数据存储,应用迁移时新写入的数据不会随之迁移,会造成数据丢失。
表8 deploy_strategy

参数

是否必选

参数类型

描述

type

String

部署类型。

  • OneBatchRelease,单批升级。
  • RollingRelease,滚动部署升级。
  • GrayRelease,灰度发布升级。

rolling_release

Object

滚动部署参数,部署类型为RollingRelease时为必选,请参考表9

gray_release

Object

灰度发布升级,部署类型为GrayRelease时为必选,请参考表10

表9 rolling_release

参数

是否必选

参数类型

描述

batches

Integer

分批部署批次。

表10 gray_release

参数

是否必选

参数类型

描述

type

String

灰度策略。

  • weight,按灰度流量进行升级。
  • content,按内容进行灰度。

first_batch_weight

Integer

首批灰度流量比例,灰度策略为weight时为必选。

first_batch_replica

Integer

首批灰度实例数量,灰度策略为weight时为必选。

remaining_batch

Integer

剩余实例部署批次,首批灰度发布成功之后,剩余实例滚动升级分多少批次完成。

例如:剩余实例数是5,剩余部署批次是3,那么升级剩余实例会按照2:2:1个实例分批升级。

灰度类型为weight时为必选。

deployment_mode

Integer

部署模型。

  • 1,上游是微服务网关。
  • 3,上游是微服务。
  • 4,上游是ELB。

replica_surge_mode

String

灰度实例新增模式,灰度策略为content时为必选。

  • mirror,蓝绿。
  • extra,金丝雀(先增后减)。
  • no_surge,金丝雀(先减后増)。

rule_match_mode

String

灰度规则生效方式,灰度策略为content时为必选。

  • all,满足所有条件。
  • any,满足任一条件。

rules

Object

灰度规则,参数表11,灰度策略为content时为必选。

表11 gray_rules

参数

是否必选

参数类型

描述

type

String

匹配类型。

当前仅支持:header,请求头。

key

String

参数名称。

value

String

条件值。

condition

String

条件类型。

  • equal,相等。
  • match,匹配。
  • in,枚举。
表12 command

参数

是否必选

参数类型

描述

command

Array of String

运行命令,控制容器运行的输入命令。

args

Array of String

运行参数,控制容器运行命令的输入参数。例如:-port=8080,多条参数以换行分隔。

表13 component_lifecycle

参数

是否必选

参数类型

描述

type

String

处理方式。

  • http,http请求方式。
  • command,命令行方式。

scheme

String

http请求类型参数:HTTP、HTTPS。

type为http类型时生效。

host

String

默认为POD的IP,可以指定自定义的IP。

type为http类型时生效。

port

Integer

端口号,type为http类型时生效。

path

String

请求路径,type为http类型时生效。

command

Array of String

命令列表,type为command类型时生效。

表14 mesher

参数

是否必选

参数类型

描述

port

Integer

进程监听端口。

表15 tomcat_opt

参数

是否必选

参数类型

描述

server_xml

String

  1. 监听端口以server.xml配置的为准,如果之前在公网访问配置了监听端口,请保持一致。
  2. 自定义的Tomcat配置可能存在端口冲突,请检查自定义的端口是否被占用。
表16 host_aliases

参数

是否必选

参数类型

描述

ip

String

ip地址。

hostnames

Array of String

主机别名。

表17 dns_config

参数

是否必选

参数类型

描述

nameservers

Array of String

Pod的DNS服务器的IP地址列表。

searches

Array of String

可选,用于在Pod中查找主机名的DNS搜索域的列表。

options

Array of objects

可选,对象列表。其中每个对象可能具有name属性(必需)和value属性(可选)。 此属性中的内容将合并到从指定的DNS策略生成的选项,重复的条目将被删除,请参考表18

表18 options

参数

是否必选

参数类型

描述

name

String

操作名称。

value

String

操作值。

表19 security_context

参数

是否必选

参数类型

描述

run_as_user

Integer

运行用户,容器以当前用户权限运行,如以root权限运行则填写root用户ID 0。

run_as_group

Integer

运行属组,指定所有容器中的进程都以属组运行。

capabilities

Object

能力集,请参考表20

表20 capabilities

参数

是否必选

参数类型

描述

add

Array of String

为运行用户添加Linux权限。

drop

Array of String

移除运行用户Linux权限。

表21 logs

参数

是否必选

参数类型

描述

log_path

String

容器中日志路径。

rotate

String

日志转储周期。

host_path

String

挂载的主机路径。

host_extend_path

String

主机扩展路径,通过扩展主机路径,实现同一个主机路径下区分来自不同容器的挂载:

  • None,不使用扩展路径。
  • PodUID,通过POD的ID扩展主机路径。
  • PodName,通过POD的名称扩展主机路径。
  • PodUID/ContainerName,通过POD的ID和容器名称扩展主机路径。
  • PodName/ContainerName,通过POD的名称和容器名称扩展主机路径。
表22 custom_metric

参数

是否必选

参数类型

描述

path

String

采集路径,例如:/metrics。

port

Integer

采集端口,例如:9090。

dimensions

String

监控维度,例如:"cpu_usage,mem_usage"。

表23 component_affinity

参数

是否必选

参数类型

描述

condition

String

是否必须满足。

  • required,必须满足。
  • preferred,尽量满足。

kind

String

亲和类型。

  • node,节点亲和。
  • pod,pod亲和。

weight

Integer

亲和权重,取值范围0~100。

match_expressions

Array of objects

匹配条件,请参考表24

表24 match_expressions

参数

是否必选

参数类型

描述

key

String

匹配标签key值。

operation

String

匹配条件。

value

String

匹配标签value值。

表25 component_probe

参数

是否必选

参数类型

描述

type

String

类型:http、tcp、command。

delay

Integer

启动后多久开始探测。

timeout

Integer

探测超时时间。

scheme

String

请求类型:HTTP、HTTPS,type为http类型时生效。

host

String

默认为POD的IP,可以指定自定义的IP。type为http类型时生效。

port

Integer

端口号,type为http和tcp类型时生效。

path

String

请求路径,type为http类型时生效。

command

Array of String

命令列表,type为command类型时生效。

表26 refer_resources

参数

是否必选

参数类型

描述

id

String

资源ID。

type

String

资源类型:

  • vpc:虚拟私有云
  • eip:弹性公网IP
  • elb:弹性负载均衡
  • cce:云容器引擎
  • ecs:弹性云服务器
  • as: 弹性伸缩组
  • cse:微服务引擎
  • dcs:分布式缓存服务
  • rds:云数据库

parameters

Object

资源参数,请参考表27

表27 refer_resource_parameter

参数

是否必选

参数类型

描述

namespace

String

命名空间。

表28 env

参数

是否必选

参数类型

描述

name

String

变量名。

value

String

变量值。

value_from

Object

变量引用,请参考表29

表29 value_from

参数

是否必选

参数类型

描述

reference_type

String

引用类型。

  • configMapKey,配置项导入。
  • secretKey,密钥导入。

name

String

配置项或密钥的名称。

key

String

配置项或密钥的键值。

optional

Boolean

配置项或密钥的key是否必须存在。

表30 runtime_stack

参数

是否必选

参数类型

描述

name

String

技术栈名称。

type

String

技术栈类型,支持Java、Tomcat、Nodejs、Php、Docker、Python。

当部署模式为虚机部署时,仅支持Java、Tomcat、Nodejs;容器部署上述类型都支持。

version

String

技术栈版本。

deploy_mode

String

部署模式。

  • container,容器部署。
  • virtualmachine,虚机部署。
表31 source

参数

是否必选

参数类型

描述

kind

String

组件来源类型。

  • code,源码。
  • package,软件包。
  • image,镜像包。

version

String

版本号。

url

String

包地址,类型为package和image时需要添加。

storage

String

存储方式,支持镜像仓库swr、软件仓库swr、软件开发生产线codearts和对象存储obs,类型为package和image时需要添加。

auth

String

认证方式,支持iam、none,默认是iam。

repo_auth

String

授权名称,在授权列表获取,请参考获取仓库授权列表

repo_namespace

String

代码仓库命名空间。

repo_ref

String

代码分支或者Tag,默认是master。

repo_type

String

代码仓类型,支持GitHub、BitBucket、GitLab。

web_url

String

代码跳转链接,例如:https://github.com/example/demo.git。

repo_url

String

代码仓url,例如:https://github.com/example/demo.git。

commit_id

String

代码仓库中,commit id是每次提交的唯一标识符,用于识别和引用特定的提交。

长度为8到40个字符,以小写字母或数字开头。

表32 build

参数

是否必选

参数类型

描述

parameters

Map<String, Object>

只在没有ID,新创建构建时提供,请参考表33

表33 parameters

参数

是否必选

参数类型

描述

build_cmd

String

编译命令。默认:

  1. 根目录存在build.sh:./build.sh
  2. 根据运行系统,示例如下:
    • Java和Tomcat:mvn clean package
    • Nodejs: npm build

dockerfile_path

String

dockerfile地址,默认是根目录./。

artifact_namespace

String

构建归档组织,默认cas_{project_id}。

cluster_id

String

指定构建集群的id。

node_label_selector

Map<String, String>

key是标签的键,value是标签的值。

environment_id

String

环境ID。获取方法,请参考获取所有环境

表34 external_accesses

参数

是否必选

参数类型

描述

protocol

String

外部访问类型,取值范围为:http、https。

address

String

外部访问地址。

forward_port

Integer

外部访问端口。

响应消息

表35 响应参数

参数

参数类型

描述

job_id

String

任务ID。

component_id

String

应用组件ID。

请求示例

  • 场景一:CCE容器环境下创建组件
    创建名为mycomponent的组件。组件部署使用1.2.0版本的Java技术栈,组件来源选择存储在OBS下bucket00001桶里的weather-1.0.0.jar包,部署使用的资源为id为fd92bfab-73b3-11ee-90f0-0255ac1001b3的云容器引擎。
    {
        "name": "mycomponent",
        "description": "",
        "labels": [
            {
                "key": "com-key",
                "value": "com-value"
            }
        ],
        "version": "2023.1102.17105",
        "environment_id": "b489f7b4-2539-45a1-ba71-4728961434ca",
        "runtime_stack": {
            "name": "OpenJDK8",
            "version": "1.2.0",
            "type": "Java",
            "deploy_mode": "container"
        },
        "source": {
            "kind": "package",
            "url": "obs://bucket0001/weather-1.0.0.jar",
            "version": "",
            "storage": "obs"
        },
        "tomcat_opts": {
            "server_xml": ""
        },
        "refer_resources": [
            {
                "id": "fd92bfab-73b3-11ee-90f0-0255ac1001b3",
                "type": "cce",
            }
        ],
        "replica": 1,
        "limit_cpu": 0.25,
        "limit_memory": 0.5,
        "request_cpu": 0.25,
        "request_memory": 0.5
    }
  • 场景二:ECS虚拟机环境下创建组件

    创建名为mycomponent的组件。组件部署使用1.2.0版本的Java技术栈,组件来源选择存储在OBS下bucket00001桶里的weather-1.0.0.jar包,部署使用的资源为id为67835bb3-1235-4cc9-be71-becbb2b4ca0d的弹性云服务器。

    {
        "name": "mycomponent",
        "description": "",
        "labels": [
            {
                "key": "com-key",
                "value": "com-value"
            }
        ],
        "version": "2023.1102.17540",
        "environment_id": "9a075df5-104f-4e21-9dbf-ffc3572effdf",
        "runtime_stack": {
            "name": "OpenJDK8",
            "version": "1.2.0",
            "type": "Java",
            "deploy_mode": "virtualmachine"
        },
        "source": {
            "kind": "package",
            "url": "obs://bucket0001/weather-1.0.0.jar",
            "version": "",
            "storage": "obs"
        },
        "tomcat_opts": {
            "server_xml": ""
        },
        "refer_resources": [
            {
                "id": "23598aa9-7a6b-43c7-a53a-39ca5e7290fb",
                "type": "ecs"
            }
        ],
        "replica": 1,
        "external_accesses": [
            {
                "protocol": "http",
                "address": "192.168.0.169",
                "forward_port": 80
            }
        ]
    }

响应示例

{
    "job_id": "JOB8be53b2a-af9a-4e2b-8505-096688a52237",
    "component_id": "b8702b0f-94d3-4822-98a1-56815632a0a0"
}

状态码

状态码

描述

200

操作成功

400

错误的请求

404

请求对象不存在

500

内部错误

错误码

错误码格式为:SVCSTG.00100.[Error_ID],例如:SVCSTG.00100400。错误码说明请参考ServiceStage错误码