创建服务

最近更新时间:2018-09-29 14:53:42

1. 接口描述

本接口 ( CreateClusterService ) 用于创建服务。
接口请求域名:ccs.api.qcloud.com

2. 输入参数

以下请求参数列表仅列出了接口请求参数,其它参数见 公共请求参数

参数名称 描述 类型 必选
clusterId 集群 ID,请填写 查询集群列表 接口中返回的 clusterId 字段 String
serviceName 服务名,服务名称由小写字母、数字和 - 组成,由小写字母开头,小写字母或数字结尾, 且长度不超过 63 个字符 String
serviceDesc 服务描述 String
replicas 实例副本数 Int
accessType 服务访问方式,不填默认 ClusterIP
LoadBalancer:为服务创建一个外网负载均衡,访问该负载均衡的 IP 和端口时,会把流量转发到该服务
SvcLBTypeInner:为服务创建一个内网负载均衡,在 VPC 内访问,需要指定 subnetId,该方式会占用该子网下的一个 IP
ClusterIP:不提供集群外访问该服务,只提供集群内其它服务访问,默认为 ClusterIP
None:不提供网络访问该服务,这种方式不用传参数 portMappings.n
String
portMappings.n 端口映射信息,当 accessType 为 None 时,不提供网络访问 Object Array
volumes.n 容器卷定义,如果 volumes.n 不填,容器对象里的 volumeMounts.n 字段也必须不填 Object Array
containers.n 容器数组,一个服务必须定义一个或多个容器,服务创建时会启动定义的容器 Object Array
namespace 命名空间,请填写 查询集群命名空间 接口中返回的 namespaces 字段,默认为 default String
subnetId 子网 ID,请填写 查询子网列表 接口中返回的 unSubnetId ( 子网统一 ID )字段,accessType 为 SvcLBTypeInner 时必须传参数 String
nodeAffinity 节点亲和性,不支持1.4.6集群,节点亲和性调度使用kubernetes的nodeAffinity硬调度(requiredDuringSchedulingIgnoredDuringExecution)方式调度,当Pod发现没有满足条件的节点可以供调度使用时,会出现调度失败的情况 Object Array
podAffinity Pod亲和性,不支持1.4.6集群,指定该服务下的实例(pod)与其他实例(pod)的部署依赖,Pod亲和性调度使用kubernetes的podAffinity硬调度(requiredDuringSchedulingIgnoredDuringExecution)方式调度,当Pod发现没有满足条件的节点可以供调度使用时,会出现调度失败的情况 Object Array

portMappings 参数详细说明:

字段 描述 类型 必选
lbPort 当 accessType 为 LoadBalancer 和 SvcLBTypeInner :负载均衡监听端口和服务的监听端口
当 accessType 为 ClusterIP :服务的监听端口
Int
containerPort 容器监听的端口 Int
nodePort Node 上开启的端口,当 accessType 为 LoadBalancer 和 SvcLBTypeInner,如果省略,系统将自动分配一个 nodePort Int
protocol 协议,必须是 TCP 或者 UDP String

volumes 参数详细说明,详细解释可参考 数据卷挂载说明

字段 描述 类型 必选
name 容器卷名称 String
volumeType 容器卷类型,目前支持 hostPath、cbsDisk、configMap 和 nfsDisk
注意:对于 cbsDisk 类型,服务的实例数目只能是 1,因为 cbs 盘不支持多个节点同时挂载
String
hostPath 当 volumeType 为 hostPath 时必填。容器启动时,容器卷在宿主机上的目录会映射到容器内,如果不填,会为该容器卷在 Node 上分配一个临时目录,当容器销毁时临时目录会被删除,如果指定了 hostPath,容器销毁时,该目录以及数据会被保留 String
cbsDiskId 当 volumeType 为 cbsDisk 时必填。cbs 网盘的 ID,容器启动时,会把该 cbs 盘挂载到容器所在的宿主机上,并映射到容器内,容器销毁时,会把该盘从宿主机上解挂载。请填写 查询云硬盘信息接口中返回的 storageId ( 云硬盘 ID )字段 String
nfsPath 当 volumeType 为 nfsDisk 时必填。此字段为挂载 NFS 盘的路径,例如:127.0.0.1:/exports String
configId 当 volumeType 为 configMap 时必填。此字段为需要挂载的配置项Id String
configVersion 当 volumeType 为 configMap 时必填。此字段为需要挂载的配置项版本 String
configKeys.n 当 volumeType 为 configMap 时必填。此字段为需要挂载的配置项的Key的数组 Object Array

containers 参数详细说明:

参数名称 描述 类型 必选
containerName 容器名,不超过 63 个字符 String
image 容器镜像 String
envs.n 容器环境变量数组,详见 envs 定义,变量名只能包含大小写字母、数字及下划线,并且不能以数字开头 Object Array
volumeMounts.n 容器卷挂载点 Object Array
healthCheck.n 容器健康检查 Object Array
CPU 容器需要分配的 CPU 量 ( 单位:mU (千分之一核) ),最小 100,既 0.1 核
不传参数或传0则为不限制
详情请参考 服务资源限制设置
Int
cpuLimits 容器能使用 cpu 的最大量 ( 单位:mU (千分之一核) ),最小 100,即 0.1 核
不传参数或传0则为不限制,在不为 0 的情况下必须满足 cpuLimits >= cpu
详情请参考 服务资源限制设置
Int
memory 容器需要分配内存的量 ( 单位:MiB ),建议最小为 4 MiB
不传参数或传0表示不做限制,在不为 0 的情况下必须满足 memoryLimits >= memory,如果未传递memoryLimits,则需求量与最大使用量默认一致
详情请参考 服务资源限制设置
Int
memoryLimits 容器最大能使用内存的量 ( 单位:MiB ),最小为 4 MiB
不传参数或传0表示不做限制
详情请参考 服务资源限制设置
Int
command 容器启动命令
详情请参考 服务运行命令和参数设置
String
arguments.n 容器启动参数
详情请参考 服务运行命令和参数设置
String Array
privileged 容器启动参数,true 为开启,false 为关闭,区分大小写
详情请参考 服务运行命令和参数设置
Bool
workingDir 容器启动参数
详情请参考 服务运行命令和参数设置
String

envs 参数详细说明:

字段 描述 类型
name 环境变量的名称 String
value 环境变量的 value String

volumeMounts 参数详细说明,详情请参考 数据卷挂载说明

字段 描述 类型
volumeName 卷名称 String
mountPath 卷在容器中的挂载点 String
mode 容器对卷的访问方式,ro 为只读,rw 为读写 String

healthCheck 参数详细定义,详情请参考 服务健康检查设置

字段 描述 类型
type 取值为 liveCheck 或者 readyCheck。liveCheck 用于检查容器是否存活,如果检查失败会重启容器,readyCheck 用于检查容器是否就绪,检查失败会停止对该容器的请求转发 String
healthNum 检查成功阈值,范围: 1 ~ 10次,liveCheck 只能为 1 。表示需要连续检测成功的次数,例如: type 为 liveCheck,healthNum 为 1,那么需要连续 1 次检测返回成功,才认为容器存活 Int
unhealthNum 检查失败阈值,范围:1~10次,表示需要连续检测失败的次数,例如:type 为 liveCheck,unhealthNum 为 3,那么需要连续 3 次检测都返回失败,才认为容器已经死掉 Int
intervalTime 健康检查间隔时间,表示多久执行一次健康检查操作。单位:秒,范围:2 ~ 300 秒 Int
timeOut 健康检查操作超时时间,单位秒,范围:2 ~ 60 秒 Int
delayTime 容器启动后,多长时间后执行健康检查,默认值:0 ( 马上启动健康检查 ),单位:秒,范围:0~60秒。注意,如果 type 为 readyCheck,在容器启动后的 delayTime 这段时间内,容器被认为是 unready 的,访问对应的服务时,请求不会被转发到该容器 Int
checkMethod 检查类型:methodTcp,methodHttp,methodCmd String
port 端口,范围:1~65535,当 checkMethod 为 methodTcp 和 methodHttp 时有效。如果 checkType 是 methodTcp,执行检查操作时会对容器的端口进行连接探测,连接成功则探测成功,否则失败。如果 checkType 为 methodHttp,会对容器的该端口发起 HTTP 或者 HTTPS 请求,请求返回的 httpcode 的范围在 200 ~ 399 ,则认为探测成功,否则失败 Int
protocol 当 checkMethod 为 methodHttp 时有效。对容器进行 HTTP 探测时的协议,只支持 HTTP 和 HTTPS String
path 当 checkMethod 为 methodHttp 时有效。对容器进行 HTTP 探测时,会构建一个 url:protocol://containerIp:port/path,然后对这个 url 发起 GET 操作进行探测。protocol 和 port 就是上面指定的参数 String
cmd 当 checkMethod 为 methodCmd 是有效。探测时会对容器执行 cmd 这个命令,如果执行结果返回 0,则探测操作成功,否则失败 String

nodeAffinity 参数详细说明:

字段 描述 类型
key 指定节点亲和性的Label的key值 String
operator 亲和性的操作符,可为 In,NotIn,Exists,DoesNotExist,Gt,Lt String
values 指定节点亲和性Label的value值 String Array

如:Node1的label是:NodeType = S1.SMALL1, Node2的label是:NodeType = S1.SMALL2, Node3的label是:NodeType = S1.MEDIUM2. 创建服务是指定nodeAffinity参数是 NodeType In S1.SMALL1 那么该服务下的容器仅在Node1下调度。

podAffinity 参数详细说明:

字段 描述 类型
key 指定Pod亲和性的Label的key值 String
operator 亲和性的操作符,可为 In,NotIn,Exists,DoesNotExist String
values 指定Pod亲和性Label的value值 String Array

3. 输出参数

参数名称 描述 类型
code 公共错误码。0 表示成功,其他值表示失败 Int
codeDesc 业务错误码。成功时返回 Success,错误时返回具体业务错误原因 String
message 模块错误信息描述,与接口相关 String

4. 示例

输入

  https://domain/v2/index.php?Action=CreateClusterService 
  ------------基础参数----------
  &clusterId=cls-xxxxx
  &serviceName=my-web-service
  &replicas=5
  ------------端口映射------------
  &accessType=LoadBalancer
  &portMappings.0.protocol=TCP
  &portMappings.0.containerPort=80
  &portMappings.0.lbPort=80
  &portMappings.0.nodePort=0
  ------------数据卷------------
  &volumes.0.name=vol
  &volumes.0.hostPath=
  &volumes.0.volumeType=hostPath
  ------------容器相关------------
  &containers.0.containerName=test
  &containers.0.image=nginx
  ------------资源限制------------
  &containers.0.cpu=200
  &containers.0.cpuLimits=300
  &containers.0.memory=128
  ------------环境变量------------
  &containers.0.envs.0.name=envkey1
  &containers.0.envs.0.value=envval1
  ------------挂载点------------
  &containers.0.volumeMounts.0.volumeName=vol
  &containers.0.volumeMounts.0.mountPath=/data
  &containers.0.volumeMounts.0.mode=rw
  ------------健康检查------------
  &containers.0.healthCheck.0.type=liveCheck
  &containers.0.healthCheck.0.checkMethod=methodHttp
  &containers.0.healthCheck.0.port=80
  &containers.0.healthCheck.0.protocol=HTTP
  &containers.0.healthCheck.0.path=/
  &containers.0.healthCheck.0.cmd=
  &containers.0.healthCheck.0.delayTime=0
  &containers.0.healthCheck.0.timeOut=2
  &containers.0.healthCheck.0.intervalTime=3
  &containers.0.healthCheck.0.healthNum=1
  &containers.0.healthCheck.0.unhealthNum=3
  ------------nodeAffinity------------
  &nodeAffinity.0.key=qcloud
  &nodeAffinity.0.operator=In
  &nodeAffinity.0.values.0=my-app
  ------------podAffinity------------
  &podAffinity.0.key=qcloud
  &podAffinity.0.operator=In
  &podAffinity.0.values.0=my-app
  &其它公共参数

输出

  {
    "code": 0,
    "message": "", 
    "codeDesc": "Success"
}