Manually adds an existing instance to a specified Container Service for Kubernetes (ACK) cluster. This operation returns a unique executable script. You can run this script on an existing instance to add the instance to the specified ACK cluster as a node.

Debugging

OpenAPI Explorer automatically calculates the signature value. For your convenience, we recommend that you call this operation in OpenAPI Explorer. OpenAPI Explorer dynamically generates the sample code of the operation for different SDKs.

Request syntax

POST /clusters/ClusterId/attachscript HTTP/1.1 
Content-Type:application/json
{
  "nodepool_id" : "String",
  "format_disk" : Boolean,
  "keep_instance_name" : Boolean,
  "rds_instances" : [ "String" ],
  "arch" : "String",
  "options" : "String"
}

Request parameters

Table 1. Request path parameters
Parameter Type Required Example Description
ClusterId String Yes ca375a93a30474552ad2a0ebe183e****

The ID of the ACK cluster that you want to manage.

Table 2. Request body parameters
Parameter Type Required Example Description
nodepool_id String No np1c9229d9be2d432c93f77a88fca0****

The ID of the node pool to which you want to add an existing node. This parameter allows you to add an existing node to a specified node pool.

Note If you do not specify a node pool ID, the node is added to a default node pool.
format_disk Boolean No false

Specifies whether to mount data disks to an existing instance when you add the instance to the cluster. You can add data disks to store the container data and images. Valid values:

  • true: mounts data disks to the existing instance that you want to add. After a data disk is mounted, the original data that is stored on the disk is cleared. Before you mount a data disk to the nodes, we recommend that you back up the disk data.
  • false: does not mount data disks to the existing instance.

Default value: false.

A data disk is mounted based on the following rules:

  • If the ECS instances are already mounted with data disks and the file system of the last data disk is not initialized, the system automatically formats this data disk to ext4 and mounts it to /var/lib/docker and /var/lib/kubelet.
  • If no data disk is mounted to the ECS instance, the system does not purchase a new data disk.
keep_instance_name Boolean No true

Specifies whether to keep the instance name after it is added to the cluster. If you set this parameter to false, the instance is named in the worker-k8s-for-cs-<clusterid> format. Valid values:

  • true: keeps the instance name.
  • false: does not keep the instance name.

Default value: true.

rds_instances Array of String No rm-xxx

The names of the ApsaraDB RDS instances.

arch String No amd64

The CPU architecture of the node. Valid values: amd64, arm, and arm64.

Default value: amd64.

Note This parameter is required if you want to add the existing node to a managed edge Kubernetes cluster.
options String No {\"enableIptables\": true,\"manageRuntime\": true,\"quiet\": true,\"allowedClusterAddons\": [\"kube-proxy\",\"flannel\",\"coredns\"]}

The node configurations for the existing instance that you want to add as a node.

Note This parameter is required if you want to add the existing instance to a managed edge Kubernetes cluster.

Response syntax

HTTP/1.1 200
Content-Type:application/json
{
  "result" : "String"
}

Response parameters

Table 3. Response body parameters
Parameter Type Example Description
String "wget http://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/public/pkg/run/attach/1.12.6-aliyunedge.1/edgeadm -O edgeadm; chmod u+x edgeadm; ./edgeadm join --openapi-token=XXX --node-spec="{\"flannelIface\":\"eth0\",\"enableIptables\":true,\"assumeYes\":true,\"manageRuntime\":true,\"nodeNameStrategy\":\"hostname\",\"enabledAddons\":[\"kube-proxy\",\"flannel\",\"coredns\"]}""

The returned script that is used to add an existing instance to the ACK cluster.

Examples

Sample requests

POST /clusters/ca375a93a30474552ad2a0ebe183e****/attachscript HTTP/1.1 
Content-Type:application/json
{
  "nodepool_id" : "np1c9229d9be2d432c93f77a88fca0****",
  "format_disk" : false,
  "keep_instance_name" : true,
  "rds_instances" : [ "rm-xxx" ],
  "arch" : "amd64",
  "options" : "{\\\"enableIptables\\\": true,\\\"manageRuntime\\\": true,\\\"quiet\\\": true,\\\"allowedClusterAddons\\\": [\\\"kube-proxy\\\",\\\"flannel\\\",\\\"coredns\\\"]}"
}

Description of the sample request

When you call this operation to add an existing instance to a managed edge Kubernetes cluster, the options and arch parameters are required. The following content describes the options parameter:
```
{
	"options":"{
		"allowedClusterAddons": The name of the component. 
		"enableIptables": Specifies whether to enable iptables. Default value: true. 
		"flannelIface": the name of the network interface used by Flannel. By default, this parameter is set to the name of the default network interface of the node.  
		"gpuVersion": Specifies whether the node is a GPU-accelerated node. By default, this parameter is empty. Valid values: Nvidia_Tesla_T4, Nvidia_Tesla_P4, and Nvidia_Tesla_P100. 
		"manageRuntime": Specifies whether to use edgeadm to install and check the runtime. Default value: false. 
		"nodeNameOverride": The node name. Valid values: "", "*", and "*.XXX".The default value is "", which indicates that the node is named after the host. A value of "*" indicates that a random string of six characters is used as the node name. A value of "*.XXX" indicates a random string of six characters followed by a suffix is used as the node name. 
		"quiet": Specifies whether to enable the silent installation mode. 
	}
}
```

Sample success responses

XML format

HTTP/1.1 200 OK
Content-Type:application/xml

<result>"wget http://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/public/pkg/run/attach/1.12.6-aliyunedge.1/edgeadm -O edgeadm; chmod u+x edgeadm; ./edgeadm join --openapi-token=XXX --node-spec="{\"flannelIface\":\"eth0\",\"enableIptables\":true,\"assumeYes\":true,\"manageRuntime\":true,\"nodeNameStrategy\":\"hostname\",\"enabledAddons\":[\"kube-proxy\",\"flannel\",\"coredns\"]}""</result>

JSON format

HTTP/1.1 200 OK
Content-Type:application/json

{
  "result" : "\"wget http://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/public/pkg/run/attach/1.12.6-aliyunedge.1/edgeadm -O edgeadm; chmod u+x edgeadm; ./edgeadm join --openapi-token=XXX --node-spec=\"{\\\"flannelIface\\\":\\\"eth0\\\",\\\"enableIptables\\\":true,\\\"assumeYes\\\":true,\\\"manageRuntime\\\":true,\\\"nodeNameStrategy\\\":\\\"hostname\\\",\\\"enabledAddons\\\":[\\\"kube-proxy\\\",\\\"flannel\\\",\\\"coredns\\\"]}\"\""
}

Sample response description

If the cluster is not a managed edge Kubernetes cluster, the following output is returned:
"curl http://aliacs-k8s-cn-chengdu.oss-cn-chengdu-internal.aliyuncs.com/public/pkg/run/attach/1.16.9-aliyun.1/attach_node.sh | bash -s -- --node-name-mode nodeip --cms-enabled --cms-version 1.3.7 --openapi-token **** --addon-names flannel,csi-plugin,csi-provisioner,logtail-ds,ack-node-problem-detector,nginx-ingress-controller,kube-flannel-ds --cpu-policy none --node-cidr-mask 26 --node-port-range 30000-32767 --runtime docker --runtime-version 19.03.5"

If the cluster is a managed edge Kubernetes cluster, the following output is returned:
"wget http://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/public/pkg/run/attach/1.12.6-aliyunedge.1/edgeadm -O edgeadm; chmod u+x edgeadm; ./edgeadm join --openapi-token=*** --node-spec="{\"flannelIface\":\"eth0\",\"enableIptables\":true,\"assumeYes\":true,\"manageRuntime\":true,\"nodeNameStrategy\":\"hostname\",\"enabledAddons\":[\"kube-proxy\",\"flannel\",\"coredns\"]}""

Error codes

For a list of error codes, visit the API Error Center.