华为云计算 云知识 创建节点池CreateNodePool
创建节点池CreateNodePool

 

功能介绍

该API用于在指定集群下创建节点池。仅支持集群在处于可用、扩容、缩容状态时调用。

1.21版本的集群创建节点池时支持绑定安全组,每个节点池最多绑定五个安全组。

更新节点池的安全组后,只针对新创的pod生效,建议驱逐节点上原有的pod。

若无集群,请先创建集群。 集群管理的URL格式为:https://Endpoint/uri。其中uri为资源路径,也即API访问的路径

调用方法

请参见如何调用API

URI

POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools

表1 路径参数

参数

是否必选

参数类型

描述

project_id

String

项目ID,获取方式请参见如何获取接口URI中参数

cluster_id

String

集群ID,获取方式请参见如何获取接口URI中参数

请求参数

表2 请求Header参数

参数

是否必选

参数类型

描述

Content-Type

String

消息体的类型(格式)

X-Auth-Token

String

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

表3 请求Body参数

参数

是否必选

参数类型

描述

kind

String

API类型,固定值“NodePool”。

apiVersion

String

API版本,固定值“v3”。

metadata

NodePoolMetadata object

节点池的元数据信息

spec

NodePoolSpec object

节点池的规格描述

status

NodePoolStatus object

节点池状态

表4 NodePoolMetadata

参数

是否必选

参数类型

描述

name

String

节点名池名称。

说明:

命名规则:

  • 以小写字母开头,由小写字母、数字、中划线(-)组成,长度范围1-50位,且不能以中划线(-)结尾。
  • 不允许创建名为 DefaultPool 的节点池。

uid

String

节点池的uid。创建成功后自动生成,填写无效

annotations

Map<String,String>

节点池的注解,以key value对表示。仅用于查询,不支持请求时传入,填写无效。

updateTimestamp

String

更新时间

creationTimestamp

String

创建时间

表5 NodePoolSpec

参数

是否必选

参数类型

描述

type

String

节点池类型。不填写时默认为vm。

nodeTemplate

NodeSpec object

节点池模板详细参数。

initialNodeCount

Integer

节点池初始化节点个数。查询时为节点池目标节点数量。

autoscaling

NodePoolNodeAutoscaling object

弹性伸缩 参数。

nodeManagement

NodeManagement object

节点管理相关配置

podSecurityGroups

Array of SecurityID objects

安全组相关配置, 仅turbo集群支持配置该参数。

customSecurityGroups

Array of strings

节点池自定义安全组相关配置。支持节点池新扩容节点绑定指定的安全组。

  • 未指定安全组ID,新建节点将添加Node节点默认安全组。
  • 指定有效安全组ID,新建节点将使用指定安全组。
  • 指定安全组,应避免对CCE运行依赖的端口规则进行修改。详细设置请参考集群安全组规则配置
表6 NodeSpec

参数

是否必选

参数类型

描述

flavor

String

节点的规格,CCE支持的节点规格请参考节点规格说明获取。

az

String

待创建节点所在的可用区,需要指定可用区(AZ)的名称。 CCE支持的可用区请参考地区和 终端节点

os

String

节点的操作系统类型。具体支持的操作系统请参见节点操作系统说明

说明:
  • 系统会根据集群版本自动选择支持的系统版本。当前集群版本不支持该系统类型,则会报错。
  • 若在创建节点时指定了extendParam中的alpha.cce/NodeImageID参数,可以不填写此参数。
  • 创建节点池时,该参数为必选。

login

Login object

节点的登录方式。密钥对和密码登录方式二者必选其一。

rootVolume

Volume object

节点的磁盘信息

dataVolumes

Array of Volume objects

节点的数据盘参数(目前已支持通过控制台为CCE节点添加第二块数据盘)。 如果数据盘正供容器运行时和Kubelet组件使用,则不可被卸载,否则将导致节点不可用。 针对专属云节点,参数解释与rootVolume一致

storage

Storage object

磁盘初始化配置管理参数。

该参数配置逻辑较为复杂,详细说明请参见节点磁盘挂载

该参数缺省时,按照extendParam中的DockerLVMConfigOverride(已废弃)参数进行磁盘管理。此参数对1.15.11及以上集群版本支持。

说明:

如存在节点规格涉及本地盘并同时使用 云硬盘 场景时,请勿缺省此参数,避免出现将用户未期望的磁盘分区。

publicIP

NodePublicIP object

节点的 弹性公网IP

说明:

创建节点池添加节点时不支持该参数。

nodeNicSpec

NodeNicSpec object

节点的网卡信息

count

Integer

批量创建时节点的个数,必须为大于等于1,小于等于最大限额的正整数。作用于节点池时该项可以不填写。

billingMode

Integer

节点的计费模式:

  • 0: 按需付费
  • 1: 包周期
  • 2: 已废弃:自动付费包周期

taints

Array of Taint objects

支持给创建出来的节点加Taints来设置反亲和性,taints配置不超过20条。每条Taints包含以下3个参数:

  • Key:必须以字母或数字开头,可以包含字母、数字、连字符、下划线和点,最长63个字符;另外可以使用DNS子域作为前缀。
  • Value:必须以字符或数字开头,可以包含字母、数字、连字符、下划线和点,最长63个字符。
  • Effect:只可选NoSchedule,PreferNoSchedule或NoExecute。 字段使用场景:在节点创建场景下,支持指定初始值,查询时不返回该字段;在节点池场景下,其中节点模板中支持指定初始值,查询时支持返回该字段;在其余场景下,查询时都不会返回该字段。

示例:

"taints": [{
  "key": "status",
  "value": "unavailable",
  "effect": "NoSchedule"
}, {
  "key": "looks",
  "value": "bad",
  "effect": "NoSchedule"
}]

k8sTags

Map<String,String>

格式为key/value键值对。键值对个数不超过20条。

  • Key:必须以字母或数字开头,可以包含字母、数字、连字符、下划线和点,最长63个字符;另外可以使用DNS子域作为前缀,例如example.com/my-key,DNS子域最长253个字符。
  • Value:可以为空或者非空字符串,非空字符串必须以字符或数字开头,可以包含字母、数字、连字符、下划线和点,最长63个字符。 字段使用场景:在节点创建场景下,支持指定初始值,查询时不返回该字段;在节点池场景下,其中节点模板中支持指定初始值,查询时支持返回该字段;在其余场景下,查询时都不会返回该字段。

示例:

"k8sTags": {
  "key": "value"
}

ecsGroupId

String

云服务器组ID,若指定,将节点创建在该云服务器组下

dedicatedHostId

String

指定DeH主机的ID,将节点调度到自己的DeH上。

说明:

创建节点池添加节点时不支持该参数。

userTags

Array of UserTag objects

云服务器标签,键必须唯一,CCE支持的最大用户自定义标签数量依region而定,自定义标签数上限为8个。 字段使用场景:在节点创建场景下,支持指定初始值,查询时不返回该字段;在节点池场景下,其中节点模板中支持指定初始值,查询时支持返回该字段;在其余场景下,查询时都不会返回该字段。

说明:

标签键只能包含大写字母.小写字母、数字和特殊字符(-_)以及Unicode字符,长度不超过36个字符。

runtime

Runtime object

容器运行时, 默认场景:

  • 1.25以下集群:默认为" docker "
  • 1.25及以上集群,随操作系统变化,默认的容器运行时不同:操作系统为欧拉2.5、欧拉2.8的节点默认为"docker",其余操作系统的节点默认为"containerd"

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,认为节点初始化完成,则移除初始化污点。

  • 必须以字母、数字组成,长度范围1-20位。
  • 标记数量不超过2个

extendParam

NodeExtendParam object

创建节点时的扩展参数。

表7 Login

参数

是否必选

参数类型

描述

sshKey

String

选择密钥对方式登录时的密钥对名称。

userPassword

UserPassword object

选择密码方式登录时的帐号密码信息,之后可通过此帐号密码登录节点。

表8 UserPassword

参数

是否必选

参数类型

描述

username

String

登录帐号,默认为“root”

password

String

登录密码,若创建节点通过用户名密码方式,即使用该字段,则响应体中该字段作屏蔽展示。 密码复杂度要求:

  • 长度为8-26位。
  • 密码至少必须包含大写字母、小写字母、数字和特殊字符(!@$%^-_=+[{}]:,./?~#*)中的三种。
  • 密码不能包含用户名或用户名的逆序。 创建节点时password字段需要加盐加密,具体方法请参见创建节点时password字段加盐加密
表9 Volume

参数

是否必选

参数类型

描述

size

Integer

磁盘大小,单位为GB

  • 系统盘取值范围:40~1024
  • 数据盘取值范围:100~32768

volumetype

String

磁盘类型,取值请参见创建云服务器 中“root_volume字段数据结构说明”。

  • SAS:高IO,是指由SAS存储提供资源的磁盘类型。
  • SSD:超高IO,是指由SSD存储提供资源的磁盘类型。
  • SATA:普通IO,是指由SATA存储提供资源的磁盘类型。EVS已下线SATA磁盘,仅存量节点有此类型的磁盘。
  • ESSD:通用型SSD云硬盘,是指由SSD存储提供资源的磁盘类型。
  • GPSDD:通用型SSD云硬盘,是指由SSD存储提供资源的磁盘类型。
说明:

了解不同磁盘类型的详细信息,链接请参见创建云服务器

extendParam

Map<String,Object>

磁盘扩展参数,取值请参见创建云服务器中“extendparam”参数的描述。 链接请参见创建云服务器

cluster_id

String

云服务器系统盘对应的存储池的ID。仅用作专属云集群, 专属分布式存储 DSS的存储池ID,即dssPoolID。

获取方法请参见获取单个专属分布式存储池详情中“表3 响应参数”的ID字段。

cluster_type

String

云服务器系统盘对应的磁盘存储类型。仅用作专属云集群,固定取值为dss。

hw:passthrough

Boolean

  • 使用SDI规格创建虚拟机时请关注该参数,如果该参数值为true,说明创建的为SCSI类型的卷
  • 节点池类型为ElasticBMS时,此参数必须填写为true
  • 如存在节点规格涉及本地盘并同时使用云硬盘场景时,请设置磁盘初始化配置管理参数,参见节点磁盘挂载

metadata

VolumeMetadata object

云硬盘加密信息,仅在创建节点系统盘或数据盘需加密时须填写。

表10 VolumeMetadata

参数

是否必选

参数类型

描述

__system__encrypted

String

表示云硬盘加密功能的字段,'0'代表不加密,'1'代表加密。

该字段不存在时,云硬盘默认为不加密。

__system__cmkid

String

用户主密钥ID,是metadata中的表示加密功能的字段,与__system__encrypted配合使用。

表11 Storage

参数

是否必选

参数类型

描述

storageSelectors

Array of StorageSelectors objects

磁盘选择,根据matchLabels和storageType对匹配的磁盘进行管理。磁盘匹配存在先后顺序,靠前的匹配规则优先匹配。

storageGroups

Array of StorageGroups objects

由多个存储设备组成的存储组,用于各个存储空间的划分。

表12 StorageSelectors

参数

是否必选

参数类型

描述

name

String

selector的名字,作为storageGroup中selectorNames的索引,因此各个selector间的名字不能重复。

storageType

String

存储类型,当前仅支持evs(云硬盘)或local(本地盘);local存储类型不支持磁盘选择,所有本地盘将被组成一个VG,因此也仅允许只有一个local类型的storageSelector。

matchLabels

matchLabels object

evs盘的匹配字段,支持DataVolume中的size、volumeType、metadataEncrypted、metadataCmkid、count五个字段。

表13 matchLabels

参数

是否必选

参数类型

描述

size

String

匹配的磁盘大小,不填则无磁盘大小限制。例如:100.

volumeType

String

云硬盘类型,目前支持SSD\GPSSD\SAS\ESSD\SATA等。

metadataEncrypted

String

磁盘加密标识符,0代表不加密,1代表加密。

metadataCmkid

String

加密磁盘的用户主密钥ID,长度为36字节的字符串。

count

String

磁盘选择个数,不填则选择所有此类磁盘。

表14 StorageGroups

参数

是否必选

参数类型

描述

name

String

storageGroups的名字,作为虚拟存储组的名字,因此各个group名字不能重复。

说明:

|

  • 当cceManaged=ture时,name必须为:vgpass。
  • 当数据盘作为临时存储卷时:name必须为:vg-everest-localvolume-ephemeral。
  • 当数据盘作为持久存储卷时:name必须为:vg-everest-localvolume-persistent。

cceManaged

Boolean

k8s及runtime所属存储空间。有且仅有一个group被设置为true,不填默认false。

selectorNames

Array of strings

对应storageSelectors中的name,一个group可选择多个selector;但一个selector只能被一个group选择。

virtualSpaces

Array of VirtualSpace objects

group中空间配置的详细管理。

表15 VirtualSpace

参数

是否必选

参数类型

描述

name

String

virtualSpace的名称,当前仅支持三种类型:kubernetes、runtime、user。

  • kubernetes:k8s空间配置,需配置lvmConfig;
  • runtime:运行时空间配置,需配置runtimeConfig;
  • user:用户空间配置,需配置lvmConfig

size

String

virtualSpace的大小,仅支持整数百分比。例如:90%。

说明:

一个group中所有virtualSpace的百分比之和不得超过100%

lvmConfig

LVMConfig object

lvm配置管理,适用于kubernetes和user空间配置。 需要注意:一个virtualSpace仅支持一个config配置。

runtimeConfig

RuntimeConfig object

runtime配置管理,适用于运行时空间配置。 需要注意:一个virtualSpace仅支持一个config配置。

表16 LVMConfig

参数

是否必选

参数类型

描述

lvType

String

LVM写入模式:linear、striped。linear:线性模式;striped:条带模式,使用多块磁盘组成条带模式,能够提升磁盘性能。

path

String

磁盘挂载路径。仅在用户配置中生效。支持包含:数字、大小写字母、点、中划线、下划线的绝对路径。

表17 RuntimeConfig

参数

是否必选

参数类型

描述

lvType

String

LVM写入模式:linear、striped。linear:线性模式;striped:条带模式,使用多块磁盘组成条带模式,能够提升磁盘性能。

表18 NodePublicIP

参数

是否必选

参数类型

描述

ids

Array of strings

已有的弹性IP的ID列表。数量不得大于待创建节点数

说明:

若已配置ids参数,则无需配置count和eip参数

count

Integer

要动态创建的弹性IP个数。

说明:

count参数与eip参数必须同时配置。

eip

NodeEIPSpec object

弹性IP参数

表19 NodeEIPSpec

参数

是否必选

参数类型

描述

iptype

String

弹性IP类型,取值请参见申请EIP接口中publicip.type说明。 链接请参见申请EIP

bandwidth

NodeBandwidth object

弹性IP的带宽参数

表20 NodeBandwidth

参数

是否必选

参数类型

描述

chargemode

String

带宽的计费类型:

  • 未传该字段,表示按带宽计费。 - 字段值为空,表示按带宽计费。
  • 字段值为“traffic”,表示按流量计费。
  • 字段为其它值,会导致创建云服务器失败。
说明:
  • 按带宽计费:按公网传输速率(单位为Mbps)计费。当您的带宽利用率高于10%时,建议优先选择按带宽计费。
  • 按流量计费:只允许在创建按需节点时指定,按公网传输的数据总量(单位为GB)计费。当您的带宽利用率低于10%时,建议优先选择按流量计费。

size

Integer

带宽大小,取值请参见取值请参见申请EIP接口中bandwidth.size说明。 链接请参见申请EIP

sharetype

String

带宽的共享类型,共享类型枚举:PER,表示独享,目前仅支持独享。

表21 NodeNicSpec

参数

是否必选

参数类型

描述

primaryNic

NicSpec object

主网卡的描述信息。

extNics

Array of NicSpec objects

扩展网卡

说明:

创建节点池添加节点时不支持该参数。

表22 NicSpec

参数

是否必选

参数类型

描述

subnetId

String

网卡所在子网的网络ID。主网卡创建时若未指定subnetId,将使用集群子网。扩展网卡创建时必须指定subnetId。

fixedIps

Array of strings

主网卡的IP将通过fixedIps指定,数量不得大于创建的节点数。fixedIps或ipBlock同时只能指定一个。扩展网卡不支持指定fiexdIps。

ipBlock

String

主网卡的IP段的CIDR格式,创建的节点IP将属于该IP段内。fixedIps或ipBlock同时只能指定一个。

表23 Taint

参数

是否必选

参数类型

描述

key

String

value

String

effect

String

作用效果

表24 UserTag

参数

是否必选

参数类型

描述

key

String

云服务器标签的键。不得以"CCE-"或"__type_baremetal"开头

value

String

云服务器标签的值

表25 Runtime

参数

是否必选

参数类型

描述

name

String

容器运行时,默认场景:

  • v1.25以下集群:默认为"docker"
  • v1.25及以上集群,随操作系统变化,默认的容器运行时不同:操作系统为EulerOS 2.5、EulerOS 2.8的节点默认为"docker",其余操作系统的节点默认为"containerd"
表26 NodeExtendParam

参数

是否必选

参数类型

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

表27 NodePoolNodeAutoscaling

参数

是否必选

参数类型

描述

enable

Boolean

是否开启自动扩缩容

minNodeCount

Integer

若开启自动扩缩容,最小能缩容的节点个数。不可大于集群规格所允许的节点上限

maxNodeCount

Integer

若开启自动扩缩容,最大能扩容的节点个数,应大于等于 minNodeCount,且不超过集群规格对应的节点数量上限。

scaleDownCooldownTime

Integer

节点保留时间,单位为分钟,扩容出来的节点在这个时间内不会被缩掉

priority

Integer

节点池权重,更高的权重在扩容时拥有更高的优先级

表28 NodeManagement

参数

是否必选

参数类型

描述

serverGroupReference

String

云服务器组ID,若指定,节点池中所有节点将创建在该云服务器组下,节点池的云服务器组只能在创建时指定,无法修改。指定云服务器组时节点池中的节点数量不允许超出云服务器组的配额限制。

表29 SecurityID

参数

是否必选

参数类型

描述

id

String

安全组ID。

表30 NodePoolStatus

参数

是否必选

参数类型

描述

currentNode

Integer

当前节点池中所有节点数量(不含删除中的节点)。

creatingNode

Integer

当前节点池中处于创建流程中的节点数量。

deletingNode

Integer

当前节点池中删除中的节点数量。

phase

String

节点池状态。

  • 空值:可用(节点池当前节点数已达到预期,且无伸缩中的节点)
  • Synchronizing:伸缩中(节点池当前节点数未达到预期,且无伸缩中的节点)
  • Synchronized:伸缩等待中(节点池当前节点数未达到预期,或者存在伸缩中的节点)
  • SoldOut:节点池当前不可扩容(兼容字段,标记节点池资源售罄、资源配额不足等不可扩容状态)
说明:

上述节点池状态已废弃,仅兼容保留,不建议使用,替代感知方式如下:

  • 节点池扩缩状态:可通过currentNode/creatingNode/deletingNode节点状态统计信息,精确感知当前节点池扩缩状态。
  • 节点池可扩容状态:可通过conditions感知节点池详细状态,其中"Scalable"可替代SoldOut语义。
  • Deleting:删除中
  • Error:错误

jobId

String

对节点池执行操作时的 JobID。

conditions

Array of NodePoolCondition objects

节点池当前详细状态列表,详情参见Condition类型定义。

表31 NodePoolCondition

参数

是否必选

参数类型

描述

type

String

Condition类型,当前支持类型如下

  • "Scalable":节点池实际的可扩容状态,如果状态为"False"时则不会再次触发节点池扩容行为。
  • "QuotaInsufficient":节点池扩容依赖的配额不足,影响节点池可扩容状态。
  • "ResourceInsufficient":节点池扩容依赖的资源不足,影响节点池可扩容状态。
  • "UnexpectedError":节点池非预期扩容失败,影响节点池可扩容状态。
  • "LockedByOrder":包周期节点池被订单锁定,此时Reason为待支付订单ID。
  • "Error":节点池错误,通常由于删除失败触发。

status

String

Condition当前状态,取值如下

  • "True"
  • "False"

lastProbeTime

String

上次状态检查时间。

lastTransitTime

String

上次状态变更时间。

reason

String

上次状态变更原因。

message

String

Condition详细描述。

响应参数

状态码: 201

表32 响应Body参数

参数

参数类型

描述

kind

String

API类型,固定值“NodePool”。

apiVersion

String

API版本,固定值“v3”。

metadata

NodePoolMetadata object

节点池的元数据信息

spec

NodePoolSpec object

节点池的规格描述

status

NodePoolStatus object

节点池状态

表33 NodePoolMetadata

参数

参数类型

描述

name

String

节点名池名称。

说明:

命名规则:

  • 以小写字母开头,由小写字母、数字、中划线(-)组成,长度范围1-50位,且不能以中划线(-)结尾。
  • 不允许创建名为 DefaultPool 的节点池。

uid

String

节点池的uid。创建成功后自动生成,填写无效

annotations

Map<String,String>

节点池的注解,以key value对表示。仅用于查询,不支持请求时传入,填写无效。

updateTimestamp

String

更新时间

creationTimestamp

String

创建时间

表34 NodePoolSpec

参数

参数类型

描述

type

String

节点池类型。不填写时默认为vm。

  • vm:弹性云服务器
  • ElasticBMS:C6型弹性裸金属通用计算增强型云服务器,规格示例:c6.22xlarge.2.physical
  • pm: 裸金属服务器

nodeTemplate

NodeSpec object

节点池模板详细参数。

initialNodeCount

Integer

节点池初始化节点个数。查询时为节点池目标节点数量。

autoscaling

NodePoolNodeAutoscaling object

弹性伸缩参数。

nodeManagement

NodeManagement object

节点管理相关配置

podSecurityGroups

Array of SecurityID objects

安全组相关配置, 仅turbo集群支持配置该参数。

customSecurityGroups

Array of strings

节点池自定义安全组相关配置。支持节点池新扩容节点绑定指定的安全组。

  • 未指定安全组ID,新建节点将添加Node节点默认安全组。
  • 指定有效安全组ID,新建节点将使用指定安全组。
  • 指定安全组,应避免对CCE运行依赖的端口规则进行修改。详细设置请参考集群安全组规则配置
表35 NodeSpec

参数

参数类型

描述

flavor

String

节点的规格,CCE支持的节点规格请参考节点规格说明获取。

az

String

待创建节点所在的可用区,需要指定可用区(AZ)的名称。 CCE支持的可用区请参考地区和终端节点

os

String

节点的操作系统类型。具体支持的操作系统请参见节点操作系统说明

说明:
  • 系统会根据集群版本自动选择支持的系统版本。当前集群版本不支持该系统类型,则会报错。
  • 若在创建节点时指定了extendParam中的alpha.cce/NodeImageID参数,可以不填写此参数。
  • 创建节点池时,该参数为必选。

login

Login object

节点的登录方式。密钥对和密码登录方式二者必选其一。

rootVolume

Volume object

节点的磁盘信息

dataVolumes

Array of Volume objects

节点的数据盘参数(目前已支持通过控制台为CCE节点添加第二块数据盘)。 如果数据盘正供容器运行时和Kubelet组件使用,则不可被卸载,否则将导致节点不可用。 针对专属云节点,参数解释与rootVolume一致

storage

Storage object

磁盘初始化配置管理参数。

该参数配置逻辑较为复杂,详细说明请参见节点磁盘挂载

该参数缺省时,按照extendParam中的DockerLVMConfigOverride(已废弃)参数进行磁盘管理。此参数对1.15.11及以上集群版本支持。

说明:

如存在节点规格涉及本地盘并同时使用云硬盘场景时,请勿缺省此参数,避免出现将用户未期望的磁盘分区。

publicIP

NodePublicIP object

节点的弹性 公网IP

说明:

创建节点池添加节点时不支持该参数。

nodeNicSpec

NodeNicSpec object

节点的网卡信息

count

Integer

批量创建时节点的个数,必须为大于等于1,小于等于最大限额的正整数。作用于节点池时该项可以不填写。

billingMode

Integer

节点的计费模式:

  • 0: 按需付费
  • 1: 包周期
  • 2: 已废弃:自动付费包周期

taints

Array of Taint objects

支持给创建出来的节点加Taints来设置反亲和性,taints配置不超过20条。每条Taints包含以下3个参数:

  • Key:必须以字母或数字开头,可以包含字母、数字、连字符、下划线和点,最长63个字符;另外可以使用DNS子域作为前缀。
  • Value:必须以字符或数字开头,可以包含字母、数字、连字符、下划线和点,最长63个字符。
  • Effect:只可选NoSchedule,PreferNoSchedule或NoExecute。 字段使用场景:在节点创建场景下,支持指定初始值,查询时不返回该字段;在节点池场景下,其中节点模板中支持指定初始值,查询时支持返回该字段;在其余场景下,查询时都不会返回该字段。

示例:

"taints": [{
  "key": "status",
  "value": "unavailable",
  "effect": "NoSchedule"
}, {
  "key": "looks",
  "value": "bad",
  "effect": "NoSchedule"
}]

k8sTags

Map<String,String>

格式为key/value键值对。键值对个数不超过20条。

  • Key:必须以字母或数字开头,可以包含字母、数字、连字符、下划线和点,最长63个字符;另外可以使用DNS子域作为前缀,例如example.com/my-key,DNS子域最长253个字符。
  • Value:可以为空或者非空字符串,非空字符串必须以字符或数字开头,可以包含字母、数字、连字符、下划线和点,最长63个字符。 字段使用场景:在节点创建场景下,支持指定初始值,查询时不返回该字段;在节点池场景下,其中节点模板中支持指定初始值,查询时支持返回该字段;在其余场景下,查询时都不会返回该字段。

示例:

"k8sTags": {
  "key": "value"
}

ecsGroupId

String

云服务器组ID,若指定,将节点创建在该云服务器组下

dedicatedHostId

String

指定DeH主机的ID,将节点调度到自己的DeH上。

说明:

创建节点池添加节点时不支持该参数。

userTags

Array of UserTag objects

云服务器标签,键必须唯一,CCE支持的最大用户自定义标签数量依region而定,自定义标签数上限为8个。 字段使用场景:在节点创建场景下,支持指定初始值,查询时不返回该字段;在节点池场景下,其中节点模板中支持指定初始值,查询时支持返回该字段;在其余场景下,查询时都不会返回该字段。

说明:

标签键只能包含大写字母.小写字母、数字和特殊字符(-_)以及Unicode字符,长度不超过36个字符。

runtime

Runtime object

容器运行时, 默认场景:

  • 1.25以下集群:默认为"docker"
  • 1.25及以上集群,随操作系统变化,默认的容器运行时不同:操作系统为欧拉2.5、欧拉2.8的节点默认为"docker",其余操作系统的节点默认为"containerd"

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,认为节点初始化完成,则移除初始化污点。

  • 必须以字母、数字组成,长度范围1-20位。
  • 标记数量不超过2个

extendParam

NodeExtendParam object

创建节点时的扩展参数。

表36 Login

参数

参数类型

描述

sshKey

String

选择密钥对方式登录时的密钥对名称。

userPassword

UserPassword object

选择密码方式登录时的帐号密码信息,之后可通过此帐号密码登录节点。

表37 UserPassword

参数

参数类型

描述

username

String

登录帐号,默认为“root”

password

String

登录密码,若创建节点通过用户名密码方式,即使用该字段,则响应体中该字段作屏蔽展示。 密码复杂度要求:

  • 长度为8-26位。
  • 密码至少必须包含大写字母、小写字母、数字和特殊字符(!@$%^-_=+[{}]:,./?~#*)中的三种。
  • 密码不能包含用户名或用户名的逆序。 创建节点时password字段需要加盐加密,具体方法请参见创建节点时password字段加盐加密
表38 Volume

参数

参数类型

描述

size

Integer

磁盘大小,单位为GB

  • 系统盘取值范围:40~1024
  • 数据盘取值范围:100~32768

volumetype

String

磁盘类型,取值请参见创建云服务器 中“root_volume字段数据结构说明”。

  • SAS:高IO,是指由SAS存储提供资源的磁盘类型。
  • SSD:超高IO,是指由SSD存储提供资源的磁盘类型。
  • SATA:普通IO,是指由SATA存储提供资源的磁盘类型。EVS已下线SATA磁盘,仅存量节点有此类型的磁盘。
  • ESSD:通用型SSD云硬盘,是指由SSD存储提供资源的磁盘类型。
  • GPSDD:通用型SSD云硬盘,是指由SSD存储提供资源的磁盘类型。
说明:

了解不同磁盘类型的详细信息,链接请参见创建云服务器

extendParam

Map<String,Object>

磁盘扩展参数,取值请参见创建云服务器中“extendparam”参数的描述。 链接请参见创建云服务器

cluster_id

String

云服务器系统盘对应的存储池的ID。仅用作专属云集群,专属分布式存储DSS的存储池ID,即dssPoolID。

获取方法请参见获取单个专属分布式存储池详情中“表3 响应参数”的ID字段。

cluster_type

String

云服务器系统盘对应的磁盘存储类型。仅用作专属云集群,固定取值为dss。

hw:passthrough

Boolean

  • 使用SDI规格创建虚拟机时请关注该参数,如果该参数值为true,说明创建的为SCSI类型的卷
  • 节点池类型为ElasticBMS时,此参数必须填写为true
  • 如存在节点规格涉及本地盘并同时使用云硬盘场景时,请设置磁盘初始化配置管理参数,参见节点磁盘挂载

metadata

VolumeMetadata object

云硬盘加密信息,仅在创建节点系统盘或数据盘需加密时须填写。

表39 VolumeMetadata

参数

参数类型

描述

__system__encrypted

String

表示云硬盘加密功能的字段,'0'代表不加密,'1'代表加密。

该字段不存在时,云硬盘默认为不加密。

__system__cmkid

String

用户主密钥ID,是metadata中的表示加密功能的字段,与__system__encrypted配合使用。

表40 Storage

参数

参数类型

描述

storageSelectors

Array of StorageSelectors objects

磁盘选择,根据matchLabels和storageType对匹配的磁盘进行管理。磁盘匹配存在先后顺序,靠前的匹配规则优先匹配。

storageGroups

Array of StorageGroups objects

由多个存储设备组成的存储组,用于各个存储空间的划分。

表41 StorageSelectors

参数

参数类型

描述

name

String

selector的名字,作为storageGroup中selectorNames的索引,因此各个selector间的名字不能重复。

storageType

String

存储类型,当前仅支持evs(云硬盘)或local(本地盘);local存储类型不支持磁盘选择,所有本地盘将被组成一个VG,因此也仅允许只有一个local类型的storageSelector。

matchLabels

matchLabels object

evs盘的匹配字段,支持DataVolume中的size、volumeType、metadataEncrypted、metadataCmkid、count五个字段。

表42 matchLabels

参数

参数类型

描述

size

String

匹配的磁盘大小,不填则无磁盘大小限制。例如:100.

volumeType

String

云硬盘类型,目前支持SSD\GPSSD\SAS\ESSD\SATA等。

metadataEncrypted

String

磁盘加密标识符,0代表不加密,1代表加密。

metadataCmkid

String

加密磁盘的用户主密钥ID,长度为36字节的字符串。

count

String

磁盘选择个数,不填则选择所有此类磁盘。

表43 StorageGroups

参数

参数类型

描述

name

String

storageGroups的名字,作为虚拟存储组的名字,因此各个group名字不能重复。

说明:

|

  • 当cceManaged=ture时,name必须为:vgpass。
  • 当数据盘作为临时存储卷时:name必须为:vg-everest-localvolume-ephemeral。
  • 当数据盘作为持久存储卷时:name必须为:vg-everest-localvolume-persistent。

cceManaged

Boolean

k8s及runtime所属存储空间。有且仅有一个group被设置为true,不填默认false。

selectorNames

Array of strings

对应storageSelectors中的name,一个group可选择多个selector;但一个selector只能被一个group选择。

virtualSpaces

Array of VirtualSpace objects

group中空间配置的详细管理。

表44 VirtualSpace

参数

参数类型

描述

name

String

virtualSpace的名称,当前仅支持三种类型:kubernetes、runtime、user。

  • kubernetes:k8s空间配置,需配置lvmConfig;
  • runtime:运行时空间配置,需配置runtimeConfig;
  • user:用户空间配置,需配置lvmConfig

size

String

virtualSpace的大小,仅支持整数百分比。例如:90%。

说明:

一个group中所有virtualSpace的百分比之和不得超过100%

lvmConfig

LVMConfig object

lvm配置管理,适用于kubernetes和user空间配置。 需要注意:一个virtualSpace仅支持一个config配置。

runtimeConfig

RuntimeConfig object

runtime配置管理,适用于运行时空间配置。 需要注意:一个virtualSpace仅支持一个config配置。

表45 LVMConfig

参数

参数类型

描述

lvType

String

LVM写入模式:linear、striped。linear:线性模式;striped:条带模式,使用多块磁盘组成条带模式,能够提升磁盘性能。

path

String

磁盘挂载路径。仅在用户配置中生效。支持包含:数字、大小写字母、点、中划线、下划线的绝对路径。

表46 RuntimeConfig

参数

参数类型

描述

lvType

String

LVM写入模式:linear、striped。linear:线性模式;striped:条带模式,使用多块磁盘组成条带模式,能够提升磁盘性能。

表47 NodePublicIP

参数

参数类型

描述

ids

Array of strings

已有的弹性IP的ID列表。数量不得大于待创建节点数

说明:

若已配置ids参数,则无需配置count和eip参数

count

Integer

要动态创建的弹性IP个数。

说明:

count参数与eip参数必须同时配置。

eip

NodeEIPSpec object

弹性IP参数

表48 NodeEIPSpec

参数

参数类型

描述

iptype

String

弹性IP类型,取值请参见申请EIP接口中publicip.type说明。 链接请参见申请EIP

bandwidth

NodeBandwidth object

弹性IP的带宽参数

表49 NodeBandwidth

参数

参数类型

描述

chargemode

String

带宽的计费类型:

  • 未传该字段,表示按带宽计费。 - 字段值为空,表示按带宽计费。
  • 字段值为“traffic”,表示按流量计费。
  • 字段为其它值,会导致创建云服务器失败。
说明:
  • 按带宽计费:按公网传输速率(单位为Mbps)计费。当您的带宽利用率高于10%时,建议优先选择按带宽计费。
  • 按流量计费:只允许在创建按需节点时指定,按公网传输的数据总量(单位为GB)计费。当您的带宽利用率低于10%时,建议优先选择按流量计费。

size

Integer

带宽大小,取值请参见取值请参见申请EIP接口中bandwidth.size说明。 链接请参见申请EIP

sharetype

String

带宽的共享类型,共享类型枚举:PER,表示独享,目前仅支持独享。

表50 NodeNicSpec

参数

参数类型

描述

primaryNic

NicSpec object

主网卡的描述信息。

extNics

Array of NicSpec objects

扩展网卡

说明:

创建节点池添加节点时不支持该参数。

表51 NicSpec

参数

参数类型

描述

subnetId

String

网卡所在子网的网络ID。主网卡创建时若未指定subnetId,将使用集群子网。扩展网卡创建时必须指定subnetId。

fixedIps

Array of strings

主网卡的IP将通过fixedIps指定,数量不得大于创建的节点数。fixedIps或ipBlock同时只能指定一个。扩展网卡不支持指定fiexdIps。

ipBlock

String

主网卡的IP段的CIDR格式,创建的节点IP将属于该IP段内。fixedIps或ipBlock同时只能指定一个。

表52 Taint

参数

参数类型

描述

key

String

value

String

effect

String

作用效果

表53 UserTag

参数

参数类型

描述

key

String

云服务器标签的键。不得以"CCE-"或"__type_baremetal"开头

value

String

云服务器标签的值

表54 Runtime

参数

参数类型

描述

name

String

容器运行时,默认场景:

  • v1.25以下集群:默认为"docker"
  • v1.25及以上集群,随操作系统变化,默认的容器运行时不同:操作系统为EulerOS 2.5、EulerOS 2.8的节点默认为"docker",其余操作系统的节点默认为"containerd"
表55 NodeExtendParam

参数

参数类型

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

表56 NodePoolNodeAutoscaling

参数

参数类型

描述

enable

Boolean

是否开启自动扩缩容

minNodeCount

Integer

若开启自动扩缩容,最小能缩容的节点个数。不可大于集群规格所允许的节点上限

maxNodeCount

Integer

若开启自动扩缩容,最大能扩容的节点个数,应大于等于 minNodeCount,且不超过集群规格对应的节点数量上限。

scaleDownCooldownTime

Integer

节点保留时间,单位为分钟,扩容出来的节点在这个时间内不会被缩掉

priority

Integer

节点池权重,更高的权重在扩容时拥有更高的优先级

表57 NodeManagement

参数

参数类型

描述

serverGroupReference

String

云服务器组ID,若指定,节点池中所有节点将创建在该云服务器组下,节点池的云服务器组只能在创建时指定,无法修改。指定云服务器组时节点池中的节点数量不允许超出云服务器组的配额限制。

表58 SecurityID

参数

参数类型

描述

id

String

安全组ID。

表59 NodePoolStatus

参数

参数类型

描述

currentNode

Integer

当前节点池中所有节点数量(不含删除中的节点)。

creatingNode

Integer

当前节点池中处于创建流程中的节点数量。

deletingNode

Integer

当前节点池中删除中的节点数量。

phase

String

节点池状态。

  • 空值:可用(节点池当前节点数已达到预期,且无伸缩中的节点)
  • Synchronizing:伸缩中(节点池当前节点数未达到预期,且无伸缩中的节点)
  • Synchronized:伸缩等待中(节点池当前节点数未达到预期,或者存在伸缩中的节点)
  • SoldOut:节点池当前不可扩容(兼容字段,标记节点池资源售罄、资源配额不足等不可扩容状态)
说明:

上述节点池状态已废弃,仅兼容保留,不建议使用,替代感知方式如下:

  • 节点池扩缩状态:可通过currentNode/creatingNode/deletingNode节点状态统计信息,精确感知当前节点池扩缩状态。
  • 节点池可扩容状态:可通过conditions感知节点池详细状态,其中"Scalable"可替代SoldOut语义。
  • Deleting:删除中
  • Error:错误

jobId

String

对节点池执行操作时的 JobID。

conditions

Array of NodePoolCondition objects

节点池当前详细状态列表,详情参见Condition类型定义。

表60 NodePoolCondition

参数

参数类型

描述

type

String

Condition类型,当前支持类型如下

  • "Scalable":节点池实际的可扩容状态,如果状态为"False"时则不会再次触发节点池扩容行为。
  • "QuotaInsufficient":节点池扩容依赖的配额不足,影响节点池可扩容状态。
  • "ResourceInsufficient":节点池扩容依赖的资源不足,影响节点池可扩容状态。
  • "UnexpectedError":节点池非预期扩容失败,影响节点池可扩容状态。
  • "LockedByOrder":包周期节点池被订单锁定,此时Reason为待支付订单ID。
  • "Error":节点池错误,通常由于删除失败触发。

status

String

Condition当前状态,取值如下

  • "True"
  • "False"

lastProbeTime

String

上次状态检查时间。

lastTransitTime

String

上次状态变更时间。

reason

String

上次状态变更原因。

message

String

Condition详细描述。

请求示例

创建一个节点池,计费模式为按需计费,节点数量为0,节点池规格为2U4G,节点操作系统为EulerOS 2.5,使用Docker容器引擎。节点系统盘和数据盘大小分别为40GB和100GB,磁盘类型均为高IO。

{
  "kind" : "NodePool",
  "apiVersion" : "v3",
  "metadata" : {
    "name" : "lc-it-nodepool-79796"
  },
  "spec" : {
    "initialNodeCount" : 0,
    "type" : "vm",
    "autoscaling" : {
      "enable" : false,
      "minNodeCount" : 0,
      "maxNodeCount" : 1,
      "scaleDownCooldownTime" : 0,
      "priority" : 0
    },
    "nodeManagement" : {
      "serverGroupReference" : ""
    },
    "nodeTemplate" : {
      "flavor" : "s6.large.2",
      "az" : "******",
      "os" : "EulerOS 2.5",
      "login" : {
        "sshKey" : "KeyPair-001"
      },
      "rootVolume" : {
        "volumetype" : "SAS",
        "size" : 40
      },
      "dataVolumes" : [ {
        "volumetype" : "SAS",
        "size" : 100,
        "extendParam" : {
          "useType" : "docker"
        }
      } ],
      "billingMode" : 0,
      "extendParam" : {
        "alpha.cce/preInstall" : "",
        "alpha.cce/postInstall" : "",
        "alpha.cce/NodeImageID" : "",
        "maxPods" : 110
      },
      "nodeNicSpec" : {
        "primaryNic" : {
          "subnetId" : "7e767d10-7548-4df5-ad72-aeac1d08bd8a"
        }
      }
    },
    "podSecurityGroups" : [ {
      "id" : ""
    } ]
  }
}

响应示例

状态码: 201

表示在指定集群下创建节点池的作业下发成功。

{
  "kind" : "NodePool",
  "apiVersion" : "v3",
  "metadata" : {
    "name" : "lc-it-nodepool-79796",
    "uid" : "99addaa2-69eb-11ea-a592-0255ac1001bb"
  },
  "spec" : {
    "type" : "vm",
    "nodeTemplate" : {
      "flavor" : "s6.large.2",
      "az" : "******",
      "os" : "EulerOS 2.5",
      "login" : {
        "sshKey" : "KeyPair-001"
      },
      "rootVolume" : {
        "volumetype" : "SAS",
        "size" : 40
      },
      "dataVolumes" : [ {
        "volumetype" : "SAS",
        "size" : 100,
        "extendParam" : {
          "useType" : "docker"
        }
      } ],
      "publicIP" : {
        "eip" : {
          "bandwidth" : { }
        }
      },
      "nodeNicSpec" : {
        "primaryNic" : {
          "subnetId" : "7e767d10-7548-4df5-ad72-aeac1d08bd8a"
        }
      },
      "billingMode" : 0,
      "extendParam" : {
        "alpha.cce/NodeImageID" : "",
        "alpha.cce/postInstall" : "",
        "alpha.cce/preInstall" : "",
        "maxPods" : 110
      },
      "k8sTags" : {
        "cce.cloud.com/cce-nodepool" : "lc-it-nodepool-79796"
      }
    },
    "autoscaling" : {
      "maxNodeCount" : 1
    },
    "nodeManagement" : { }
  },
  "status" : {
    "phase" : ""
  }
}

SDK代码示例

SDK代码示例如下。

  • Java
  • Python
  • Go
  • 更多

创建一个节点池,计费模式为按需计费,节点数量为0,节点池规格为2U4G,节点操作系统为EulerOS 2.5,使用Docker容器引擎。节点系统盘和数据盘大小分别为40GB和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 java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;

public class CreateNodePoolSolution {

    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();
        CreateNodePoolRequest request = new CreateNodePoolRequest();
        request.withClusterId("<cluster_id>");
        NodePool body = new NodePool();
        List<SecurityID> listSpecPodSecurityGroups = new ArrayList<>();
        listSpecPodSecurityGroups.add(
            new SecurityID()
                .withId("")
        );
        NodeManagement nodeManagementSpec = new NodeManagement();
        nodeManagementSpec.withServerGroupReference("");
        NodePoolNodeAutoscaling autoscalingSpec = new NodePoolNodeAutoscaling();
        autoscalingSpec.withEnable(false)
            .withMinNodeCount(0)
            .withMaxNodeCount(1)
            .withScaleDownCooldownTime(0)
            .withPriority(0);
        NodeExtendParam extendParamNodeTemplate = new NodeExtendParam();
        extendParamNodeTemplate.withMaxPods(110)
            .withAlphaCcePreInstall("")
            .withAlphaCcePostInstall("")
            .withAlphaCceNodeImageID("");
        NicSpec primaryNicNodeNicSpec = new NicSpec();
        primaryNicNodeNicSpec.withSubnetId("7e767d10-7548-4df5-ad72-aeac1d08bd8a");
        NodeNicSpec nodeNicSpecNodeTemplate = new NodeNicSpec();
        nodeNicSpecNodeTemplate.withPrimaryNic(primaryNicNodeNicSpec);
        Map<String, Object> listDataVolumesExtendParam = new HashMap<>();
        listDataVolumesExtendParam.put("useType", "docker");
        List<Volume> listNodeTemplateDataVolumes = new ArrayList<>();
        listNodeTemplateDataVolumes.add(
            new Volume()
                .withSize(100)
                .withVolumetype("SAS")
                .withExtendParam(listDataVolumesExtendParam)
        );
        Volume rootVolumeNodeTemplate = new Volume();
        rootVolumeNodeTemplate.withSize(40)
            .withVolumetype("SAS");
        Login loginNodeTemplate = new Login();
        loginNodeTemplate.withSshKey("KeyPair-001");
        NodeSpec nodeTemplateSpec = new NodeSpec();
        nodeTemplateSpec.withFlavor("s6.large.2")
            .withAz("******")
            .withOs("EulerOS 2.5")
            .withLogin(loginNodeTemplate)
            .withRootVolume(rootVolumeNodeTemplate)
            .withDataVolumes(listNodeTemplateDataVolumes)
            .withNodeNicSpec(nodeNicSpecNodeTemplate)
            .withBillingMode(0)
            .withExtendParam(extendParamNodeTemplate);
        NodePoolSpec specbody = new NodePoolSpec();
        specbody.withType(NodePoolSpec.TypeEnum.fromValue("vm"))
            .withNodeTemplate(nodeTemplateSpec)
            .withInitialNodeCount(0)
            .withAutoscaling(autoscalingSpec)
            .withNodeManagement(nodeManagementSpec)
            .withPodSecurityGroups(listSpecPodSecurityGroups);
        NodePoolMetadata metadatabody = new NodePoolMetadata();
        metadatabody.withName("lc-it-nodepool-79796");
        body.withSpec(specbody);
        body.withMetadata(metadatabody);
        body.withApiVersion("v3");
        body.withKind("NodePool");
        request.withBody(body);
        try {
            CreateNodePoolResponse response = client.createNodePool(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());
        }
    }
}

创建一个节点池,计费模式为按需计费,节点数量为0,节点池规格为2U4G,节点操作系统为EulerOS 2.5,使用Docker容器引擎。节点系统盘和数据盘大小分别为40GB和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 = CreateNodePoolRequest()
        request.cluster_id = "<cluster_id>"
        listPodSecurityGroupsSpec = [
            SecurityID(
                id=""
            )
        ]
        nodeManagementSpec = NodeManagement(
            server_group_reference=""
        )
        autoscalingSpec = NodePoolNodeAutoscaling(
            enable=False,
            min_node_count=0,
            max_node_count=1,
            scale_down_cooldown_time=0,
            priority=0
        )
        extendParamNodeTemplate = NodeExtendParam(
            max_pods=110,
            alpha_cce_pre_install="",
            alpha_cce_post_install="",
            alpha_cce_node_image_id=""
        )
        primaryNicNodeNicSpec = NicSpec(
            subnet_id="7e767d10-7548-4df5-ad72-aeac1d08bd8a"
        )
        nodeNicSpecNodeTemplate = NodeNicSpec(
            primary_nic=primaryNicNodeNicSpec
        )
        listExtendParamDataVolumes = {
            "useType": "docker"
        }
        listDataVolumesNodeTemplate = [
            Volume(
                size=100,
                volumetype="SAS",
                extend_param=listExtendParamDataVolumes
            )
        ]
        rootVolumeNodeTemplate = Volume(
            size=40,
            volumetype="SAS"
        )
        loginNodeTemplate = Login(
            ssh_key="KeyPair-001"
        )
        nodeTemplateSpec = NodeSpec(
            flavor="s6.large.2",
            az="******",
            os="EulerOS 2.5",
            login=loginNodeTemplate,
            root_volume=rootVolumeNodeTemplate,
            data_volumes=listDataVolumesNodeTemplate,
            node_nic_spec=nodeNicSpecNodeTemplate,
            billing_mode=0,
            extend_param=extendParamNodeTemplate
        )
        specbody = NodePoolSpec(
            type="vm",
            node_template=nodeTemplateSpec,
            initial_node_count=0,
            autoscaling=autoscalingSpec,
            node_management=nodeManagementSpec,
            pod_security_groups=listPodSecurityGroupsSpec
        )
        metadatabody = NodePoolMetadata(
            name="lc-it-nodepool-79796"
        )
        request.body = NodePool(
            spec=specbody,
            metadata=metadatabody,
            api_version="v3",
            kind="NodePool"
        )
        response = client.create_node_pool(request)
        print(response)
    except exceptions.ClientRequestException as e:
        print(e.status_code)
        print(e.request_id)
        print(e.error_code)
        print(e.error_msg)

创建一个节点池,计费模式为按需计费,节点数量为0,节点池规格为2U4G,节点操作系统为EulerOS 2.5,使用Docker容器引擎。节点系统盘和数据盘大小分别为40GB和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.CreateNodePoolRequest{}
	request.ClusterId = "<cluster_id>"
	idPodSecurityGroups:= ""
	var listPodSecurityGroupsSpec = []model.SecurityId{
        {
            Id: &idPodSecurityGroups,
        },
    }
	serverGroupReferenceNodeManagement:= ""
	nodeManagementSpec := &model.NodeManagement{
		ServerGroupReference: &serverGroupReferenceNodeManagement,
	}
	enableAutoscaling:= false
	minNodeCountAutoscaling:= int32(0)
	maxNodeCountAutoscaling:= int32(1)
	scaleDownCooldownTimeAutoscaling:= int32(0)
	priorityAutoscaling:= int32(0)
	autoscalingSpec := &model.NodePoolNodeAutoscaling{
		Enable: &enableAutoscaling,
		MinNodeCount: &minNodeCountAutoscaling,
		MaxNodeCount: &maxNodeCountAutoscaling,
		ScaleDownCooldownTime: &scaleDownCooldownTimeAutoscaling,
		Priority: &priorityAutoscaling,
	}
	maxPodsExtendParam:= int32(110)
	alphaCcePreInstallExtendParam:= ""
	alphaCcePostInstallExtendParam:= ""
	alphaCceNodeImageIDExtendParam:= ""
	extendParamNodeTemplate := &model.NodeExtendParam{
		MaxPods: &maxPodsExtendParam,
		AlphaCcePreInstall: &alphaCcePreInstallExtendParam,
		AlphaCcePostInstall: &alphaCcePostInstallExtendParam,
		AlphaCceNodeImageID: &alphaCceNodeImageIDExtendParam,
	}
	subnetIdPrimaryNic:= "7e767d10-7548-4df5-ad72-aeac1d08bd8a"
	primaryNicNodeNicSpec := &model.NicSpec{
		SubnetId: &subnetIdPrimaryNic,
	}
	nodeNicSpecNodeTemplate := &model.NodeNicSpec{
		PrimaryNic: primaryNicNodeNicSpec,
	}
	var listExtendParamDataVolumes = map[string]interface{}{
        "useType": "docker",
    }
	var listDataVolumesNodeTemplate = []model.Volume{
        {
            Size: int32(100),
            Volumetype: "SAS",
            ExtendParam: listExtendParamDataVolumes,
        },
    }
	rootVolumeNodeTemplate := &model.Volume{
		Size: int32(40),
		Volumetype: "SAS",
	}
	sshKeyLogin:= "KeyPair-001"
	loginNodeTemplate := &model.Login{
		SshKey: &sshKeyLogin,
	}
	osNodeTemplate:= "EulerOS 2.5"
	billingModeNodeTemplate:= int32(0)
	nodeTemplateSpec := &model.NodeSpec{
		Flavor: "s6.large.2",
		Az: "******",
		Os: &osNodeTemplate,
		Login: loginNodeTemplate,
		RootVolume: rootVolumeNodeTemplate,
		DataVolumes: listDataVolumesNodeTemplate,
		NodeNicSpec: nodeNicSpecNodeTemplate,
		BillingMode: &billingModeNodeTemplate,
		ExtendParam: extendParamNodeTemplate,
	}
	typeSpec:= model.GetNodePoolSpecTypeEnum().VM
	initialNodeCountSpec:= int32(0)
	specbody := &model.NodePoolSpec{
		Type: &typeSpec,
		NodeTemplate: nodeTemplateSpec,
		InitialNodeCount: &initialNodeCountSpec,
		Autoscaling: autoscalingSpec,
		NodeManagement: nodeManagementSpec,
		PodSecurityGroups: &listPodSecurityGroupsSpec,
	}
	metadatabody := &model.NodePoolMetadata{
		Name: "lc-it-nodepool-79796",
	}
	request.Body = &model.NodePool{
		Spec: specbody,
		Metadata: metadatabody,
		ApiVersion: "v3",
		Kind: "NodePool",
	}
	response, err := client.CreateNodePool(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

更多编程语言的SDK代码示例,请参见API Explorer的代码示例页签,可生成自动对应的SDK代码示例。

状态码

状态码

描述

201

表示在指定集群下创建节点池的作业下发成功。

错误码

请参见错误码

 

上一篇:网络爬虫如何工作? 下一篇:为什么从ECS自建库转向RDS数据库