更新时间:2024-11-21 GMT+08:00
分享

纳管节点

功能介绍

该API用于在指定集群下纳管节点。

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

接口约束

  • 纳管节点支持ECS(弹性云服务器)节点、BMS(裸金属服务器)节点以及DeH(专属主机)节点。

  • 待纳管节点必须状态为“运行中”,未被其他集群所使用,且不携带 CCE 专属节点标签CCE-Dynamic-Provisioning-Node。

  • 待纳管节点需与集群在同一虚拟私有云内(若集群版本低于1.13.10,纳管节点还需要与CCE集群在同一子网内)。

  • 待纳管节点需挂载数据盘,可使用本地盘(磁盘增强型实例)或至少挂载一块20GiB及以上的数据盘,且不存在10GiB以下的数据盘。

  • 待纳管节点规格要求:CPU必须2核及以上,内存必须4GiB及以上,网卡有且仅能有一个。

  • 如果使用了企业项目,则待纳管节点需要和集群在同一企业项目下,不然在纳管时会识别不到资源,导致无法纳管。从v1.21.15-r0、v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0集群版本开始,待纳管节点无需和集群在同一企业项目下,纳管后节点的企业项目保持不变。

  • 集群开启IPv6后,只支持纳管所在的子网开启了IPv6功能的节点;集群未开启IPv6,只支持纳管所在的子网未开启IPv6功能的节点。

  • CCE Turbo集群要求节点支持Sub-ENI或可以绑定至少16张ENI网卡,具体规格请参见创建节点时控制台上可以选择的节点规格。

  • 纳管节点时已分区的数据盘会被忽略,您需要保证节点至少有一个未分区且符合规格的数据盘。

调用方法

请参见如何调用API

URI

POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/add

表1 路径参数

参数

是否必选

参数类型

描述

project_id

String

参数解释:

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

约束限制:

不涉及

取值范围:

账号的项目ID

默认取值:

不涉及

cluster_id

String

参数解释:

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

约束限制:

不涉及

取值范围:

集群ID

默认取值:

不涉及

请求参数

表2 请求Header参数

参数

是否必选

参数类型

描述

Content-Type

String

参数解释:

消息体的类型(格式)

约束限制:

GET方法不做校验

取值范围:

  • application/json

  • application/json;charset=utf-8

  • application/x-pem-file

默认取值:

不涉及

X-Auth-Token

String

参数解释:

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

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表3 请求Body参数

参数

是否必选

参数类型

描述

apiVersion

String

API版本,固定值“v3”。

kind

String

API类型,固定值“List”。

nodeList

Array of AddNode objects

纳管节点列表,当前最多支持同时纳管200个节点。

表4 AddNode

参数

是否必选

参数类型

描述

serverID

String

服务器ID,从ECS/BMS控制台获取。

spec

ReinstallNodeSpec object

节点重装配置参数。当前不支持纳管节点接入节点池。

表5 ReinstallNodeSpec

参数

是否必选

参数类型

描述

os

String

操作系统。指定自定义镜像场景将以IMS镜像的实际操作系统版本为准。请选择当前集群支持的操作系统版本。例如Huawei Cloud EulerOS 2.0、Ubuntu 22.04、EulerOS 2.9、CentOS 7.6、EulerOS 2.8。

login

Login object

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

说明:

更新节点池时,不支持修改此参数

name

String

节点名称

说明:

重装时指定将修改节点名称,且服务器名称会同步修改。默认以服务器当前名称作为节点名称。

命名规则:以小写字母开头,由小写字母、数字、中划线(-)、点(.)组成,长度范围1-56位。

serverConfig

ReinstallServerConfig object

服务器配置

volumeConfig

ReinstallVolumeConfig object

卷管理配置

runtimeConfig

ReinstallRuntimeConfig object

容器运行时配置

k8sOptions

ReinstallK8sOptionsConfig object

Kubernetes节点配置

lifecycle

NodeLifecycleConfig object

节点自定义生命周期配置

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

ReinstallExtendParam object

重装拓展参数,已废弃

hostnameConfig

HostnameConfig object

K8S节点名称配置参数,支持的集群版本为v1.23.6-r0到v1.25或者v1.25.2-r0及以上。

表6 Login

参数

是否必选

参数类型

描述

sshKey

String

参数解释

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

约束限制

不涉及

取值范围

不涉及

默认取值

不涉及

userPassword

UserPassword object

参数解释

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

约束限制

不涉及

表7 UserPassword

参数

是否必选

参数类型

描述

username

String

参数解释

登录账号,默认为“root”。

约束限制

不涉及

取值范围

不涉及

默认取值

root。

password

String

参数解释

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

约束限制

创建节点时password字段需要加盐加密,具体方法请参见创建节点时password字段加盐加密

取值范围

密码复杂度要求:

  • 长度为8-26位。

  • 密码至少必须包含大写字母、小写字母、数字和特殊字符(!@$%^-_=+[{}]:,./?)中的三种。

  • 密码不能包含用户名或用户名的逆序。

默认取值

不涉及

表8 ReinstallServerConfig

参数

是否必选

参数类型

描述

userTags

Array of UserTag objects

云服务器标签(资源标签),键必须唯一,CCE支持的最大用户自定义标签数量依region而定,自定义标签数上限为8个。

rootVolume

ReinstallVolumeSpec object

系统盘重装配置

表9 UserTag

参数

是否必选

参数类型

描述

key

String

参数解释

云服务器标签的键。

约束限制

不得以"CCE-"或"__type_baremetal"开头。

取值范围

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

默认取值

不涉及

value

String

参数解释

云服务器标签的值。

约束限制

不涉及

取值范围

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

默认取值

不涉及

表10 ReinstallVolumeSpec

参数

是否必选

参数类型

描述

imageID

String

用户自定义镜像ID

cmkID

String

用户主密钥ID。默认为空时,表示云硬盘不加密。

表11 ReinstallVolumeConfig

参数

是否必选

参数类型

描述

lvmConfig

String

Docker数据盘配置项(已废弃)。

默认配置示例如下:

"lvmConfig":"dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear"

包含如下字段:

  • userLV:用户空间的大小,示例格式:vgpaas/20%VG

  • userPath:用户空间挂载路径,示例格式:/home/wqt-test

  • diskType:磁盘类型,目前只有evs、hdd和ssd三种格式

  • lvType:逻辑卷的类型,目前支持linear和striped两种,示例格式:striped

  • dockerThinpool:Docker盘的空间大小,示例格式:vgpaas/60%VG

  • kubernetesLV:Kubelet空间大小,示例格式:vgpaas/20%VG

storage

Storage object

参数解释

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

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

约束限制

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

  • 如希望数据盘取值范围调整至20-32768,请勿缺省此参数。

  • 如希望使用共享磁盘空间(取消runtime和kubernetes分区),请勿缺省此参数,共享磁盘空间请参考数据盘空间分配说明

  • 如希望系统组件存储在系统盘中,请勿缺省此参数。

表12 Storage

参数

是否必选

参数类型

描述

storageSelectors

Array of StorageSelectors objects

参数解释

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

约束限制

不涉及

storageGroups

Array of StorageGroups objects

参数解释

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

约束限制

不涉及

表13 StorageSelectors

参数

是否必选

参数类型

描述

name

String

参数解释

selector的名字,作为storageGroup中selectorNames的索引。

约束限制

各个selector间的名字不能重复。

取值范围

不涉及

默认取值

不涉及

storageType

String

参数解释

存储类型。

约束限制

  • local存储类型不支持磁盘选择,所有本地盘将被组成一个VG,因此也仅允许只有一个local类型的storageSelector。

  • system存储类型不支持磁盘选择,选择系统盘作为系统组件存储磁盘。因此也仅允许只有一个system类型的storageSelector,且name必须为cceUse。

取值范围

当前仅支持evs(云硬盘)、local(本地盘)和system(系统盘)。

默认取值

不涉及

matchLabels

matchLabels object

参数解释

evs盘的匹配字段。

约束限制

storageType设置为system(系统盘)时,无需设置此字段。

取值范围

支持DataVolume中的size、volumeType、iops、throughput、metadataEncrypted、metadataCmkid、count字段。

默认取值

不涉及

表14 matchLabels

参数

是否必选

参数类型

描述

size

String

参数解释

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

约束限制

不涉及

取值范围

不涉及

默认取值

不涉及

volumeType

String

参数解释

云硬盘类型。

约束限制

不涉及

取值范围

目前支持SSD\GPSSD\SAS\ESSD\SATA等,不填则无云硬盘类型限制。

默认取值

不涉及

iops

String

参数解释

匹配的磁盘iops大小,不填则无磁盘iops大小限制。当需要选择GPSSD2或ESSD2类型磁盘时,配置iops来准确选择磁盘。例如:3000。

约束限制

不涉及

取值范围

不涉及

默认取值

不涉及

throughput

String

参数解释

匹配的磁盘吞吐量大小,不填则无磁盘吞吐量大小限制。当需要选择GPSSD2类型磁盘时,配置throughput来准确选择磁盘。例如:125。

约束限制

不涉及

取值范围

不涉及

默认取值

不涉及

metadataEncrypted

String

参数解释

磁盘加密标识符,0代表不加密,1代表加密,不填则无磁盘加密标识符限制。

约束限制

不涉及

取值范围

不涉及

默认取值

不涉及

metadataCmkid

String

参数解释

加密磁盘的用户主密钥ID,长度为36字节的字符串,不填则无磁盘密钥ID限制。

约束限制

不涉及

取值范围

不涉及

默认取值

不涉及

count

String

参数解释

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

约束限制

不涉及

取值范围

不涉及

默认取值

不涉及

表15 StorageGroups

参数

是否必选

参数类型

描述

name

String

参数解释

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

约束限制

不涉及

取值范围

  • 当cceManaged=true时,name必须为:vgpaas。

  • 当数据盘作为临时存储卷时: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选择。

约束限制

系统组件无法分别存储于系统盘与数据盘中,因此选择selector的type为system时,group只能选择一个selector。

virtualSpaces

Array of VirtualSpace objects

参数解释

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

约束限制

不涉及

表16 VirtualSpace

参数

是否必选

参数类型

描述

name

String

参数解释

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

约束限制

不涉及

取值范围

  • kubernetes:k8s空间配置,需配置lvmConfig;

  • runtime:运行时空间配置,需配置runtimeConfig;

  • user:用户空间配置,需配置lvmConfig。

默认取值

不涉及

size

String

参数解释

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

约束限制

不涉及

取值范围

该参数取值范围[10-90],一个group中所有virtualSpace的百分比之和不得超过100%

默认取值

不涉及

lvmConfig

LVMConfig object

参数解释

lvm配置管理,适用于share、kubernetes和user空间配置。

约束限制

一个virtualSpace仅支持一个config配置。

runtimeConfig

RuntimeConfig object

参数解释

runtime配置管理,适用于运行时空间配置。

约束限制

一个virtualSpace仅支持一个config配置。

表17 LVMConfig

参数

是否必选

参数类型

描述

lvType

String

参数解释

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

约束限制

不涉及

取值范围

不涉及

默认取值

不涉及

path

String

参数解释

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

约束限制

挂载路径请填写业务目录路径,不可设置为空或根目录等操作系统关键路径。不可填写的操作系统关键路径如下:

/, /home, /home/, /bin, /bin/, /lib, /lib/, /root, /root/, /boot, /boot/, /dev, /dev/, /etc, /etc/, /lost+found, /lost+found/, /mnt, /mnt/, /proc, /proc/,/sbin, /sbin/, /srv, /srv/, /tmp, /tmp/, /var, /var/, /media, /media/, /opt, /opt/, /selinux, /selinux/, /sys, /sys/, /usr, /usr/, /opt/cloud/, /mnt/paas/, /home/paas/, /var/paas/, /var/lib/, /var/script/

取值范围

不涉及

默认取值

不涉及

表18 RuntimeConfig

参数

是否必选

参数类型

描述

lvType

String

参数解释

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

约束限制

不涉及

取值范围

不涉及

默认取值

不涉及

表19 ReinstallRuntimeConfig

参数

是否必选

参数类型

描述

dockerBaseSize

Integer

节点上单容器的可用磁盘空间大小(已废弃,请优先使用containerBaseSize参数),单位G。

不配置该值或值为0时将使用默认值,Devicemapper模式下默认值为10;OverlayFS模式默认不限制单容器可用空间大小,且dockerBaseSize设置仅在新版本集群的EulerOS/HCEOS2.0节点上生效。

CCE节点容器运行时空间配置请参考数据盘空间分配说明

Devicemapper模式下建议dockerBaseSize配置不超过80G,设置过大时可能会导致容器运行时初始化时间过长而启动失败,若对容器磁盘大小有特殊要求,可考虑使用挂载外部或本地存储方式代替。

containerBaseSize

Integer

节点上单容器的可用磁盘空间大小,单位G。

不配置该值或值为0时将使用默认值,OverlayFS模式默认不限制单容器可用空间大小;Devicemapper模式下默认值为10,且containerBaseSize设置仅在新版本集群(v1.23.14-r0/v1.25.9-r0/v1.27.6-r0/v1.28.4-r0及以上)的EulerOS/HCEOS2.0节点上生效。

CCE节点容器运行时空间配置请参考数据盘空间分配说明

Devicemapper模式下建议containerBaseSize配置不超过80G,设置过大时可能会导致容器运行时初始化时间过长而启动失败,若对容器磁盘大小有特殊要求,可考虑使用挂载外部或本地存储方式代替;Devicemapper模式在新版中仅有共池裸机使用,已逐步废弃。

说明:

更新节点池时,不支持更新此参数

runtime

Runtime object

参数解释

容器运行时, 默认场景:

  • 1.25以下集群:默认为"docker"

  • 1.25及以上集群,随操作系统变化,默认的容器运行时不同

  • 操作系统为欧拉2.5、欧拉2.8的节点仅支持"docker",其余操作系统的节点默认为"containerd"

约束限制

不涉及

表20 Runtime

参数

是否必选

参数类型

描述

name

String

参数解释

容器运行时。

约束限制

不涉及

取值范围

不涉及

默认取值

  • v1.25以下集群:默认为"docker";

  • v1.25及以上集群,随操作系统变化,默认的容器运行时不同;

  • 操作系统为EulerOS 2.5、EulerOS 2.8的节点默认为"docker",其余操作系统的节点默认为"containerd"。

表21 ReinstallK8sOptionsConfig

参数

是否必选

参数类型

描述

labels

Map<String,String>

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

  • Key:必须以字母或数字开头,可以包含字母、数字、连字符、下划线和点,最长63个字符;另外可以使用DNS子域作为前缀,例如example.com/my-key,DNS子域最长253个字符。

  • Value:可以为空或者非空字符串,非空字符串必须以字符或数字开头和结尾,可以包含字母、数字、连字符、下划线和点,最长63个字符。

示例:

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

taints

Array of Taint objects

参数解释

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

  • Key:必须以字母或数字开头和结尾,可以包含字母、数字、连字符、下划线和点,最长63个字符;另外可以使用DNS子域作为前缀。

  • Value:必须以字符或数字开头和结尾,可以包含字母、数字、连字符、下划线和点,最长63个字符。

  • Effect:只可选NoSchedule,PreferNoSchedule或NoExecute。

    字段使用场景:在节点创建场景下,支持指定初始值,查询时不返回该字段;在节点池场景下,其中节点模板中支持指定初始值,查询时支持返回该字段;在其余场景下,查询时都不会返回该字段。

示例:

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

约束限制

taints配置不超过20条。

maxPods

Integer

节点最大允许创建的实例数(Pod),该数量包含系统默认实例,取值范围为16~256。

该设置的目的为防止节点因管理过多实例而负载过重,请根据您的业务需要进行设置。

nicMultiqueue

String

  • 弹性网卡队列数配置,默认配置示例如下:

"[{\"queue\":4}]"

包含如下字段:

  • queue: 弹性网卡队列数。

  • 仅在turbo集群的BMS节点时,该字段才可配置。

  • 当前支持可配置队列数以及弹性网卡数:{"1":128, "2":92, "4":92, "8":32, "16":16,"28":9}, 即1弹性网卡队列可绑定128张弹性网卡,2队列弹性网卡可绑定92张,以此类推。

  • 弹性网卡队列数越多,性能越强,但可绑定弹性网卡数越少,请根据您的需求进行配置(创建后不可修改)。

nicThreshold

String

  • 弹性网卡预绑定比例配置,默认配置示例如下:

"0.3:0.6"
  • 第一位小数:预绑定低水位,弹性网卡预绑定的最低比例(最小预绑定弹性网卡数 = ⌊节点的总弹性网卡数 * 预绑定低水位⌋)

  • 第二位小数:预绑定高水位,弹性网卡预绑定的最高比例(最大预绑定弹性网卡数 = ⌊节点的总弹性网卡数 * 预绑定高水位⌋)

  • BMS节点上绑定的弹性网卡数:Pod正在使用的弹性网卡数 + 最小预绑定弹性网卡数 < BMS节点上绑定的弹性网卡数 < Pod正在使用的弹性网卡数 + 最大预绑定弹性网卡数

  • BMS节点上当预绑定弹性网卡数 < 最小预绑定弹性网卡数时:会绑定弹性网卡,使得预绑定弹性网卡数 = 最小预绑定弹性网卡数

  • BMS节点上当预绑定弹性网卡数 > 最大预绑定弹性网卡数时:会定时解绑弹性网卡(约2分钟一次),直到预绑定弹性网卡数 = 最大预绑定弹性网卡数

  • 取值范围:[0.0, 1.0]; 一位小数; 低水位 <= 高水位

  • 仅在turbo集群的BMS节点时,该字段才可配置。

  • 弹性网卡预绑定能加快工作负载的创建,但会占用IP,请根据您的需求进行配置。

表22 Taint

参数

是否必选

参数类型

描述

key

String

参数解释

键。

约束限制

必须以字母或数字开头和结尾,可以包含字母、数字、连字符、下划线和点,最长63个字符。

取值范围

不涉及

默认取值

不涉及

value

String

参数解释

值。

约束限制

必须以字母或数字开头和结尾,可以包含字母、数字、连字符、下划线和点,最长63个字符。

取值范围

不涉及

默认取值

不涉及

effect

String

参数解释

作用效果。

约束限制

不涉及

取值范围

只可选NoSchedule,PreferNoSchedule或NoExecute。

默认取值

不涉及

表23 NodeLifecycleConfig

参数

是否必选

参数类型

描述

preInstall

String

安装前执行脚本。安装前/后执行脚本统一计算字符,转码后的字符总数不能超过10240。

输入的值需要经过Base64编码,方法如下:

echo -n "待编码内容" | base64

postInstall

String

安装后执行脚本。安装前/后执行脚本统一计算字符,转码后的字符总数不能超过10240。

输入的值需要经过Base64编码,方法如下:

echo -n "待编码内容" | base64
表24 ReinstallExtendParam

参数

是否必选

参数类型

描述

alpha.cce/NodeImageID

String

指定待切换目标操作系统所使用的用户镜像ID,已废弃。

指定此参数等价于指定ReinstallVolumeSpec中imageID,原取值将被覆盖。

表25 HostnameConfig

参数

是否必选

参数类型

描述

type

String

参数解释

K8S节点名称配置类型, 默认为“privateIp”。

约束限制

  • 配置为cceNodeName的节点, 其节点名称、K8S节点名称以及虚机名称相同。节点名称不支持修改, 并且在ECS侧修改了虚机名称,同步云服务器时,不会将修改后的虚机名称同步到节点。

  • 配置为cceNodeName的节点,为了避免K8S节点名称冲突,系统会自动在节点名称后添加后缀,后缀的格式为中划线(-)+五位随机字符,随机字符的取值为[a-z0-9]。

取值范围

  • privateIp: 将节点私有IP作为K8S节点名称

  • cceNodeName: 将CCE节点名称作为K8S节点名称

默认取值

默认为“privateIp”。

响应参数

状态码: 200

表26 响应Body参数

参数

参数类型

描述

jobid

String

提交任务成功后返回的任务ID,用户可以使用该ID对任务执行情况进行查询。

请求示例

纳管一个节点到集群中,且节点操作系统为EulerOS 2.5。

POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/add

{
  "kind" : "List",
  "apiVersion" : "v3",
  "nodeList" : [ {
    "serverID" : "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "spec" : {
      "name" : "my-ecs-0001",
      "os" : "EulerOS 2.5",
      "login" : {
        "sshKey" : "KeyPair-001"
      }
    }
  } ]
}

响应示例

状态码: 200

表示在指定集群下纳管节点的作业下发成功。

{
  "jobid" : "2ec9b78d-9368-46f3-8f29-d1a95622a568"
}

SDK代码示例

SDK代码示例如下。

纳管一个节点到集群中,且节点操作系统为EulerOS 2.5。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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.UUID;
import java.util.List;
import java.util.ArrayList;

public class AddNodeSolution {

    public static void main(String[] args) {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        String ak = System.getenv("CLOUD_SDK_AK");
        String sk = System.getenv("CLOUD_SDK_SK");
        String projectId = "{project_id}";

        ICredential auth = new BasicCredentials()
                .withProjectId(projectId)
                .withAk(ak)
                .withSk(sk);

        CceClient client = CceClient.newBuilder()
                .withCredential(auth)
                .withRegion(CceRegion.valueOf("<YOUR REGION>"))
                .build();
        AddNodeRequest request = new AddNodeRequest();
        request.withClusterId("{cluster_id}");
        AddNodeList body = new AddNodeList();
        Login loginSpec = new Login();
        loginSpec.withSshKey("KeyPair-001");
        ReinstallNodeSpec specNodeList = new ReinstallNodeSpec();
        specNodeList.withOs("EulerOS 2.5")
            .withLogin(loginSpec)
            .withName("my-ecs-0001");
        List<AddNode> listbodyNodeList = new ArrayList<>();
        listbodyNodeList.add(
            new AddNode()
                .withServerID(UUID.fromString("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"))
                .withSpec(specNodeList)
        );
        body.withNodeList(listbodyNodeList);
        body.withKind("List");
        body.withApiVersion("v3");
        request.withBody(body);
        try {
            AddNodeResponse response = client.addNode(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());
        }
    }
}

纳管一个节点到集群中,且节点操作系统为EulerOS 2.5。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# coding: utf-8

import os
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__":
    # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak = os.environ["CLOUD_SDK_AK"]
    sk = os.environ["CLOUD_SDK_SK"]
    projectId = "{project_id}"

    credentials = BasicCredentials(ak, sk, projectId)

    client = CceClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(CceRegion.value_of("<YOUR REGION>")) \
        .build()

    try:
        request = AddNodeRequest()
        request.cluster_id = "{cluster_id}"
        loginSpec = Login(
            ssh_key="KeyPair-001"
        )
        specNodeList = ReinstallNodeSpec(
            os="EulerOS 2.5",
            login=loginSpec,
            name="my-ecs-0001"
        )
        listNodeListbody = [
            AddNode(
                server_id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
                spec=specNodeList
            )
        ]
        request.body = AddNodeList(
            node_list=listNodeListbody,
            kind="List",
            api_version="v3"
        )
        response = client.add_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)

纳管一个节点到集群中,且节点操作系统为EulerOS 2.5。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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() {
    // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak := os.Getenv("CLOUD_SDK_AK")
    sk := os.Getenv("CLOUD_SDK_SK")
    projectId := "{project_id}"

    auth := basic.NewCredentialsBuilder().
        WithAk(ak).
        WithSk(sk).
        WithProjectId(projectId).
        Build()

    client := cce.NewCceClient(
        cce.CceClientBuilder().
            WithRegion(region.ValueOf("<YOUR REGION>")).
            WithCredential(auth).
            Build())

    request := &model.AddNodeRequest{}
	request.ClusterId = "{cluster_id}"
	sshKeyLogin:= "KeyPair-001"
	loginSpec := &model.Login{
		SshKey: &sshKeyLogin,
	}
	nameSpec:= "my-ecs-0001"
	specNodeList := &model.ReinstallNodeSpec{
		Os: "EulerOS 2.5",
		Login: loginSpec,
		Name: &nameSpec,
	}
	var listNodeListbody = []model.AddNode{
        {
            ServerID: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            Spec: specNodeList,
        },
    }
	request.Body = &model.AddNodeList{
		NodeList: listNodeListbody,
		Kind: "List",
		ApiVersion: "v3",
	}
	response, err := client.AddNode(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

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

状态码

状态码

描述

200

表示在指定集群下纳管节点的作业下发成功。

错误码

请参见错误码

相关文档