In Container Compute Service (ACS) clusters, all nodes are virtual nodes. When you create a cluster, ACS automatically creates one virtual node per selected zone. Each pod scheduled to a virtual node occupies a private vSwitch IP address.
Add virtual nodes when you need to:
-
Expand to more zones — distribute pods across additional zones for high availability (for example, distributed task workloads).
-
Add compute capacity — the existing zones lack sufficient compute capacity of a specific type for your workload.
-
Add IP addresses — the vSwitches in the current virtual nodes are running out of available IP addresses.
Limitations
Virtual nodes do not support custom labels, annotations, or taints.
Prerequisites
Before you begin, ensure that you have:
-
A vSwitch created in the target zone within the cluster's virtual private cloud (VPC). See Create and manage a vSwitch.
To confirm which zones already have virtual nodes, go to the Virtual Nodes page of the cluster. Each zone supports only one virtual node — you cannot add a second virtual node to an existing zone.
Choose a method
| Method | Best for |
|---|---|
| Method 1: Console (Create virtual node) | Visual, guided creation with automatic vSwitchIds update |
| Method 2: Console (Edit acs-profile ConfigMap) | Batch-updating vSwitches directly in the ConfigMap |
| Method 3: kubectl (Edit acs-profile ConfigMap) | CLI-based update, suitable for scripted or automated workflows |
All three methods trigger the same underlying mechanism: ACS creates a virtual node for any zone in vSwitchIds that does not already have one.
Method 1: Console (Create virtual node)
Creating a virtual node through the console automatically updates the vSwitchIds field in the acs-profile ConfigMap.
Log on to the ACS console.
On the Clusters, click the name of the cluster to go to the cluster management page.
-
In the navigation pane on the left, click Virtual Nodes.
-
Click Create Virtual Node.
-
In the vSwitch section, select a vSwitch and click OK. Each virtual node corresponds to a zone. You cannot create more than one virtual node for a zone. The console groups available vSwitches into three categories: You can also click Create vSwitch to create a new vSwitch in the VPC console.
Category Description Unavailable The zone does not support ACS compute capacity. These vSwitches cannot be selected. Recommended The zone has sufficient resources of the ComputeClass or GPU type you selected. Select at least one vSwitch from this category to match your compute type requirements. Others The zone has fewer or more limited resources than Recommended zones. Selectable but not optimal. 
-
Confirm that the new virtual node appears in the Virtual Nodes list with a status of Active.
Method 2: Modify the vSwitchIds configuration in acs-profile
Add a vSwitch ID to the vSwitchIds field in the acs-profile ConfigMap. ACS automatically creates a virtual node for any zone in the list that does not already have one.
To delete a virtual node, remove its vSwitch ID from vSwitchIds. Before doing so, make sure no pods are running on that virtual node.
Console
Log on to the ACS console.
On the Clusters, click the name of the cluster to go to the cluster management page.
-
Modify the
vSwitchIdsconfiguration in acs-profile.-
In the navigation pane on the left, choose Configurations > ConfigMaps.
-
On the ConfigMap page, select kube-system from the Namespace dropdown.
-
Find acs-profile and click Edit.
-
In the
vSwitchIdsfield, add the new vSwitch ID and click OK.NoteSeparate multiple vSwitch IDs with commas (
,). ACS creates a virtual node for each zone in the list that does not already have one.
-
-
Verify the result:
-
In the navigation pane on the left, click Virtual Nodes.
-
Confirm that a new virtual node appears in the list with a status of Active.
-
kubectl
-
Connect to your ACS cluster. See Obtain the kubeconfig file of a cluster and connect to the cluster using kubectl or Use kubectl on CloudShell to manage Kubernetes clusters.
-
Check the current virtual nodes:
kubectl get nodeSample output:
NAME STATUS ROLES AGE VERSION virtual-kubelet-cn-shanghai-g Ready agent 17d v1.30.1-alibaba.13+ae02e00117a549 virtual-kubelet-cn-shanghai-l Ready agent 17d v1.30.1-alibaba.13+ae02e00117a549 virtual-kubelet-cn-shanghai-m Ready agent 19d v1.30.1-alibaba.13+ae02e00117a549 -
Modify the
vSwitchIdsconfiguration in acs-profile.-
Open the acs-profile ConfigMap for editing:
kubectl edit cm -n kube-system acs-profile -
In the
vSwitchIdsfield, append the new vSwitch ID separated by a comma. After editing, thedatasection looks similar to:NoteSeparate multiple vSwitch IDs with commas (
,). ACS creates a virtual node for each zone in the list that does not already have one.data: enableClusterIp: "true" enableHybridMode: "false" enableLinuxArm64Node: "false" enableLogController: "false" enablePVCController: "true" enablePrivateZone: "false" enableReuseSSLKey: "false" enableUpdatePodResourceController: "false" enableWindowsAmd64Node: "false" featureGates: ProtectionFinalizers=false resourceGroupId: "" securityGroupId: sg-uf61931oi1w4te****** selectors: "" slsMachineGroup: "" vSwitchIds: vsw-uf68xih52l5inkm******,vsw-uf67n6lumryq7li******,vsw-uf6i6bsihi3sger******,vsw-uf6g4yjk3kemgei****** -
Save and exit the editor.
-
-
Verify that the new virtual node is created:
kubectl get nodeThe following sample output shows that a new virtual node named
virtual-kubelet-cn-shanghai-eis added:NAME STATUS ROLES AGE VERSION virtual-kubelet-cn-shanghai-e Ready agent 8s v1.30.1-alibaba.13+ae02e00117a549 virtual-kubelet-cn-shanghai-g Ready agent 17d v1.30.1-alibaba.13+ae02e00117a549 virtual-kubelet-cn-shanghai-l Ready agent 17d v1.30.1-alibaba.13+ae02e00117a549 virtual-kubelet-cn-shanghai-m Ready agent 19d v1.30.1-alibaba.13+ae02e00117a549