更新时间:2024-10-22 GMT+08:00

纳管节点

功能介绍

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

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

URI

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

表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参数

参数

是否必选

参数类型

描述

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镜像的实际操作系统版本为准。请选择当前集群支持的操作系统版本,例如EulerOS 2.5、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”

password

String

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

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

参数

是否必选

参数类型

描述

userTags

Array of UserTag objects

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

rootVolume

ReinstallVolumeSpec object

系统盘重装配置

表9 UserTag

参数

是否必选

参数类型

描述

key

String

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

value

String

云服务器标签的值

表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

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

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

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

说明:

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

表12 Storage

参数

是否必选

参数类型

描述

storageSelectors

Array of StorageSelectors objects

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

storageGroups

Array of StorageGroups objects

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

表13 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五个字段。

表14 matchLabels

参数

是否必选

参数类型

描述

size

String

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

volumeType

String

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

metadataEncrypted

String

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

metadataCmkid

String

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

count

String

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

表15 StorageGroups

参数

是否必选

参数类型

描述

name

String

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

说明:
  • 当cceManaged=true时,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中空间配置的详细管理。

表16 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配置。

表17 LVMConfig

参数

是否必选

参数类型

描述

lvType

String

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

path

String

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

表18 RuntimeConfig

参数

是否必选

参数类型

描述

lvType

String

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

表19 ReinstallRuntimeConfig

参数

是否必选

参数类型

描述

dockerBaseSize

Integer

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

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

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

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

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的节点默认为"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配置不超过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"
}]

maxPods

Integer

节点最大允许创建的实例数(Pod),该数量包含系统默认实例,取值范围为16~256。 该设置的目的为防止节点因管理过多实例而负载过重,请根据您的业务需要进行设置。

表22 Taint

参数

是否必选

参数类型

描述

key

String

value

String

effect

String

作用效果

表23 NodeLifecycleConfig

参数

是否必选

参数类型

描述

preInstall

String

安装前执行脚本

说明:

输入的值需要经过Base64编码,方法为echo -n "待编码内容" | base64。

postInstall

String

安装后执行脚本

说明:

输入的值需要经过Base64编码,方法为echo -n "待编码内容" | base64。

表24 ReinstallExtendParam

参数

是否必选

参数类型

描述

alpha.cce/NodeImageID

String

指定待切换目标操作系统所使用的用户镜像ID,已废弃。 指定此参数等价于指定ReinstallVolumeSpec中imageID,原取值将被覆盖。

表25 HostnameConfig

参数

是否必选

参数类型

描述

type

String

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

  • privateIp: 将节点私有IP作为K8S节点名称
  • cceNodeName: 将CCE节点名称作为K8S节点名称
说明:
  • 配置为cceNodeName的节点, 其节点名称、K8S节点名称以及虚机名称相同。节点名称不支持修改, 并且在ECS侧修改了虚机名称,同步云服务器时,不会将修改后的虚机名称同步到节点。
  • 配置为cceNodeName的节点,为了避免K8S节点名称冲突,系统会自动在节点名称后添加后缀,后缀的格式为中划线(-)+五位随机字符,随机字符的取值为[a-z0-9]。

响应参数

状态码: 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"
}

状态码

状态码

描述

200

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

错误码

请参见错误码