功能介紹
該API用于在指定集群下納管節(jié)點。
集群管理的URL格式為:https://Endpoint/uri。其中uri為資源路徑,也即API訪問的路徑。
調用方法
請參見如何調用API。
URI
POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/add
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
project_id |
是 |
String |
項目ID,獲取方式請參見如何獲取接口URI中參數(shù)。 |
|
cluster_id |
是 |
String |
集群ID,獲取方式請參見如何獲取接口URI中參數(shù)。 |
請求參數(shù)
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
Content-Type |
是 |
String |
消息體的類型(格式) |
|
X-Auth-Token |
是 |
String |
調用接口的認證方式分為Token和AK/SK兩種,如果您使用的Token方式,此參數(shù)為必填,請?zhí)顚慣oken的值,獲取方式請參見獲取token。 |
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
apiVersion |
是 |
String |
API版本,固定值“v3”。 |
|
kind |
是 |
String |
API類型,固定值“List”。 |
|
nodeList |
是 |
納管節(jié)點列表 |
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
serverID |
是 |
String |
服務器ID,獲取方式請參見ECS/BMS相關資料。 |
|
spec |
是 |
節(jié)點重裝配置參數(shù)。當前不支持納管節(jié)點接入節(jié)點池。 |
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
os |
是 |
String |
操作系統(tǒng)。指定自定義 鏡像 場景將以IMS鏡像的實際操作系統(tǒng)版本為準。請選擇當前集群支持的操作系統(tǒng)版本,例如EulerOS 2.5、CentOS 7.6、EulerOS 2.8。 |
|
login |
是 |
節(jié)點的登錄方式。密鑰對和密碼登錄方式二者必選其一。 |
|
|
name |
否 |
String |
節(jié)點名稱 說明:
重裝時指定將修改節(jié)點名稱,且服務器名稱會同步修改。默認以服務器當前名稱作為節(jié)點名稱。 命名規(guī)則:以小寫字母開頭,由小寫字母、數(shù)字、中劃線(-)組成,長度范圍1-56位。 |
|
serverConfig |
否 |
服務器配置 |
|
|
volumeConfig |
否 |
卷管理配置 |
|
|
runtimeConfig |
否 |
容器運行時配置 |
|
|
k8sOptions |
否 |
Kubernetes節(jié)點配置 |
|
|
lifecycle |
否 |
節(jié)點自定義生命周期配置 |
|
|
initializedConditions |
否 |
Array of strings |
自定義初始化標記。 CCE節(jié)點在初始化完成之前,會打上初始化未完成污點(node.cloudprovider.kubernetes.io/uninitialized)防止pod調度到節(jié)點上。 cce支持自定義初始化標記,在接收到initializedConditions參數(shù)后,會將參數(shù)值轉換成節(jié)點標簽,隨節(jié)點下發(fā),例如:cloudprovider.openvessel.io/inject-initialized-conditions=CCEInitial_CustomedInitial。 當節(jié)點上設置了此標簽,會輪詢節(jié)點的status.Conditions,查看conditions的type是否存在標記名,如CCEInitial、CustomedInitial標記,如果存在所有傳入的標記,且狀態(tài)為True,認為節(jié)點初始化完成,則移除初始化污點。
|
|
extendParam |
否 |
重裝拓展參數(shù),已廢棄 |
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
sshKey |
否 |
String |
選擇密鑰對方式登錄時的密鑰對名稱。 |
|
userPassword |
否 |
選擇密碼方式登錄時的帳號密碼信息,之后可通過此帳號密碼登錄節(jié)點。 |
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
username |
否 |
String |
登錄帳號,默認為“root” |
|
password |
是 |
String |
登錄密碼,若創(chuàng)建節(jié)點通過用戶名密碼方式,即使用該字段,則響應體中該字段作屏蔽展示。 密碼復雜度要求:
|
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
userTags |
否 |
云服務器 標簽,鍵必須唯一,CCE支持的最大用戶自定義標簽數(shù)量依region而定,自定義標簽數(shù)上限為5個。 |
|
|
rootVolume |
否 |
系統(tǒng)盤重裝配置 |
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
key |
否 |
String |
云服務器標簽的鍵。不得以"CCE-"或"__type_baremetal"開頭 |
|
value |
否 |
String |
云服務器標簽的值 |
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
imageID |
否 |
String |
用戶自定義鏡像ID |
|
cmkID |
否 |
String |
用戶主密鑰ID。默認為空時,表示 云硬盤 不加密。 |
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
lvmConfig |
否 |
String |
Docker數(shù)據(jù)盤配置項。 默認配置示例如下: "lvmConfig":"dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear"
包含如下字段:
|
|
storage |
否 |
磁盤初始化配置管理參數(shù)。 該參數(shù)配置邏輯較為復雜,詳細說明請參見節(jié)點磁盤掛載。 該參數(shù)缺省時,按照extendParam中的DockerLVMConfigOverride(已廢棄)參數(shù)進行磁盤管理。此參數(shù)對1.15.11及以上集群版本支持。 說明:
如存在節(jié)點規(guī)格涉及本地盤并同時使用云硬盤場景時,請勿缺省此參數(shù),避免出現(xiàn)將用戶未期望的磁盤分區(qū)。 |
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
storageSelectors |
是 |
磁盤選擇,根據(jù)matchLabels和storageType對匹配的磁盤進行管理。磁盤匹配存在先后順序,靠前的匹配規(guī)則優(yōu)先匹配。 |
|
|
storageGroups |
是 |
由多個存儲設備組成的存儲組,用于各個存儲空間的劃分。 |
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
name |
是 |
String |
selector的名字,作為storageGroup中selectorNames的索引,因此各個selector間的名字不能重復。 |
|
storageType |
是 |
String |
存儲類型,當前僅支持evs(云硬盤)或local(本地盤);local存儲類型不支持磁盤選擇,所有本地盤將被組成一個VG,因此也僅允許只有一個local類型的storageSelector。 |
|
matchLabels |
否 |
evs盤的匹配字段,支持DataVolume中的size、volumeType、metadataEncrypted、metadataCmkid、count五個字段。 |
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
size |
否 |
String |
匹配的磁盤大小,不填則無磁盤大小限制。例如:100. |
|
volumeType |
否 |
String |
云硬盤類型,目前支持SSD\GPSSD\SAS\ESSD\SATA等。 |
|
metadataEncrypted |
否 |
String |
磁盤加密標識符,0代表不加密,1代表加密。 |
|
metadataCmkid |
否 |
String |
加密磁盤的用戶主密鑰ID,長度為36字節(jié)的字符串。 |
|
count |
否 |
String |
磁盤選擇個數(shù),不填則選擇所有此類磁盤。 |
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
name |
是 |
String |
storageGroups的名字,作為虛擬存儲組的名字,因此各個group名字不能重復。 說明:
|
|
|
cceManaged |
否 |
Boolean |
k8s及runtime所屬存儲空間。有且僅有一個group被設置為true,不填默認false。 |
|
selectorNames |
是 |
Array of strings |
對應storageSelectors中的name,一個group可選擇多個selector;但一個selector只能被一個group選擇。 |
|
virtualSpaces |
是 |
group中空間配置的詳細管理。 |
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
name |
是 |
String |
virtualSpace的名稱,當前僅支持三種類型:kubernetes、runtime、user。
|
|
size |
是 |
String |
virtualSpace的大小,僅支持整數(shù)百分比。例如:90%。 說明:
一個group中所有virtualSpace的百分比之和不得超過100% |
|
lvmConfig |
否 |
lvm配置管理,適用于kubernetes和user空間配置。 需要注意:一個virtualSpace僅支持一個config配置。 |
|
|
runtimeConfig |
否 |
runtime配置管理,適用于運行時空間配置。 需要注意:一個virtualSpace僅支持一個config配置。 |
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
lvType |
是 |
String |
LVM寫入模式:linear、striped。linear:線性模式;striped:條帶模式,使用多塊磁盤組成條帶模式,能夠提升磁盤性能。 |
|
path |
否 |
String |
磁盤掛載路徑。僅在用戶配置中生效。支持包含:數(shù)字、大小寫字母、點、中劃線、下劃線的絕對路徑。 |
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
lvType |
是 |
String |
LVM寫入模式:linear、striped。linear:線性模式;striped:條帶模式,使用多塊磁盤組成條帶模式,能夠提升磁盤性能。 |
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
dockerBaseSize |
否 |
Integer |
節(jié)點上單容器的可用磁盤空間大小,單位G。 不配置該值或值為0時將使用默認值,Devicemapper模式下默認值為10;OverlayFS模式默認不限制單容器可用空間大小,且dockerBaseSize設置僅在新版本集群的EulerOS和HCE節(jié)點上生效。 CCE節(jié)點容器運行時空間配置請參考數(shù)據(jù)盤空間分配說明。 Devicemapper模式下建議dockerBaseSize配置不超過80G,設置過大時可能會導致容器運行時初始化時間過長而啟動失敗,若對容器磁盤大小有特殊要求,可考慮使用掛載外部或本地存儲方式代替。 |
|
runtime |
否 |
容器運行時, 默認場景:
|
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
name |
否 |
String |
容器運行時,默認場景:
|
|
參數(shù) |
是否必選 |
參數(shù)類型 |
描述 |
|---|---|---|---|
|
labels |
否 |
Map<String,String> |
格式為key/value鍵值對。鍵值對個數(shù)不超過20條。
示例: "k8sTags": {
"key": "value"
}
|
|
taints |
否 |
支持給創(chuàng)建出來的節(jié)點加Taints來設置反親和性,taints配置不超過20條。每條Taints包含以下3個參數(shù):
示例: "taints": [{
"key": "status",
"value": "unavailable",
"effect": "NoSchedule"
}, {
"key": "looks",
"value": "bad",
"effect": "NoSchedule"
}]
|
|
|
maxPods |
否 |
Integer |
節(jié)點最大允許創(chuàng)建的實例數(shù)(Pod),該數(shù)量包含系統(tǒng)默認實例,取值范圍為16~256。 該設置的目的為防止節(jié)點因管理過多實例而負載過重,請根據(jù)您的業(yè)務需要進行設置。 |
|
nicMultiqueue |
否 |
String |
"[{\"queue\":4}]"
包含如下字段:
|
|
nicThreshold |
否 |
String |
"0.3:0.6"
|
響應參數(shù)
狀態(tài)碼: 200
|
參數(shù) |
參數(shù)類型 |
描述 |
|---|---|---|
|
jobid |
String |
提交任務成功后返回的任務ID,用戶可以使用該ID對任務執(zhí)行情況進行查詢。 |
請求示例
納管一個節(jié)點到集群中,且節(jié)點操作系統(tǒng)為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"
}
}
} ]
}
響應示例
狀態(tài)碼: 200
表示在指定集群下納管節(jié)點的作業(yè)下發(fā)成功。
{
"jobid" : "2ec9b78d-9368-46f3-8f29-d1a95622a568"
}
SDK代碼示例
SDK代碼示例如下。
納管一個節(jié)點到集群中,且節(jié)點操作系統(tǒng)為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());
}
}
}
納管一個節(jié)點到集群中,且節(jié)點操作系統(tǒng)為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)
納管一個節(jié)點到集群中,且節(jié)點操作系統(tǒng)為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代碼示例。
狀態(tài)碼
|
狀態(tài)碼 |
描述 |
|---|---|
|
200 |
表示在指定集群下納管節(jié)點的作業(yè)下發(fā)成功。 |
錯誤碼
請參見錯誤碼。
