功能介绍
该API用于在指定集群下纳管节点。
集群管理的URL格式为:https://Endpoint/uri。其中uri为资源路径,也即API访问的路径。
调用方法
请参见如何调用API。
URI
POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/add
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
project_id |
是 |
String |
项目ID,获取方式请参见如何获取接口URI中参数。 |
cluster_id |
是 |
String |
集群ID,获取方式请参见如何获取接口URI中参数。 |
请求参数
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
Content-Type |
是 |
String |
消息体的类型(格式) |
X-Auth-Token |
是 |
String |
调用接口的认证方式分为Token和AK/SK两种,如果您使用的Token方式,此参数为必填,请填写Token的值,获取方式请参见获取token。 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
apiVersion |
是 |
String |
API版本,固定值“v3”。 |
kind |
是 |
String |
API类型,固定值“List”。 |
nodeList |
是 |
纳管节点列表 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
serverID |
是 |
String |
服务器ID,获取方式请参见ECS/BMS相关资料。 |
spec |
是 |
节点重装配置参数。当前不支持纳管节点接入节点池。 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
os |
是 |
String |
操作系统。指定 自定义镜像 场景将以IMS 镜像 的实际操作系统版本为准。请选择当前集群支持的操作系统版本,例如EulerOS 2.5、CentOS 7.6、EulerOS 2.8。 |
login |
是 |
节点的登录方式。密钥对和密码登录方式二者必选其一。 |
|
name |
否 |
String |
节点名称 说明:
重装时指定将修改节点名称,且服务器名称会同步修改。默认以服务器当前名称作为节点名称。 命名规则:以小写字母开头,由小写字母、数字、中划线(-)组成,长度范围1-56位。 |
serverConfig |
否 |
服务器配置 |
|
volumeConfig |
否 |
卷管理配置 |
|
runtimeConfig |
否 |
容器运行时配置 |
|
k8sOptions |
否 |
Kubernetes节点配置 |
|
lifecycle |
否 |
节点自定义生命周期配置 |
|
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 |
登录密码,若创建节点通过用户名密码方式,即使用该字段,则响应体中该字段作屏蔽展示。 密码复杂度要求:
|
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
userTags |
否 |
云服务器 标签,键必须唯一,CCE支持的最大用户自定义标签数量依region而定,自定义标签数上限为5个。 |
|
rootVolume |
否 |
系统盘重装配置 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
key |
否 |
String |
云服务 器标签的键。不得以"CCE-"或"__type_baremetal"开头 |
value |
否 |
String |
云服务器标签的值 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
imageID |
否 |
String |
用户自定义镜像ID |
cmkID |
否 |
String |
用户主密钥ID。默认为空时,表示 云硬盘 不加密。 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
lvmConfig |
否 |
String |
Docker数据盘配置项。 默认配置示例如下: "lvmConfig":" docker Thinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear"
包含如下字段:
|
storage |
否 |
磁盘初始化配置管理参数。 该参数配置逻辑较为复杂,详细说明请参见节点磁盘挂载。 该参数缺省时,按照extendParam中的DockerLVMConfigOverride(已废弃)参数进行磁盘管理。此参数对1.15.11及以上集群版本支持。 说明:
如存在节点规格涉及本地盘并同时使用云硬盘场景时,请勿缺省此参数,避免出现将用户未期望的磁盘分区。 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
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:条带模式,使用多块磁盘组成条带模式,能够提升磁盘性能。 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
dockerBaseSize |
否 |
Integer |
节点上单容器的可用磁盘空间大小,单位G。 不配置该值或值为0时将使用默认值,Devicemapper模式下默认值为10;OverlayFS模式默认不限制单容器可用空间大小,且dockerBaseSize设置仅在新版本集群的EulerOS和HCE节点上生效。 CCE节点容器运行时空间配置请参考数据盘空间分配说明。 Devicemapper模式下建议dockerBaseSize配置不超过80G,设置过大时可能会导致容器运行时初始化时间过长而启动失败,若对容器磁盘大小有特殊要求,可考虑使用挂载外部或本地存储方式代替。 |
runtime |
否 |
容器运行时, 默认场景:
|
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
name |
否 |
String |
容器运行时,默认场景:
|
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
labels |
否 |
Map<String,String> |
格式为key/value键值对。键值对个数不超过20条。
示例: "k8sTags": {
"key": "value"
}
|
taints |
否 |
支持给创建出来的节点加Taints来设置反亲和性,taints配置不超过20条。每条Taints包含以下3个参数:
示例: "taints": [{
"key": "status",
"value": "unavailable",
"effect": "NoSchedule"
}, {
"key": "looks",
"value": "bad",
"effect": "NoSchedule"
}]
|
|
maxPods |
否 |
Integer |
节点最大允许创建的实例数(Pod),该数量包含系统默认实例,取值范围为16~256。 该设置的目的为防止节点因管理过多实例而负载过重,请根据您的业务需要进行设置。 |
nicMultiqueue |
否 |
String |
"[{\"queue\":4}]"
包含如下字段:
|
nicThreshold |
否 |
String |
"0.3:0.6"
|
响应参数
状态码: 200
参数 |
参数类型 |
描述 |
---|---|---|
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。
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) {
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();
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。
# 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 = 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。
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.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 |
表示在指定集群下纳管节点的作业下发成功。 |
错误码
请参见错误码。