You need to enable JavaScript to run this app.
导航
CreateNodes
最近更新时间:2024.07.08 15:57:26首次发布时间:2022.06.27 21:21:44

在指定集群下添加已有的云服务器(ECS)实例。

使用说明

  • 调用该接口前,请确保已创建节点池(默认节点池或自定义节点池)且节点池状态必须处于 {Running, [*]},否则无法调用该接口添加已有节点。
    • 默认节点池:调用 CreateDefaultNodePool 接口创建默认节点池(vke-default-nodepool),或者通过控制台在 添加已有节点 时创建默认节点池。
    • 自定义节点池:调用 CreateNodePool 接口创建自定义节点池,或者通过控制台 创建节点池

      注意

      • 仅满足如下条件的自定义节点池,支持添加 ECS 实例:
        • 节点池未开启 弹性伸缩 开关。
        • 当前节点池计费模式为 按量计费 或 包年包月
      • 仅满足如下条件的 ECS 实例,支持被添加到自定义节点池:
        • 属于当前集群相同的私有网络(VPC)。
        • 与目标节点池所属的项目(Project)一致。
        • 实例未加入任何集群或弹性伸缩(Auto Scaling)服务的伸缩组。
        • 实例仅有一张网卡,已绑定多张网卡的 ECS 实例不支持被添加。
        • 实例系统盘需满足:容量 > (目标节点池配置的镜像大小10 GiB)。
        • 实例数据盘必须包含目标节点池指定了挂载的数据盘,且盘类型和大小完全一致。
  • 调用该接口前,请先调用 ListSupportedResourceTypes 接口,确认创建节点时需要用到的资源是否在指定的地域和可用区中支持。
  • 此接口为异步接口,当此接口返回成功时,会返回节点的 ID 信息,此时节点将进入{Creating, [Progressing]}状态,直到创建执行成功{Running, [Ok]}。请调用 ListNodes 接口获取该节点当前的状态,查看节点是否创建成功。
  • 添加 弹性裸金属型 节点后,下线此类节点时,ECS 侧会根据运行状态优先正常关机,如无法正常关机,将执行强制关机。更多信息,请参见 StopInstance

请求说明

  • 请求方式:POST
  • 请求地址:https://open.volcengineapi.com/?Action=CreateNodes&Version=2022-05-12

请求参数

调用该 API 时的请求参数如下,除此之外还需传入公共请求参数。公共请求参数说明,请参见 公共参数

参数名称类型是否必选示例值说明
ActionStringCreateNodes公共参数,本接口值:CreateNodes。
VersionString2022-05-12公共参数,本接口值:2022-05-12。
ClientTokenStringed6b1190-dc17-11ec-9519-eb58a7******用于保证请求幂等性的字符串。该字符串由调用方传入,需保证不同请求之间唯一。ClientToken 对大小写敏感,且最大值不超过 64 个 ASCII 字符。

ClusterId

String

cc5silumrsfeq****

集群的 ID。
可以调用 ListClusters 接口,获取集群 ID。

注意

集群必须处于{Running,[*]}{Updating,[Progressing]}状态。可调用 ListClusters 接口获取集群当前的状态。

NodePoolId

String

pc51i0m6rsfen****

节点池 ID。

  • 不传入参数值:表示将已有云服务器实例添加到默认节点池。
  • 传入参数值:表示将已有云服务器实例添加到自定义节点池。可调用 ListNodePools 接口,获取目标自定义节点池 ID。

注意

若此处填写 自定义节点池 ID,则待添加的节点将应用自定义节点池上的 Kubernetes 配置和节点配置(包括 ECS 实例标签、标签、污点、封锁节点配置、项目、节点名称前缀等),因此 KeepInstanceNameAdditionalContainerStorageEnabledContainerStoragePathInitializeScriptKubernetesConfigImageId 参数配置将无效,上述参数仅在默认节点池中添加已有节点时有效。

InstanceIds

Array of String

["i-ybo9229pdf****"]

要添加到集群的云服务器实例 ID。

调用云服务器的 DescribeInstances 接口,获取云服务器实例 ID。该云服务器实例须满足以下条件:

  • 与集群在同一个私有网络内。
  • 未被其他集群使用。
  • 实例状态必须处于 运行中Running)。
  • 添加的节点数量不能超过集群所支持的最大节点数上限。
  • 请勿重复添加同一个云服务器实例。

注意

云服务器实例作为节点添加进集群实例的过程中,容器服务会重置云服务器实例的操作系统,该实例系统盘的历史数据会被清除。

KeepInstanceName

Boolean

false

是否保留原云服务器实例名称,取值:

  • false:(默认值)不保留原云服务器实例名称,由容器服务自动为其命名。
  • true:保留原云服务器实例名称。

AdditionalContainerStorageEnabled

Boolean

false

选择配置节点的数据盘并格式化挂载作为容器镜像和日志的存储目录,取值:

  • false:(默认值)关闭
  • true: 开启

ContainerStoragePath

String

/dev/vdb

使用该数据盘设备挂载容器和镜像存储目录/var/lib/containerd
仅当AdditionalContainerStorageEnabled=true时有效,且不能为空。

须满足以下条件,否则将初始化失败:

  • 仅支持已挂载数据盘的云服务器实例。
  • 指定数据盘设备名时,请确保该数据盘设备存在,否则会初始化失败。
  • 指定数据盘分区或逻辑卷名时,请确保该分区或逻辑卷存在,且为 ext4 文件系统。

注意

  • 指定数据盘设备时,将自动格式化后直接挂载,请注意提前备份数据。
  • 指定数据盘分区或逻辑卷名时,不需要格式化。

ImageId

String

image-kdvapv****

节点对应的云服务器实例使用的镜像 ID。
不同的镜像类型对应的镜像 ID 也不同,详细说明,请参见 容器服务支持的公共镜像

注意

若不传该参数,容器服务将根据您所选的云服务器实例规格,默认分配与该规格对应的 veLinux-VKE 镜像 ID。

InitializeScript

String

ZWNoby****VzdCI=

创建 ECS 节点并完成 Kubernetes 组件部署后执行的脚本。支持 Shell 格式,Base64 编码后长度不超过 1 KB。

  • 为空时,节点继承使用默认节点池配置的初始化脚本NodeConfig.InitializeScript
  • 自定义填写脚本内容后,使用自定义的脚本,忽略默认节点池配置的初始化脚本。

KubernetesConfig

Object KubernetesConfigRequest

节点 Kubernetes 相关配置。

  • 为空时,节点继承使用默认节点池的 Kubernetes 配置KubernetesConfig.Labels/Taints/Cordon
  • 自定义填写配置后,使用自定义配置内容,忽略默认节点池的 Kubernetes 配置。

请求示例

POST /?Action=CreateNodes&Version=2022-05-12 HTTP/1.1
Content-Type:application/json
{
    "ClusterId": "cc5silumrsfeq****",
    "InstanceIds": [
        "i-ybo9229pdf****"
    ],
    "KeepInstanceName": false,
    "AdditionalContainerStorageEnabled": false,
    "ClientToken": "ed6b1190-dc17-11ec-9519-eb58a7******"
}

返回参数

本接口返回参数如下表所示,公共返回参数请参见 返回结果

参数名称类型示例值说明
IdsArray of String["nc5t5epmrsf****"]节点 ID 列表。

返回示例

HTTP/1.1 200 OK
Content-Type:application/json
{
    "ResponseMetadata": {
        "RequestId": "021635330810134****",
        "Action": "CreateNodes",
        "Version": "2022-05-12",
        "Service": "vke",
        "Region": "cn-beijing"
    },
    "Result": {
        "Ids": [
            "nc5t5epmrsf****"
        ]
    }
}

错误码

本接口错误码如下表所示,公共错误码请参见 公共错误码

HTTP 状态码错误码错误信息描述
400QuotaExceeded.NodeThe number of nodes in the cluster has reached the limit.您当前集群所要创建的节点数量超出系统限额。您可以选择其他地域,也可以 提交工单 申请提高配额。
400OperationDenied.NodePoolStatusThe action has been forbidden due to wrong node pool status {{statusPhase}} and [{{statusConditions}}].指定节点池的当前状态不支持该操作。请确认该接口依赖的节点池状态后重试。
400ClusterVpcMismatch.{{parameter}}The specified {{resourceType}} {{resourceId}} is not in the VPC of cluster.指定的云服务器实例与集群不属于同一个私有网络,请确保两者属于同一私有网络内。
400LimitExceeded.NodeInClusterThe number of nodes exceeds the cluster defined pods config limit.Flannel 容器网络类型下,当前集群节点数超出了集群支持的最大节点数。 支持的最大节点数取决于 PodsConfig.FlannelConfig.PodCidrsMaxPodsPerNode。集群创建完成后不支持修改,请合理规划集群设置。
400AlreadyInUse.{{parameter}}The specified {{resourceType}} {{resourceId}} has already been used in another cluster.指定的云服务器实例已加入其他集群,请更换其他实例,或者从其他集群中移除该实例后重试。
400OperationDenied.InstanceStatusThe operation has been denied due to the wrong status of the specified ECS instance {{instanceId}}.云服务器实例当前状态不支持该操作。请确认调用该接口时的云服务器实例状态要求后重试。
400ZoneMismatch.InstanceThe specified ECS instance {{instanceId}} is not in the cluster defined zones.云服务器实例不在集群支持的可用区内。当前不支持修改集群可用区配置,请使用匹配集群可用区的云服务器实例。
400NotSupported.{{parameter}}The specified {{resourceType}} {{resourceContent}} is not supported.指定参数不支持,如 InstanceType、ImageId 等。请确认参数后重试。
400OperationDenied.ClusterStatusThe action has been denied due to wrong cluster status {{statusPhase}} and [{{statusConditions}}].指定集群的当前状态不支持该操作。请确认该接口依赖的集群状态后重试。
400ImageIdMismatch.InstanceIdThe specified InstanceId {{instanceId}} and ImageId {{imageId}} are mismatched.指定的 ECS 实例 ID(InstanceIds)与镜像 ID(ImageId)不匹配。请根据参数说明,配置准确的参数值后重试。
400ClusterVersionMismatch.ImageIdThe specified ImageId {{imageId}} and KubernetesVersion {{kubernetesVersion}} are mismatched.指定的镜像 ID(ImageId)与 集群 Kubernetes 版本不匹配。请根据参数说明,配置准确的参数值后重试。
400NodePoolConfigMismatch.InstanceIdThe specified InstanceId {{instanceId}} and nodePool Config {{content}} are mismatched.指定的 ECS 实例(InstanceIds)与目标节点池(NodePoolId)的配置不匹配。包括节点池对应的系统盘、数据盘、节点池所属项目等。请确认待添加的 ECS 实例与目标节点池的配置信息后重试。
400OperationDenied.NodePoolAutoScalingEnabledThe operation has been denied because nodePool AutoScaling is enabled.目标节点池已开启弹性伸缩功能,不支持添加已有 ECS 实例到该节点池。请关闭节点池的弹性伸缩功能或更换节点池后重试。
400OperationDenied.InstanceEniNumberThe operation has been denied because the InstanceId {{instanceId}} has more than one eni.指定的 ECS 实例有一张以上网卡(即有辅助网卡),因此不支持添加该实例到节点池。请解绑节点池的辅助网卡或更换 ECS 实例后重试。

400

OperationDenied.NodePoolReplicas

The operation has been denied due to the node pool replicas limit.

添加节点超过了节点池最大节点数上限。请减少要添加的云服务器实例 ID 数量后重试。
若目标节点池已开启弹性伸缩功能,可更新目标节点池最大节点数上限(MaxReplicas)后,重新调用本接口添加已有节点。调用 UpdateNodePoolConfig 接口更新节点池。

404NotFound.DefaultNodePoolThe default node pool is not found.默认节点池不存在,请先在控制台创建默认节点池。

创建默认节点池的方法,请参见 添加已有节点

409AlreadyExists.{{parameter}}The specified {{resourceType}} {{resourceId}} has already been included.指定的云服务器实例已加入默认节点池。