Remove worker nodes from a node pool or cluster in the ACK console. Perform this operation during off-peak hours to minimize service impact.
Always remove nodes through the ACK console. Running kubectl delete node bypasses ACK's removal workflow and leaves the underlying ECS instance in an inconsistent state.
Use cases
Remove a node when you need to:
-
Retire an unmanaged node — Old clusters created before node pool support was introduced may have unmanaged worker nodes. Remove the node, then add it to an existing node pool for centralized management.
-
Replace an ECS instance — Add the new ECS instance to the node pool first, then remove the old one.
-
Scale in a node pool — Remove a specific ECS instance from a node pool with manual or automatic scaling to reduce costs.
-
Migrate a node between node pools — Remove the node from the source node pool and add it to the destination node pool.
-
Resize an ECS instance — Remove the node, change the instance type in the ECS console, then add the node back.
-
Change the billing method — Remove the node, change the billing method from pay-as-you-go to subscription in the ECS console, then add the node back.
-
Re-initialize an abnormal node — Remove the node and add it back to reset the system disk.
WarningRe-initializing a node replaces its system disk. Back up any data on the system disk before proceeding.
What happens when you remove a node
When you remove a node, ACK performs the following steps in order:
-
Drains the node (if Drain Node is selected) — ACK evicts all pods on the node to other available nodes before removal. This prevents service interruptions but requires other nodes to have enough capacity to accept the workload.
-
Removes the node from the cluster — The node is de-registered from the cluster. If the node pool has an Expected Nodes count set, ACK automatically adjusts the count.
-
Releases the ECS instance (if Release ECS Instance is selected) — ACK releases the ECS instance and its data disks. This action is permanent.
Review the two removal options before you start:
| Option | When to select | Effect if not selected |
|---|---|---|
| Drain Node | Always, unless you have already manually drained the node | Pods on the node are not evicted before removal, which may cause service disruptions |
| Release ECS Instance | When you no longer need the underlying ECS instance | The ECS instance continues running and billing; you manage its lifecycle manually |
Usage notes
-
Do not release nodes or remove instances directly in the ECS console, Auto Scaling (ESS) console, or through their APIs. Do not let subscription instances auto-release on expiration. These actions stop the node and automatically remove it from the ACK console. If the node pool has an Expected Nodes count, ACK scales out to replace the removed instance.
-
Back up your data before removing a node. Pod migration during removal may affect running services.
-
Check node affinity and scheduling policies for pods on the node before removal to confirm they can be rescheduled to other nodes.
-
Data disk and system disk data is permanently lost when a node is released. To persist data beyond the node lifecycle, use a PersistentVolume (PV).
Drain node details
The default graceful termination timeout during a node drain is 30 minutes. This applies even if a pod's terminationGracePeriodSeconds is set to a longer value (for example, 40 minutes). If a pod does not terminate within 30 minutes, ACK forcibly terminates it, the drain fails, and the node removal stops. To retry, manually restart the operation in the console.
If your pods require a longer termination period, manually drain the node first:
kubectl drain <nodeName> [options]
| Placeholder | Description | Example |
|---|---|---|
<nodeName> |
Name of the node to drain | cn-hangzhou.10.126.XX.XX |
[options] |
Optional flags | --force --ignore-daemonsets --delete-local-data |
Run kubectl drain --help for the full list of options.
After all application pods are evicted, clear the Drain Node checkbox and then remove the node.
Pod Disruption Budget (PDB): The drain operation evicts pods according to any PDB rules configured in your cluster. If a PDB prevents eviction, the drain fails. Review and, if needed, modify or delete the relevant PDB rules before draining.
Release ECS instance details
-
Only pay-as-you-go ECS instances and their data disks can be released immediately.
-
Subscription ECS instances are released automatically when the subscription expires. For early release, request a refund or convert the billing method to pay-as-you-go first.
-
For smart hosting node pools, ACK automatically manages the node lifecycle by adding or removing nodes based on workload requirements. Removing a node completely removes the underlying ECS resources.
Remove a node from a node pool
-
Log on to the ACK console. In the left navigation pane, click Clusters.
-
On the Clusters page, click the cluster name. In the left navigation pane, choose Nodes > Node Pools.
-
Click the name of the target node pool, then go to the Nodes tab.
-
Remove the node:
-
Single node: In the Actions column, choose More > Remove for the target node.

-
Multiple nodes: Select the target nodes and click Batch Remove at the bottom of the page.

-
-
In the dialog, configure Drain Node and Release ECS Instance as needed, read the on-screen notes, and confirm the operation.

Remove a node from a cluster
-
Log on to the ACK console. In the left navigation pane, click Clusters.
-
On the Clusters page, click the cluster name. In the left navigation pane, choose Nodes > Nodes.
-
On the Nodes page, remove the node:
-
Single node: In the Actions column, choose More > Remove for the target node.

-
Multiple nodes: Select the target nodes and click Batch Remove at the bottom of the page.

-
-
In the dialog, configure Drain Node and Release ECS Instance as needed, read the on-screen notes, and confirm the operation.

Troubleshooting
Node removal fails
Node removal typically fails because of the graceful termination timeout or a Pod Disruption Budget (PDB) blocking eviction. To resolve this, manually drain the node before removing it:
kubectl drain <nodeName> [options]
| Placeholder | Description | Example |
|---|---|---|
<nodeName> |
Name of the node to drain | cn-hangzhou.10.126.XX.XX |
[options] |
Optional flags | --force --ignore-daemonsets --delete-local-data |
After all application pods are evicted, remove the node from the console with Drain Node unchecked.
What's next
-
To add a node back to the cluster or node pool, see Add existing nodes.
-
To remove nodes programmatically, see RemoveNodePoolNodes and DeleteClusterNodes.
-
To migrate unmanaged nodes to a node pool, see Migrate unmanaged nodes to a node pool.
-
To manually adjust node pool size using Expected Nodes, see Manually scale a node pool.
-
To re-initialize a system disk after re-adding a node, see Re-initialize a system disk.