接口约束
仅支持创建KVM虚拟化类型的节点,非KVM虚拟化类型的节点创建后无法正常使用。
调用方法
请参见如何调用API。
URI
POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 project_id  | 
 是  | 
 String  | 
 项目ID,获取方式请参见如何获取接口URI中参数。  | 
| 
 cluster_id  | 
 是  | 
 String  | 
 集群ID,获取方式请参见如何获取接口URI中参数。  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 nodepoolScaleUp  | 
 否  | 
 String  | 
 标明是否为nodepool下发的请求。若不为“NodepoolScaleUp”将自动更新对应节点池的实例数  | 
请求参数
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 Content-Type  | 
 是  | 
 String  | 
 消息体的类型(格式)  | 
| 
 X-Auth-Token  | 
 是  | 
 String  | 
 调用接口的认证方式分为Token和AK/SK两种,如果您使用的Token方式,此参数为必填,请填写Token的值,获取方式请参见获取token。  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 kind  | 
 是  | 
 String  | 
 API类型,固定值“Node”,该值不可修改。  | 
| 
 apiVersion  | 
 是  | 
 String  | 
 API版本,固定值“v3”,该值不可修改。  | 
| 
 metadata  | 
 否  | 
 metadata是节点对象的元数据定义,是集合类的元素类型,包含一组由不同名称定义的属性。  | 
|
| 
 spec  | 
 是  | 
 spec是集合类的元素类型,用户对需要管理的节点对象进行详细描述的主体部分都在spec中给出。系统通过spec的描述来创建或更新对象。  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 name  | 
 否  | 
 String  | 
 节点名称 说明:
 
命名规则:以小写字母开头,由小写字母、数字、中划线(-)组成,长度范围1-56位,且不能以中划线(-)结尾。 若name未指定或指定为空字符串,则按照默认规则生成节点名称。默认规则为:“集群名称-随机字符串”,若集群名称过长,则只取前36个字符。 若节点数量(count)大于1时,则按照默认规则会在用户输入的节点名称末尾添加随机字符串。默认规则为:“用户输入名称-随机字符串”,若用户输入的节点名称长度范围超过50位时,系统截取前50位,并在末尾添加随机字符串。  | 
| 
 uid  | 
 否  | 
 String  | 
 节点ID,资源唯一标识,创建成功后自动生成,填写无效  | 
| 
 labels  | 
 否  | 
 Map<String,String>  | 
 CCE自有节点标签,非Kubernetes原生labels。 标签可用于选择对象并查找满足某些条件的对象集合,格式为key/value键值对。 示例: "labels": {
  "key" : "value"
}
 | 
| 
 annotations  | 
 否  | 
 Map<String,String>  | 
 CCE自有节点注解,非Kubernetes原生annotations,格式为key/value键值对。 示例: "annotations": {
  "key1" : "value1",
  "key2" : "value2"
}
说明:
 
  | 
| 
 creationTimestamp  | 
 否  | 
 String  | 
 创建时间,创建成功后自动生成,填写无效  | 
| 
 updateTimestamp  | 
 否  | 
 String  | 
 更新时间,创建成功后自动生成,填写无效  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 flavor  | 
 是  | 
 String  | 
 节点的规格,CCE支持的节点规格请参考节点规格说明获取。  | 
| 
 az  | 
 是  | 
 String  | 
 待创建节点所在的可用区,需要指定可用区(AZ)的名称。 CCE支持的可用区请参考地区和终端节点  | 
| 
 os  | 
 否  | 
 String  | 
 节点的操作系统类型。具体支持的操作系统请参见节点操作系统说明。 说明:
 
  | 
| 
 login  | 
 是  | 
 节点的登录方式。密钥对和密码登录方式二者必选其一。  | 
|
| 
 rootVolume  | 
 是  | 
 节点的磁盘信息  | 
|
| 
 dataVolumes  | 
 是  | 
 节点的数据盘参数(目前已支持通过控制台为CCE节点添加第二块数据盘)。 如果数据盘正供容器运行时和Kubelet组件使用,则不可被卸载,否则将导致节点不可用。 针对专属云节点,参数解释与rootVolume一致  | 
|
| 
 storage  | 
 否  | 
 磁盘初始化配置管理参数。 该参数配置逻辑较为复杂,详细说明请参见节点磁盘挂载。 该参数缺省时,按照extendParam中的DockerLVMConfigOverride(已废弃)参数进行磁盘管理。此参数对1.15.11及以上集群版本支持。 说明:
 
如存在节点规格涉及本地盘并同时使用 云硬盘 场景时,请勿缺省此参数,避免出现将用户未期望的磁盘分区。  | 
|
| 
 publicIP  | 
 否  | 
 节点的 弹性公网IP 说明:
 
创建节点池添加节点时不支持该参数。  | 
|
| 
 nodeNicSpec  | 
 否  | 
 节点的网卡信息  | 
|
| 
 count  | 
 否  | 
 Integer  | 
 批量创建时节点的个数,必须为大于等于1,小于等于最大限额的正整数。作用于节点池时该项可以不填写。  | 
| 
 billingMode  | 
 否  | 
 Integer  | 
 节点的计费模式: 
  | 
| 
 taints  | 
 否  | 
 支持给创建出来的节点加Taints来设置反亲和性,taints配置不超过20条。每条Taints包含以下3个参数: 
 示例: "taints": [{
  "key": "status",
  "value": "unavailable",
  "effect": "NoSchedule"
}, {
  "key": "looks",
  "value": "bad",
  "effect": "NoSchedule"
}]
 | 
|
| 
 k8sTags  | 
 否  | 
 Map<String,String>  | 
 格式为key/value键值对。键值对个数不超过20条。 
 示例: "k8sTags": {
  "key": "value"
}
 | 
| 
 ecsGroupId  | 
 否  | 
 String  | 
 云服务器 组ID,若指定,将节点创建在该云服务器组下  | 
| 
 dedicatedHostId  | 
 否  | 
 String  | 
 指定DeH主机的ID,将节点调度到自己的DeH上。 说明:
 
创建节点池添加节点时不支持该参数。  | 
| 
 userTags  | 
 否  | 
 云服务器标签,键必须唯一,CCE支持的最大用户自定义标签数量依region而定,自定义标签数上限为8个。 字段使用场景:在节点创建场景下,支持指定初始值,查询时不返回该字段;在节点池场景下,其中节点模板中支持指定初始值,查询时支持返回该字段;在其余场景下,查询时都不会返回该字段。 说明:
 
标签键只能包含大写字母.小写字母、数字和特殊字符(-_)以及Unicode字符,长度不超过36个字符。  | 
|
| 
 runtime  | 
 否  | 
 容器运行时, 默认场景: 
  | 
|
| 
 initializedConditions  | 
 否  | 
 Array of strings  | 
 自定义初始化标记。 CCE节点在初始化完成之前,会打上初始化未完成污点(node.cloudprovider.kubernetes.io/uninitialized)防止pod调度到节点上。 cce支持自定义初始化标记,在接收到initializedConditions参数后,会将参数值转换成节点标签,随节点下发,例如:cloudprovider.openvessel.io/inject-initialized-conditions=CCEInitial_CustomedInitial。 当节点上设置了此标签,会轮询节点的status.Conditions,查看conditions的type是否存在标记名,如CCEInitial、CustomedInitial标记,如果存在所有传入的标记,且状态为True,认为节点初始化完成,则移除初始化污点。 
  | 
| 
 extendParam  | 
 否  | 
 创建节点时的扩展参数。  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 sshKey  | 
 否  | 
 String  | 
 选择密钥对方式登录时的密钥对名称。  | 
| 
 userPassword  | 
 否  | 
 选择密码方式登录时的帐号密码信息,之后可通过此帐号密码登录节点。  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 username  | 
 否  | 
 String  | 
 登录帐号,默认为“root”  | 
| 
 password  | 
 是  | 
 String  | 
 登录密码,若创建节点通过用户名密码方式,即使用该字段,则响应体中该字段作屏蔽展示。 密码复杂度要求: 
  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 size  | 
 是  | 
 Integer  | 
 磁盘大小,单位为GB 
  | 
| 
 volumetype  | 
 是  | 
 String  | 
 磁盘类型,取值请参见创建云服务器 中“root_volume字段数据结构说明”。 
 说明:
 
了解不同磁盘类型的详细信息,链接请参见创建云服务器。  | 
| 
 extendParam  | 
 否  | 
 Map<String,Object>  | 
 磁盘扩展参数,取值请参见创建云服务器中“extendparam”参数的描述。 链接请参见创建云服务器  | 
| 
 cluster_id  | 
 否  | 
 String  | 
 云服务器系统盘对应的存储池的ID。仅用作专属云集群, 专属分布式存储 DSS的存储池ID,即dssPoolID。 获取方法请参见获取单个专属分布式存储池详情中“表3 响应参数”的ID字段。  | 
| 
 cluster_type  | 
 否  | 
 String  | 
 云服务器系统盘对应的磁盘存储类型。仅用作专属云集群,固定取值为dss。  | 
| 
 hw:passthrough  | 
 否  | 
 Boolean  | 
  | 
| 
 metadata  | 
 否  | 
 云硬盘加密信息,仅在创建节点系统盘或数据盘需加密时须填写。  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 __system__encrypted  | 
 否  | 
 String  | 
 表示云硬盘加密功能的字段,'0'代表不加密,'1'代表加密。 该字段不存在时,云硬盘默认为不加密。  | 
| 
 __system__cmkid  | 
 否  | 
 String  | 
 用户主密钥ID,是metadata中的表示加密功能的字段,与__system__encrypted配合使用。  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 storageSelectors  | 
 是  | 
 磁盘选择,根据matchLabels和storageType对匹配的磁盘进行管理。磁盘匹配存在先后顺序,靠前的匹配规则优先匹配。  | 
|
| 
 storageGroups  | 
 是  | 
 由多个存储设备组成的存储组,用于各个存储空间的划分。  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 name  | 
 是  | 
 String  | 
 selector的名字,作为storageGroup中selectorNames的索引,因此各个selector间的名字不能重复。  | 
| 
 storageType  | 
 是  | 
 String  | 
 存储类型,当前仅支持evs(云硬盘)或local(本地盘);local存储类型不支持磁盘选择,所有本地盘将被组成一个VG,因此也仅允许只有一个local类型的storageSelector。  | 
| 
 matchLabels  | 
 否  | 
 evs盘的匹配字段,支持DataVolume中的size、volumeType、metadataEncrypted、metadataCmkid、count五个字段。  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 size  | 
 否  | 
 String  | 
 匹配的磁盘大小,不填则无磁盘大小限制。例如:100.  | 
| 
 volumeType  | 
 否  | 
 String  | 
 云硬盘类型,目前支持SSD\GPSSD\SAS\ESSD\SATA等。  | 
| 
 metadataEncrypted  | 
 否  | 
 String  | 
 磁盘加密标识符,0代表不加密,1代表加密。  | 
| 
 metadataCmkid  | 
 否  | 
 String  | 
 加密磁盘的用户主密钥ID,长度为36字节的字符串。  | 
| 
 count  | 
 否  | 
 String  | 
 磁盘选择个数,不填则选择所有此类磁盘。  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 name  | 
 是  | 
 String  | 
 storageGroups的名字,作为虚拟存储组的名字,因此各个group名字不能重复。 说明:
 
| 
  | 
| 
 cceManaged  | 
 否  | 
 Boolean  | 
 k8s及runtime所属存储空间。有且仅有一个group被设置为true,不填默认false。  | 
| 
 selectorNames  | 
 是  | 
 Array of strings  | 
 对应storageSelectors中的name,一个group可选择多个selector;但一个selector只能被一个group选择。  | 
| 
 virtualSpaces  | 
 是  | 
 group中空间配置的详细管理。  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 name  | 
 是  | 
 String  | 
 virtualSpace的名称,当前仅支持三种类型:kubernetes、runtime、user。 
  | 
| 
 size  | 
 是  | 
 String  | 
 virtualSpace的大小,仅支持整数百分比。例如:90%。 说明:
 
一个group中所有virtualSpace的百分比之和不得超过100%  | 
| 
 lvmConfig  | 
 否  | 
 lvm配置管理,适用于kubernetes和user空间配置。 需要注意:一个virtualSpace仅支持一个config配置。  | 
|
| 
 runtimeConfig  | 
 否  | 
 runtime配置管理,适用于运行时空间配置。 需要注意:一个virtualSpace仅支持一个config配置。  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 lvType  | 
 是  | 
 String  | 
 LVM写入模式:linear、striped。linear:线性模式;striped:条带模式,使用多块磁盘组成条带模式,能够提升磁盘性能。  | 
| 
 path  | 
 否  | 
 String  | 
 磁盘挂载路径。仅在用户配置中生效。支持包含:数字、大小写字母、点、中划线、下划线的绝对路径。  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 lvType  | 
 是  | 
 String  | 
 LVM写入模式:linear、striped。linear:线性模式;striped:条带模式,使用多块磁盘组成条带模式,能够提升磁盘性能。  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 ids  | 
 否  | 
 Array of strings  | 
 已有的弹性IP的ID列表。数量不得大于待创建节点数 说明:
 
若已配置ids参数,则无需配置count和eip参数  | 
| 
 count  | 
 否  | 
 Integer  | 
 要动态创建的弹性IP个数。 说明:
 
count参数与eip参数必须同时配置。  | 
| 
 eip  | 
 否  | 
 弹性IP参数  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 iptype  | 
 是  | 
 String  | 
 弹性IP类型,取值请参见申请EIP接口中publicip.type说明。 链接请参见申请EIP  | 
| 
 bandwidth  | 
 否  | 
 弹性IP的带宽参数  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 chargemode  | 
 否  | 
 String  | 
 带宽的计费类型: 
 说明:
 
  | 
| 
 size  | 
 否  | 
 Integer  | 
 带宽大小,取值请参见取值请参见申请EIP接口中bandwidth.size说明。 链接请参见申请EIP  | 
| 
 sharetype  | 
 否  | 
 String  | 
 带宽的共享类型,共享类型枚举:PER,表示独享,目前仅支持独享。  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 subnetId  | 
 否  | 
 String  | 
 网卡所在子网的网络ID。主网卡创建时若未指定subnetId,将使用集群子网。扩展网卡创建时必须指定subnetId。  | 
| 
 fixedIps  | 
 否  | 
 Array of strings  | 
 主网卡的IP将通过fixedIps指定,数量不得大于创建的节点数。fixedIps或ipBlock同时只能指定一个。扩展网卡不支持指定fiexdIps。  | 
| 
 ipBlock  | 
 否  | 
 String  | 
 主网卡的IP段的CIDR格式,创建的节点IP将属于该IP段内。fixedIps或ipBlock同时只能指定一个。  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 key  | 
 否  | 
 String  | 
 云服务器标签的键。不得以"CCE-"或"__type_baremetal"开头  | 
| 
 value  | 
 否  | 
 String  | 
 云服务器标签的值  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
 描述  | 
|---|---|---|---|
| 
 name  | 
 否  | 
 String  | 
 容器运行时,默认场景: 
  | 
| 
 参数  | 
 是否必选  | 
 参数类型  | 
|---|---|---|
| 
 ecs:performancetype  | 
 否  | 
 String  | 
| 
 orderID  | 
 否  | 
 String  | 
| 
 productID  | 
 否  | 
 String  | 
| 
 maxPods  | 
 否  | 
 Integer  | 
| 
 periodType  | 
 否  | 
 String  | 
| 
 periodNum  | 
 否  | 
 Integer  | 
| 
 isAutoRenew  | 
 否  | 
 String  | 
| 
 isAutoPay  | 
 否  | 
 String  | 
| 
 DockerLVMConfigOverride  | 
 否  | 
 String  | 
| 
 dockerBaseSize  | 
 否  | 
 Integer  | 
| 
 publicKey  | 
 否  | 
 String  | 
| 
 alpha.cce/preInstall  | 
 否  | 
 String  | 
| 
 alpha.cce/postInstall  | 
 否  | 
 String  | 
| 
 alpha.cce/NodeImageID  | 
 否  | 
 String  | 
| 
 nicMultiqueue  | 
 否  | 
 String  | 
| 
 nicThreshold  | 
 否  | 
 String  | 
| 
 chargingMode  | 
 否  | 
 Integer  | 
| 
 agency_name  | 
 否  | 
 String  | 
| 
 kube-reserved-mem  | 
 否  | 
 Integer  | 
| 
 system-reserved-mem  | 
 否  | 
 Integer  | 
响应参数
状态码: 201
| 
 参数  | 
 参数类型  | 
 描述  | 
|---|---|---|
| 
 kind  | 
 String  | 
 API类型,固定值“Node”,该值不可修改。  | 
| 
 apiVersion  | 
 String  | 
 API版本,固定值“v3”,该值不可修改。  | 
| 
 metadata  | 
 metadata是节点对象的元数据定义,是集合类的元素类型,包含一组由不同名称定义的属性。  | 
|
| 
 spec  | 
 spec是集合类的元素类型,用户对需要管理的节点对象进行详细描述的主体部分都在spec中给出。系统通过spec的描述来创建或更新对象。  | 
|
| 
 status  | 
 节点状态,动态记录,创建或修改时指定无意义.  | 
| 
 参数  | 
 参数类型  | 
 描述  | 
|---|---|---|
| 
 name  | 
 String  | 
 节点名称 说明:
 
命名规则:以小写字母开头,由小写字母、数字、中划线(-)组成,长度范围1-56位,且不能以中划线(-)结尾。 若name未指定或指定为空字符串,则按照默认规则生成节点名称。默认规则为:“集群名称-随机字符串”,若集群名称过长,则只取前36个字符。 若节点数量(count)大于1时,则按照默认规则会在用户输入的节点名称末尾添加随机字符串。默认规则为:“用户输入名称-随机字符串”,若用户输入的节点名称长度范围超过50位时,系统截取前50位,并在末尾添加随机字符串。  | 
| 
 uid  | 
 String  | 
 节点ID,资源唯一标识,创建成功后自动生成,填写无效  | 
| 
 labels  | 
 Map<String,String>  | 
 CCE自有节点标签,非Kubernetes原生labels。 标签可用于选择对象并查找满足某些条件的对象集合,格式为key/value键值对。 示例: "labels": {
  "key" : "value"
}
 | 
| 
 annotations  | 
 Map<String,String>  | 
 CCE自有节点注解,非Kubernetes原生annotations,格式为key/value键值对。 示例: "annotations": {
  "key1" : "value1",
  "key2" : "value2"
}
说明:
 
  | 
| 
 creationTimestamp  | 
 String  | 
 创建时间,创建成功后自动生成,填写无效  | 
| 
 updateTimestamp  | 
 String  | 
 更新时间,创建成功后自动生成,填写无效  | 
| 
 参数  | 
 参数类型  | 
 描述  | 
|---|---|---|
| 
 flavor  | 
 String  | 
 节点的规格,CCE支持的节点规格请参考节点规格说明获取。  | 
| 
 az  | 
 String  | 
 待创建节点所在的可用区,需要指定可用区(AZ)的名称。 CCE支持的可用区请参考地区和终端节点  | 
| 
 os  | 
 String  | 
 节点的操作系统类型。具体支持的操作系统请参见节点操作系统说明。 说明:
 
  | 
| 
 login  | 
 节点的登录方式。密钥对和密码登录方式二者必选其一。  | 
|
| 
 rootVolume  | 
 节点的磁盘信息  | 
|
| 
 dataVolumes  | 
 节点的数据盘参数(目前已支持通过控制台为CCE节点添加第二块数据盘)。 如果数据盘正供容器运行时和Kubelet组件使用,则不可被卸载,否则将导致节点不可用。 针对专属云节点,参数解释与rootVolume一致  | 
|
| 
 storage  | 
 磁盘初始化配置管理参数。 该参数配置逻辑较为复杂,详细说明请参见节点磁盘挂载。 该参数缺省时,按照extendParam中的DockerLVMConfigOverride(已废弃)参数进行磁盘管理。此参数对1.15.11及以上集群版本支持。 说明:
 
如存在节点规格涉及本地盘并同时使用云硬盘场景时,请勿缺省此参数,避免出现将用户未期望的磁盘分区。  | 
|
| 
 publicIP  | 
 节点的弹性 公网IP 说明:
 
创建节点池添加节点时不支持该参数。  | 
|
| 
 nodeNicSpec  | 
 节点的网卡信息  | 
|
| 
 count  | 
 Integer  | 
 批量创建时节点的个数,必须为大于等于1,小于等于最大限额的正整数。作用于节点池时该项可以不填写。  | 
| 
 billingMode  | 
 Integer  | 
 节点的计费模式: 
  | 
| 
 taints  | 
 支持给创建出来的节点加Taints来设置反亲和性,taints配置不超过20条。每条Taints包含以下3个参数: 
 示例: "taints": [{
  "key": "status",
  "value": "unavailable",
  "effect": "NoSchedule"
}, {
  "key": "looks",
  "value": "bad",
  "effect": "NoSchedule"
}]
 | 
|
| 
 k8sTags  | 
 Map<String,String>  | 
 格式为key/value键值对。键值对个数不超过20条。 
 示例: "k8sTags": {
  "key": "value"
}
 | 
| 
 ecsGroupId  | 
 String  | 
 云服务器组ID,若指定,将节点创建在该云服务器组下  | 
| 
 dedicatedHostId  | 
 String  | 
 指定DeH主机的ID,将节点调度到自己的DeH上。 说明:
 
创建节点池添加节点时不支持该参数。  | 
| 
 userTags  | 
 云服务器标签,键必须唯一,CCE支持的最大用户自定义标签数量依region而定,自定义标签数上限为8个。 字段使用场景:在节点创建场景下,支持指定初始值,查询时不返回该字段;在节点池场景下,其中节点模板中支持指定初始值,查询时支持返回该字段;在其余场景下,查询时都不会返回该字段。 说明:
 
标签键只能包含大写字母.小写字母、数字和特殊字符(-_)以及Unicode字符,长度不超过36个字符。  | 
|
| 
 runtime  | 
 容器运行时, 默认场景: 
  | 
|
| 
 initializedConditions  | 
 Array of strings  | 
 自定义初始化标记。 CCE节点在初始化完成之前,会打上初始化未完成污点(node.cloudprovider.kubernetes.io/uninitialized)防止pod调度到节点上。 cce支持自定义初始化标记,在接收到initializedConditions参数后,会将参数值转换成节点标签,随节点下发,例如:cloudprovider.openvessel.io/inject-initialized-conditions=CCEInitial_CustomedInitial。 当节点上设置了此标签,会轮询节点的status.Conditions,查看conditions的type是否存在标记名,如CCEInitial、CustomedInitial标记,如果存在所有传入的标记,且状态为True,认为节点初始化完成,则移除初始化污点。 
  | 
| 
 extendParam  | 
 创建节点时的扩展参数。  | 
| 
 参数  | 
 参数类型  | 
 描述  | 
|---|---|---|
| 
 username  | 
 String  | 
 登录帐号,默认为“root”  | 
| 
 password  | 
 String  | 
 登录密码,若创建节点通过用户名密码方式,即使用该字段,则响应体中该字段作屏蔽展示。 密码复杂度要求: 
  | 
| 
 参数  | 
 参数类型  | 
 描述  | 
|---|---|---|
| 
 size  | 
 Integer  | 
 磁盘大小,单位为GB 
  | 
| 
 volumetype  | 
 String  | 
 磁盘类型,取值请参见创建云服务器 中“root_volume字段数据结构说明”。 
 说明:
 
了解不同磁盘类型的详细信息,链接请参见创建云服务器。  | 
| 
 extendParam  | 
 Map<String,Object>  | 
 磁盘扩展参数,取值请参见创建云服务器中“extendparam”参数的描述。 链接请参见创建云服务器  | 
| 
 cluster_id  | 
 String  | 
 云服务器系统盘对应的存储池的ID。仅用作专属云集群,专属分布式存储DSS的存储池ID,即dssPoolID。 获取方法请参见获取单个专属分布式存储池详情中“表3 响应参数”的ID字段。  | 
| 
 cluster_type  | 
 String  | 
 云服务器系统盘对应的磁盘存储类型。仅用作专属云集群,固定取值为dss。  | 
| 
 hw:passthrough  | 
 Boolean  | 
  | 
| 
 metadata  | 
 云硬盘加密信息,仅在创建节点系统盘或数据盘需加密时须填写。  | 
| 
 参数  | 
 参数类型  | 
 描述  | 
|---|---|---|
| 
 __system__encrypted  | 
 String  | 
 表示云硬盘加密功能的字段,'0'代表不加密,'1'代表加密。 该字段不存在时,云硬盘默认为不加密。  | 
| 
 __system__cmkid  | 
 String  | 
 用户主密钥ID,是metadata中的表示加密功能的字段,与__system__encrypted配合使用。  | 
| 
 参数  | 
 参数类型  | 
 描述  | 
|---|---|---|
| 
 storageSelectors  | 
 磁盘选择,根据matchLabels和storageType对匹配的磁盘进行管理。磁盘匹配存在先后顺序,靠前的匹配规则优先匹配。  | 
|
| 
 storageGroups  | 
 由多个存储设备组成的存储组,用于各个存储空间的划分。  | 
| 
 参数  | 
 参数类型  | 
 描述  | 
|---|---|---|
| 
 name  | 
 String  | 
 selector的名字,作为storageGroup中selectorNames的索引,因此各个selector间的名字不能重复。  | 
| 
 storageType  | 
 String  | 
 存储类型,当前仅支持evs(云硬盘)或local(本地盘);local存储类型不支持磁盘选择,所有本地盘将被组成一个VG,因此也仅允许只有一个local类型的storageSelector。  | 
| 
 matchLabels  | 
 evs盘的匹配字段,支持DataVolume中的size、volumeType、metadataEncrypted、metadataCmkid、count五个字段。  | 
| 
 参数  | 
 参数类型  | 
 描述  | 
|---|---|---|
| 
 size  | 
 String  | 
 匹配的磁盘大小,不填则无磁盘大小限制。例如:100.  | 
| 
 volumeType  | 
 String  | 
 云硬盘类型,目前支持SSD\GPSSD\SAS\ESSD\SATA等。  | 
| 
 metadataEncrypted  | 
 String  | 
 磁盘加密标识符,0代表不加密,1代表加密。  | 
| 
 metadataCmkid  | 
 String  | 
 加密磁盘的用户主密钥ID,长度为36字节的字符串。  | 
| 
 count  | 
 String  | 
 磁盘选择个数,不填则选择所有此类磁盘。  | 
| 
 参数  | 
 参数类型  | 
 描述  | 
|---|---|---|
| 
 name  | 
 String  | 
 storageGroups的名字,作为虚拟存储组的名字,因此各个group名字不能重复。 说明:
 
| 
  | 
| 
 cceManaged  | 
 Boolean  | 
 k8s及runtime所属存储空间。有且仅有一个group被设置为true,不填默认false。  | 
| 
 selectorNames  | 
 Array of strings  | 
 对应storageSelectors中的name,一个group可选择多个selector;但一个selector只能被一个group选择。  | 
| 
 virtualSpaces  | 
 group中空间配置的详细管理。  | 
| 
 参数  | 
 参数类型  | 
 描述  | 
|---|---|---|
| 
 name  | 
 String  | 
 virtualSpace的名称,当前仅支持三种类型:kubernetes、runtime、user。 
  | 
| 
 size  | 
 String  | 
 virtualSpace的大小,仅支持整数百分比。例如:90%。 说明:
 
一个group中所有virtualSpace的百分比之和不得超过100%  | 
| 
 lvmConfig  | 
 lvm配置管理,适用于kubernetes和user空间配置。 需要注意:一个virtualSpace仅支持一个config配置。  | 
|
| 
 runtimeConfig  | 
 runtime配置管理,适用于运行时空间配置。 需要注意:一个virtualSpace仅支持一个config配置。  | 
| 
 参数  | 
 参数类型  | 
 描述  | 
|---|---|---|
| 
 lvType  | 
 String  | 
 LVM写入模式:linear、striped。linear:线性模式;striped:条带模式,使用多块磁盘组成条带模式,能够提升磁盘性能。  | 
| 
 path  | 
 String  | 
 磁盘挂载路径。仅在用户配置中生效。支持包含:数字、大小写字母、点、中划线、下划线的绝对路径。  | 
| 
 参数  | 
 参数类型  | 
 描述  | 
|---|---|---|
| 
 lvType  | 
 String  | 
 LVM写入模式:linear、striped。linear:线性模式;striped:条带模式,使用多块磁盘组成条带模式,能够提升磁盘性能。  | 
| 
 参数  | 
 参数类型  | 
 描述  | 
|---|---|---|
| 
 ids  | 
 Array of strings  | 
 已有的弹性IP的ID列表。数量不得大于待创建节点数 说明:
 
若已配置ids参数,则无需配置count和eip参数  | 
| 
 count  | 
 Integer  | 
 要动态创建的弹性IP个数。 说明:
 
count参数与eip参数必须同时配置。  | 
| 
 eip  | 
 弹性IP参数  | 
| 
 参数  | 
 参数类型  | 
 描述  | 
|---|---|---|
| 
 iptype  | 
 String  | 
 弹性IP类型,取值请参见申请EIP接口中publicip.type说明。 链接请参见申请EIP  | 
| 
 bandwidth  | 
 弹性IP的带宽参数  | 
| 
 参数  | 
 参数类型  | 
 描述  | 
|---|---|---|
| 
 chargemode  | 
 String  | 
 带宽的计费类型: 
 说明:
 
  | 
| 
 size  | 
 Integer  | 
 带宽大小,取值请参见取值请参见申请EIP接口中bandwidth.size说明。 链接请参见申请EIP  | 
| 
 sharetype  | 
 String  | 
 带宽的共享类型,共享类型枚举:PER,表示独享,目前仅支持独享。  | 
| 
 参数  | 
 参数类型  | 
 描述  | 
|---|---|---|
| 
 subnetId  | 
 String  | 
 网卡所在子网的网络ID。主网卡创建时若未指定subnetId,将使用集群子网。扩展网卡创建时必须指定subnetId。  | 
| 
 fixedIps  | 
 Array of strings  | 
 主网卡的IP将通过fixedIps指定,数量不得大于创建的节点数。fixedIps或ipBlock同时只能指定一个。扩展网卡不支持指定fiexdIps。  | 
| 
 ipBlock  | 
 String  | 
 主网卡的IP段的CIDR格式,创建的节点IP将属于该IP段内。fixedIps或ipBlock同时只能指定一个。  | 
| 
 参数  | 
 参数类型  | 
 描述  | 
|---|---|---|
| 
 name  | 
 String  | 
 容器运行时,默认场景: 
  | 
| 
 参数  | 
 参数类型  | 
|---|---|
| 
 ecs:performancetype  | 
 String  | 
| 
 orderID  | 
 String  | 
| 
 productID  | 
 String  | 
| 
 maxPods  | 
 Integer  | 
| 
 periodType  | 
 String  | 
| 
 periodNum  | 
 Integer  | 
| 
 isAutoRenew  | 
 String  | 
| 
 isAutoPay  | 
 String  | 
| 
 DockerLVMConfigOverride  | 
 String  | 
| 
 dockerBaseSize  | 
 Integer  | 
| 
 publicKey  | 
 String  | 
| 
 alpha.cce/preInstall  | 
 String  | 
| 
 alpha.cce/postInstall  | 
 String  | 
| 
 alpha.cce/NodeImageID  | 
 String  | 
| 
 nicMultiqueue  | 
 String  | 
| 
 nicThreshold  | 
 String  | 
| 
 chargingMode  | 
 Integer  | 
| 
 agency_name  | 
 String  | 
| 
 kube-reserved-mem  | 
 Integer  | 
| 
 system-reserved-mem  | 
 Integer  | 
| 
 参数  | 
 参数类型  | 
 描述  | 
|---|---|---|
| 
 phase  | 
 String  | 
 节点状态:节点资源生命周期管理(如安装卸载等)状态和集群内k8s node状态的综合体现,取值如下 
  | 
| 
 lastProbeTime  | 
 String  | 
 节点最近一次状态检查时间。集群处于异常、冻结或者中间态(例如创建中)时,节点的状态检查动作可能受影响。检查时间超过5分的节点状态不具有参考意义。  | 
| 
 jobID  | 
 String  | 
 创建或删除时的任务ID。  | 
| 
 serverId  | 
 String  | 
 底层云服务器或裸金属节点ID。  | 
| 
 privateIP  | 
 String  | 
 节点主网卡私有网段IP地址。  | 
| 
 privateIPv6IP  | 
 String  | 
 节点主网卡私有网段IPv6地址。  | 
| 
 publicIP  | 
 String  | 
 节点弹性公网IP地址。如果ECS的数据没有实时同步,可在界面上通过“同步节点信息”手动进行更新。  | 
| 
 deleteStatus  | 
 删除资源时表示资源删除状态  | 
请求示例
- 创建一个包周期的节点,节点规格为2U4G,节点操作系统为EulerOS 2.5,使用Docker容器引擎。节点系统盘和数据盘大小分别为50GB和100GB,磁盘类型均为高IO。
POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes { "kind" : "Node", "apiVersion" : "v3", "metadata" : { "name" : "test-67235" }, "spec" : { "flavor" : "c7.large.2", "az" : "******", "os" : "EulerOS 2.5", "dataVolumes" : [ { "size" : 100, "volumetype" : "SAS" } ], "billingMode" : 1, "extendParam" : { "maxPods" : 110, "periodType" : "month", "periodNum" : 1, "isAutoPay" : "false", "isAutoRenew" : "false" }, "nodeNicSpec" : { "primaryNic" : { "subnetId" : "ca964acf-8468-4735-8229-97940ef6c881" } }, "rootVolume" : { "size" : 50, "volumetype" : "SAS" }, "runtime" : { "name" : "docker" }, "login" : { "sshKey" : "KeyPair-001" }, "storage" : { "storageSelectors" : [ { "name" : "cceUse", "storageType" : "evs", "matchLabels" : { "size" : "100", "volumeType" : "SAS", "count" : "1" } } ], "storageGroups" : [ { "name" : "vgpaas", "selectorNames" : [ "cceUse" ], "cceManaged" : true, "virtualSpaces" : [ { "name" : "runtime", "size" : "90%" }, { "name" : "kubernetes", "size" : "10%" } ] } ] }, "count" : 1 } } - 创建一个按需计费的节点,节点规格为2U4G,节点操作系统为EulerOS 2.5,使用Docker容器引擎。节点系统盘和数据盘大小分别为50GB和100GB,磁盘类型均为高IO。
POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes { "kind" : "Node", "apiVersion" : "v3", "metadata" : { "name" : "test-83790" }, "spec" : { "flavor" : "c7.large.2", "az" : "******", "os" : "EulerOS 2.5", "dataVolumes" : [ { "size" : 100, "volumetype" : "SAS" } ], "billingMode" : 0, "extendParam" : { "maxPods" : 110 }, "nodeNicSpec" : { "primaryNic" : { "subnetId" : "ca964acf-8468-4735-8229-97940ef6c881" } }, "rootVolume" : { "size" : 50, "volumetype" : "SAS" }, "runtime" : { "name" : "docker" }, "login" : { "sshKey" : "KeyPair-001" }, "storage" : { "storageSelectors" : [ { "name" : "cceUse", "storageType" : "evs", "matchLabels" : { "size" : "100", "volumeType" : "SAS", "count" : "1" } } ], "storageGroups" : [ { "name" : "vgpaas", "selectorNames" : [ "cceUse" ], "cceManaged" : true, "virtualSpaces" : [ { "name" : "runtime", "size" : "90%" }, { "name" : "kubernetes", "size" : "10%" } ] } ] }, "count" : 1 } } 
响应示例
状态码: 201
表示在指定集群下创建节点的作业下发成功。
{
  "kind" : "Node",
  "apiVersion" : "v3",
  "metadata" : {
    "name" : "test-83790",
    "uid" : "5ecfddfe-87db-11ec-b5e5-0255ac101514",
    "annotations" : {
      "jobid" : "5ec1518c-87db-11ec-b5e5-0255ac101514",
      "resourceJobId" : "5ed0d692-87db-11ec-b5e5-0255ac101514"
    }
  },
  "spec" : {
    "flavor" : "c7.large.2",
    "az" : "******",
    "os" : "EulerOS 2.5",
    "login" : {
      "sshKey" : "KeyPair-001"
    },
    "rootVolume" : {
      "volumetype" : "SAS",
      "size" : 50
    },
    "dataVolumes" : [ {
      "volumetype" : "SAS",
      "size" : 100
    } ],
    "storage" : {
      "storageSelectors" : [ {
        "name" : "cceUse",
        "storageType" : "evs",
        "matchLabels" : {
          "count" : "1",
          "size" : "100",
          "volumeType" : "SAS"
        }
      } ],
      "storageGroups" : [ {
        "name" : "vgpaas",
        "cceManaged" : true,
        "selectorNames" : [ "cceUse" ],
        "virtualSpaces" : [ {
          "name" : "runtime",
          "size" : "90%"
        }, {
          "name" : "kubernetes",
          "size" : "10%"
        } ]
      } ]
    },
    "publicIP" : {
      "eip" : {
        "bandwidth" : { }
      }
    },
    "nodeNicSpec" : {
      "primaryNic" : {
        "subnetId" : "ca964acf-8468-4735-8229-97940ef6c881"
      }
    },
    "count" : 1,
    "billingMode" : 0,
    "runtime" : {
      "name" : "docker"
    },
    "extendParam" : {
      "chargingMode" : 0,
      "ecs:performancetype" : "computingv3",
      "init-node-password" : "******",
      "maxPods" : 110,
      "publicKey" : ""
    }
  },
  "status" : {
    "jobID" : "5ec1518c-87db-11ec-b5e5-0255ac101514"
  }
}
SDK代码示例
SDK代码示例如下。
- 创建一个包周期的节点,节点规格为2U4G,节点操作系统为EulerOS 2.5,使用Docker容器引擎。节点系统盘和数据盘大小分别为50GB和100GB,磁盘类型均为高IO。
package com.huaweicloud.sdk.test; import com.huaweicloud.sdk.core.auth.ICredential; import com.huaweicloud.sdk.core.auth.BasicCredentials; import com.huaweicloud.sdk.core.exception.ConnectionException; import com.huaweicloud.sdk.core.exception.RequestTimeoutException; import com.huaweicloud.sdk.core.exception.ServiceResponseException; import com.huaweicloud.sdk.cce.v3.region.CceRegion; import com.huaweicloud.sdk.cce.v3.*; import com.huaweicloud.sdk.cce.v3.model.*; import com.huaweicloud.sdk.cce.v3.model.Runtime; import java.util.List; import java.util.ArrayList; public class CreateNodeSolution { public static void main(String[] args) { String ak = "<YOUR AK>"; String sk = "<YOUR SK>"; String projectId = "<project_id>"; ICredential auth = new BasicCredentials() .withProjectId(projectId) .withAk(ak) .withSk(sk); CceClient client = CceClient.newBuilder() .withCredential(auth) .withRegion(CceRegion.valueOf("cn-north-4")) .build(); CreateNodeRequest request = new CreateNodeRequest(); request.withClusterId("<cluster_id>"); NodeCreateRequest body = new NodeCreateRequest(); NodeExtendParam extendParamSpec = new NodeExtendParam(); extendParamSpec.withMaxPods(110) .withPeriodType("month") .withPeriodNum(1) .withIsAutoRenew("false") .withIsAutoPay("false"); Runtime runtimeSpec = new Runtime(); runtimeSpec.withName(Runtime.NameEnum.fromValue("docker")); NicSpec primaryNicNodeNicSpec = new NicSpec(); primaryNicNodeNicSpec.withSubnetId("ca964acf-8468-4735-8229-97940ef6c881"); NodeNicSpec nodeNicSpecSpec = new NodeNicSpec(); nodeNicSpecSpec.withPrimaryNic(primaryNicNodeNicSpec); List<VirtualSpace> listStorageGroupsVirtualSpaces = new ArrayList<>(); listStorageGroupsVirtualSpaces.add( new VirtualSpace() .withName("runtime") .withSize("90%") ); listStorageGroupsVirtualSpaces.add( new VirtualSpace() .withName("kubernetes") .withSize("10%") ); List<String> listStorageGroupsSelectorNames = new ArrayList<>(); listStorageGroupsSelectorNames.add("cceUse"); List<StorageGroups> listStorageStorageGroups = new ArrayList<>(); listStorageStorageGroups.add( new StorageGroups() .withName("vgpaas") .withCceManaged(true) .withSelectorNames(listStorageGroupsSelectorNames) .withVirtualSpaces(listStorageGroupsVirtualSpaces) ); StorageSelectorsMatchLabels matchLabelsStorageSelectors = new StorageSelectorsMatchLabels(); matchLabelsStorageSelectors.withSize("100") .withVolumeType("SAS") .withCount("1"); List<StorageSelectors> listStorageStorageSelectors = new ArrayList<>(); listStorageStorageSelectors.add( new StorageSelectors() .withName("cceUse") .withStorageType("evs") .withMatchLabels(matchLabelsStorageSelectors) ); Storage storageSpec = new Storage(); storageSpec.withStorageSelectors(listStorageStorageSelectors) .withStorageGroups(listStorageStorageGroups); List<Volume> listSpecDataVolumes = new ArrayList<>(); listSpecDataVolumes.add( new Volume() .withSize(100) .withVolumetype("SAS") ); Volume rootVolumeSpec = new Volume(); rootVolumeSpec.withSize(50) .withVolumetype("SAS"); Login loginSpec = new Login(); loginSpec.withSshKey("KeyPair-001"); NodeSpec specbody = new NodeSpec(); specbody.withFlavor("c7.large.2") .withAz("******") .withOs("EulerOS 2.5") .withLogin(loginSpec) .withRootVolume(rootVolumeSpec) .withDataVolumes(listSpecDataVolumes) .withStorage(storageSpec) .withNodeNicSpec(nodeNicSpecSpec) .withCount(1) .withBillingMode(1) .withRuntime(runtimeSpec) .withExtendParam(extendParamSpec); NodeMetadata metadatabody = new NodeMetadata(); metadatabody.withName("test-67235"); body.withSpec(specbody); body.withMetadata(metadatabody); body.withApiVersion("v3"); body.withKind("Node"); request.withBody(body); try { CreateNodeResponse response = client.createNode(request); System.out.println(response.toString()); } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); System.out.println(e.getHttpStatusCode()); System.out.println(e.getRequestId()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } } } - 创建一个按需计费的节点,节点规格为2U4G,节点操作系统为EulerOS 2.5,使用Docker容器引擎。节点系统盘和数据盘大小分别为50GB和100GB,磁盘类型均为高IO。
package com.huaweicloud.sdk.test; import com.huaweicloud.sdk.core.auth.ICredential; import com.huaweicloud.sdk.core.auth.BasicCredentials; import com.huaweicloud.sdk.core.exception.ConnectionException; import com.huaweicloud.sdk.core.exception.RequestTimeoutException; import com.huaweicloud.sdk.core.exception.ServiceResponseException; import com.huaweicloud.sdk.cce.v3.region.CceRegion; import com.huaweicloud.sdk.cce.v3.*; import com.huaweicloud.sdk.cce.v3.model.*; import com.huaweicloud.sdk.cce.v3.model.Runtime; import java.util.List; import java.util.ArrayList; public class CreateNodeSolution { public static void main(String[] args) { String ak = "<YOUR AK>"; String sk = "<YOUR SK>"; String projectId = "<project_id>"; ICredential auth = new BasicCredentials() .withProjectId(projectId) .withAk(ak) .withSk(sk); CceClient client = CceClient.newBuilder() .withCredential(auth) .withRegion(CceRegion.valueOf("cn-north-4")) .build(); CreateNodeRequest request = new CreateNodeRequest(); request.withClusterId("<cluster_id>"); NodeCreateRequest body = new NodeCreateRequest(); NodeExtendParam extendParamSpec = new NodeExtendParam(); extendParamSpec.withMaxPods(110); Runtime runtimeSpec = new Runtime(); runtimeSpec.withName(Runtime.NameEnum.fromValue("docker")); NicSpec primaryNicNodeNicSpec = new NicSpec(); primaryNicNodeNicSpec.withSubnetId("ca964acf-8468-4735-8229-97940ef6c881"); NodeNicSpec nodeNicSpecSpec = new NodeNicSpec(); nodeNicSpecSpec.withPrimaryNic(primaryNicNodeNicSpec); List<VirtualSpace> listStorageGroupsVirtualSpaces = new ArrayList<>(); listStorageGroupsVirtualSpaces.add( new VirtualSpace() .withName("runtime") .withSize("90%") ); listStorageGroupsVirtualSpaces.add( new VirtualSpace() .withName("kubernetes") .withSize("10%") ); List<String> listStorageGroupsSelectorNames = new ArrayList<>(); listStorageGroupsSelectorNames.add("cceUse"); List<StorageGroups> listStorageStorageGroups = new ArrayList<>(); listStorageStorageGroups.add( new StorageGroups() .withName("vgpaas") .withCceManaged(true) .withSelectorNames(listStorageGroupsSelectorNames) .withVirtualSpaces(listStorageGroupsVirtualSpaces) ); StorageSelectorsMatchLabels matchLabelsStorageSelectors = new StorageSelectorsMatchLabels(); matchLabelsStorageSelectors.withSize("100") .withVolumeType("SAS") .withCount("1"); List<StorageSelectors> listStorageStorageSelectors = new ArrayList<>(); listStorageStorageSelectors.add( new StorageSelectors() .withName("cceUse") .withStorageType("evs") .withMatchLabels(matchLabelsStorageSelectors) ); Storage storageSpec = new Storage(); storageSpec.withStorageSelectors(listStorageStorageSelectors) .withStorageGroups(listStorageStorageGroups); List<Volume> listSpecDataVolumes = new ArrayList<>(); listSpecDataVolumes.add( new Volume() .withSize(100) .withVolumetype("SAS") ); Volume rootVolumeSpec = new Volume(); rootVolumeSpec.withSize(50) .withVolumetype("SAS"); Login loginSpec = new Login(); loginSpec.withSshKey("KeyPair-001"); NodeSpec specbody = new NodeSpec(); specbody.withFlavor("c7.large.2") .withAz("******") .withOs("EulerOS 2.5") .withLogin(loginSpec) .withRootVolume(rootVolumeSpec) .withDataVolumes(listSpecDataVolumes) .withStorage(storageSpec) .withNodeNicSpec(nodeNicSpecSpec) .withCount(1) .withBillingMode(0) .withRuntime(runtimeSpec) .withExtendParam(extendParamSpec); NodeMetadata metadatabody = new NodeMetadata(); metadatabody.withName("test-83790"); body.withSpec(specbody); body.withMetadata(metadatabody); body.withApiVersion("v3"); body.withKind("Node"); request.withBody(body); try { CreateNodeResponse response = client.createNode(request); System.out.println(response.toString()); } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); System.out.println(e.getHttpStatusCode()); System.out.println(e.getRequestId()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } } } 
- 创建一个包周期的节点,节点规格为2U4G,节点操作系统为EulerOS 2.5,使用Docker容器引擎。节点系统盘和数据盘大小分别为50GB和100GB,磁盘类型均为高IO。
# coding: utf-8 from huaweicloudsdkcore.auth.credentials import BasicCredentials from huaweicloudsdkcce.v3.region.cce_region import CceRegion from huaweicloudsdkcore.exceptions import exceptions from huaweicloudsdkcce.v3 import * if __name__ == "__main__": ak = "<YOUR AK>" sk = "<YOUR SK>" projectId = "<project_id>" credentials = BasicCredentials(ak, sk, projectId) \ client = CceClient.new_builder() \ .with_credentials(credentials) \ .with_region(CceRegion.value_of("cn-north-4")) \ .build() try: request = CreateNodeRequest() request.cluster_id = "<cluster_id>" extendParamSpec = NodeExtendParam( max_pods=110, period_type="month", period_num=1, is_auto_renew="false", is_auto_pay="false" ) runtimeSpec = Runtime( name="docker" ) primaryNicNodeNicSpec = NicSpec( subnet_id="ca964acf-8468-4735-8229-97940ef6c881" ) nodeNicSpecSpec = NodeNicSpec( primary_nic=primaryNicNodeNicSpec ) listVirtualSpacesStorageGroups = [ VirtualSpace( name="runtime", size="90%" ), VirtualSpace( name="kubernetes", size="10%" ) ] listSelectorNamesStorageGroups = [ "cceUse" ] listStorageGroupsStorage = [ StorageGroups( name="vgpaas", cce_managed=True, selector_names=listSelectorNamesStorageGroups, virtual_spaces=listVirtualSpacesStorageGroups ) ] matchLabelsStorageSelectors = StorageSelectorsMatchLabels( size="100", volume_type="SAS", count="1" ) listStorageSelectorsStorage = [ StorageSelectors( name="cceUse", storage_type="evs", match_labels=matchLabelsStorageSelectors ) ] storageSpec = Storage( storage_selectors=listStorageSelectorsStorage, storage_groups=listStorageGroupsStorage ) listDataVolumesSpec = [ Volume( size=100, volumetype="SAS" ) ] rootVolumeSpec = Volume( size=50, volumetype="SAS" ) loginSpec = Login( ssh_key="KeyPair-001" ) specbody = NodeSpec( flavor="c7.large.2", az="******", os="EulerOS 2.5", login=loginSpec, root_volume=rootVolumeSpec, data_volumes=listDataVolumesSpec, storage=storageSpec, node_nic_spec=nodeNicSpecSpec, count=1, billing_mode=1, runtime=runtimeSpec, extend_param=extendParamSpec ) metadatabody = NodeMetadata( name="test-67235" ) request.body = NodeCreateRequest( spec=specbody, metadata=metadatabody, api_version="v3", kind="Node" ) response = client.create_node(request) print(response) except exceptions.ClientRequestException as e: print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg) - 创建一个按需计费的节点,节点规格为2U4G,节点操作系统为EulerOS 2.5,使用Docker容器引擎。节点系统盘和数据盘大小分别为50GB和100GB,磁盘类型均为高IO。
# coding: utf-8 from huaweicloudsdkcore.auth.credentials import BasicCredentials from huaweicloudsdkcce.v3.region.cce_region import CceRegion from huaweicloudsdkcore.exceptions import exceptions from huaweicloudsdkcce.v3 import * if __name__ == "__main__": ak = "<YOUR AK>" sk = "<YOUR SK>" projectId = "<project_id>" credentials = BasicCredentials(ak, sk, projectId) \ client = CceClient.new_builder() \ .with_credentials(credentials) \ .with_region(CceRegion.value_of("cn-north-4")) \ .build() try: request = CreateNodeRequest() request.cluster_id = "<cluster_id>" extendParamSpec = NodeExtendParam( max_pods=110 ) runtimeSpec = Runtime( name="docker" ) primaryNicNodeNicSpec = NicSpec( subnet_id="ca964acf-8468-4735-8229-97940ef6c881" ) nodeNicSpecSpec = NodeNicSpec( primary_nic=primaryNicNodeNicSpec ) listVirtualSpacesStorageGroups = [ VirtualSpace( name="runtime", size="90%" ), VirtualSpace( name="kubernetes", size="10%" ) ] listSelectorNamesStorageGroups = [ "cceUse" ] listStorageGroupsStorage = [ StorageGroups( name="vgpaas", cce_managed=True, selector_names=listSelectorNamesStorageGroups, virtual_spaces=listVirtualSpacesStorageGroups ) ] matchLabelsStorageSelectors = StorageSelectorsMatchLabels( size="100", volume_type="SAS", count="1" ) listStorageSelectorsStorage = [ StorageSelectors( name="cceUse", storage_type="evs", match_labels=matchLabelsStorageSelectors ) ] storageSpec = Storage( storage_selectors=listStorageSelectorsStorage, storage_groups=listStorageGroupsStorage ) listDataVolumesSpec = [ Volume( size=100, volumetype="SAS" ) ] rootVolumeSpec = Volume( size=50, volumetype="SAS" ) loginSpec = Login( ssh_key="KeyPair-001" ) specbody = NodeSpec( flavor="c7.large.2", az="******", os="EulerOS 2.5", login=loginSpec, root_volume=rootVolumeSpec, data_volumes=listDataVolumesSpec, storage=storageSpec, node_nic_spec=nodeNicSpecSpec, count=1, billing_mode=0, runtime=runtimeSpec, extend_param=extendParamSpec ) metadatabody = NodeMetadata( name="test-83790" ) request.body = NodeCreateRequest( spec=specbody, metadata=metadatabody, api_version="v3", kind="Node" ) response = client.create_node(request) print(response) except exceptions.ClientRequestException as e: print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg) 
- 创建一个包周期的节点,节点规格为2U4G,节点操作系统为EulerOS 2.5,使用Docker容器引擎。节点系统盘和数据盘大小分别为50GB和100GB,磁盘类型均为高IO。
package main import ( "fmt" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" cce "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3" "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3/model" region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3/region" ) func main() { ak := "<YOUR AK>" sk := "<YOUR SK>" projectId := "<project_id>" auth := basic.NewCredentialsBuilder(). WithAk(ak). WithSk(sk). WithProjectId(projectId). Build() client := cce.NewCceClient( cce.CceClientBuilder(). WithRegion(region.ValueOf("cn-north-4")). WithCredential(auth). Build()) request := &model.CreateNodeRequest{} request.ClusterId = "<cluster_id>" maxPodsExtendParam:= int32(110) periodTypeExtendParam:= "month" periodNumExtendParam:= int32(1) isAutoRenewExtendParam:= "false" isAutoPayExtendParam:= "false" extendParamSpec := &model.NodeExtendParam{ MaxPods: &maxPodsExtendParam, PeriodType: &periodTypeExtendParam, PeriodNum: &periodNumExtendParam, IsAutoRenew: &isAutoRenewExtendParam, IsAutoPay: &isAutoPayExtendParam, } nameRuntime:= model.GetRuntimeNameEnum().DOCKER runtimeSpec := &model.Runtime{ Name: &nameRuntime, } subnetIdPrimaryNic:= "ca964acf-8468-4735-8229-97940ef6c881" primaryNicNodeNicSpec := &model.NicSpec{ SubnetId: &subnetIdPrimaryNic, } nodeNicSpecSpec := &model.NodeNicSpec{ PrimaryNic: primaryNicNodeNicSpec, } var listVirtualSpacesStorageGroups = []model.VirtualSpace{ { Name: "runtime", Size: "90%", }, { Name: "kubernetes", Size: "10%", }, } var listSelectorNamesStorageGroups = []string{ "cceUse", } cceManagedStorageGroups:= true var listStorageGroupsStorage = []model.StorageGroups{ { Name: "vgpaas", CceManaged: &cceManagedStorageGroups, SelectorNames: listSelectorNamesStorageGroups, VirtualSpaces: listVirtualSpacesStorageGroups, }, } sizeMatchLabels:= "100" volumeTypeMatchLabels:= "SAS" countMatchLabels:= "1" matchLabelsStorageSelectors := &model.StorageSelectorsMatchLabels{ Size: &sizeMatchLabels, VolumeType: &volumeTypeMatchLabels, Count: &countMatchLabels, } var listStorageSelectorsStorage = []model.StorageSelectors{ { Name: "cceUse", StorageType: "evs", MatchLabels: matchLabelsStorageSelectors, }, } storageSpec := &model.Storage{ StorageSelectors: listStorageSelectorsStorage, StorageGroups: listStorageGroupsStorage, } var listDataVolumesSpec = []model.Volume{ { Size: int32(100), Volumetype: "SAS", }, } rootVolumeSpec := &model.Volume{ Size: int32(50), Volumetype: "SAS", } sshKeyLogin:= "KeyPair-001" loginSpec := &model.Login{ SshKey: &sshKeyLogin, } osSpec:= "EulerOS 2.5" countSpec:= int32(1) billingModeSpec:= int32(1) specbody := &model.NodeSpec{ Flavor: "c7.large.2", Az: "******", Os: &osSpec, Login: loginSpec, RootVolume: rootVolumeSpec, DataVolumes: listDataVolumesSpec, Storage: storageSpec, NodeNicSpec: nodeNicSpecSpec, Count: &countSpec, BillingMode: &billingModeSpec, Runtime: runtimeSpec, ExtendParam: extendParamSpec, } nameMetadata:= "test-67235" metadatabody := &model.NodeMetadata{ Name: &nameMetadata, } request.Body = &model.NodeCreateRequest{ Spec: specbody, Metadata: metadatabody, ApiVersion: "v3", Kind: "Node", } response, err := client.CreateNode(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) } } - 创建一个按需计费的节点,节点规格为2U4G,节点操作系统为EulerOS 2.5,使用Docker容器引擎。节点系统盘和数据盘大小分别为50GB和100GB,磁盘类型均为高IO。
package main import ( "fmt" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" cce "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3" "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3/model" region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3/region" ) func main() { ak := "<YOUR AK>" sk := "<YOUR SK>" projectId := "<project_id>" auth := basic.NewCredentialsBuilder(). WithAk(ak). WithSk(sk). WithProjectId(projectId). Build() client := cce.NewCceClient( cce.CceClientBuilder(). WithRegion(region.ValueOf("cn-north-4")). WithCredential(auth). Build()) request := &model.CreateNodeRequest{} request.ClusterId = "<cluster_id>" maxPodsExtendParam:= int32(110) extendParamSpec := &model.NodeExtendParam{ MaxPods: &maxPodsExtendParam, } nameRuntime:= model.GetRuntimeNameEnum().DOCKER runtimeSpec := &model.Runtime{ Name: &nameRuntime, } subnetIdPrimaryNic:= "ca964acf-8468-4735-8229-97940ef6c881" primaryNicNodeNicSpec := &model.NicSpec{ SubnetId: &subnetIdPrimaryNic, } nodeNicSpecSpec := &model.NodeNicSpec{ PrimaryNic: primaryNicNodeNicSpec, } var listVirtualSpacesStorageGroups = []model.VirtualSpace{ { Name: "runtime", Size: "90%", }, { Name: "kubernetes", Size: "10%", }, } var listSelectorNamesStorageGroups = []string{ "cceUse", } cceManagedStorageGroups:= true var listStorageGroupsStorage = []model.StorageGroups{ { Name: "vgpaas", CceManaged: &cceManagedStorageGroups, SelectorNames: listSelectorNamesStorageGroups, VirtualSpaces: listVirtualSpacesStorageGroups, }, } sizeMatchLabels:= "100" volumeTypeMatchLabels:= "SAS" countMatchLabels:= "1" matchLabelsStorageSelectors := &model.StorageSelectorsMatchLabels{ Size: &sizeMatchLabels, VolumeType: &volumeTypeMatchLabels, Count: &countMatchLabels, } var listStorageSelectorsStorage = []model.StorageSelectors{ { Name: "cceUse", StorageType: "evs", MatchLabels: matchLabelsStorageSelectors, }, } storageSpec := &model.Storage{ StorageSelectors: listStorageSelectorsStorage, StorageGroups: listStorageGroupsStorage, } var listDataVolumesSpec = []model.Volume{ { Size: int32(100), Volumetype: "SAS", }, } rootVolumeSpec := &model.Volume{ Size: int32(50), Volumetype: "SAS", } sshKeyLogin:= "KeyPair-001" loginSpec := &model.Login{ SshKey: &sshKeyLogin, } osSpec:= "EulerOS 2.5" countSpec:= int32(1) billingModeSpec:= int32(0) specbody := &model.NodeSpec{ Flavor: "c7.large.2", Az: "******", Os: &osSpec, Login: loginSpec, RootVolume: rootVolumeSpec, DataVolumes: listDataVolumesSpec, Storage: storageSpec, NodeNicSpec: nodeNicSpecSpec, Count: &countSpec, BillingMode: &billingModeSpec, Runtime: runtimeSpec, ExtendParam: extendParamSpec, } nameMetadata:= "test-83790" metadatabody := &model.NodeMetadata{ Name: &nameMetadata, } request.Body = &model.NodeCreateRequest{ Spec: specbody, Metadata: metadatabody, ApiVersion: "v3", Kind: "Node", } response, err := client.CreateNode(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) } } 
更多编程语言的SDK代码示例,请参见API Explorer的代码示例页签,可生成自动对应的SDK代码示例。
状态码
| 
 状态码  | 
 描述  | 
|---|---|
| 
 201  | 
 表示在指定集群下创建节点的作业下发成功。  | 
错误码
请参见错误码。
  
    
