Vertical node scaling
Applies to: AKS on Azure Stack HCI 22H2, AKS on Windows Server
You can change the size of the virtual machines in a given node pool, to increase the resources available to the node pool in AKS enabled by Azure Arc.
To keep up with app demands in Azure Kubernetes Service (AKS), you might need to adjust the number of nodes that run your workloads. In some cases, scaling a cluster horizontally by adding nodes isn't sufficient to meet the demands from your app for more CPU cores or memory.
Without vertical node scaling, you must redeploy to a new node pool and move the app. This situation might not be ideal in resource limited edge environments. To enable this flexibility, AKS Arc introduces the capability to change the virtual machine (VM) size (SKU) of the VMs in a given node pool.
How vertical node scaling in AKS Arc works
In AKS Arc, target cluster node pools are managed internally as a machineDeployment. One property of a machineDeployment is the VM size (SKU) that was selected when the New-AksHciNodePool
command was executed.
To change the node pool to a different VM size (SKU), you can use the Set-AksHciNodePool
command for changing the VM size for worker nodes and the Set-AksHciCluster
command to change the VM size for control plane nodes.
When you submit the command with the new VM size (SKU), a new machineDeployment for the node pool or cluster is created, replacing the existing machine set. This event triggers an update flow in the underlying deployment system. Similar to an OS or Kubernetes version upgrade, the new machineDeployment uses a rolling update to replace one virtual machine in the node pool or control plane after the other. Each upgrade checks that the old node is correctly cordoned and drained before it's removed.
Note
The system assumes that enough hardware resources are available to scale up the new machine set in place of the old machine set.
Example process
The following example illustrates vertical node scaling.
Change the VM size for a Linux worker node pool from 4 cores and 6 GB of memory to 4 cores and 8 GB of memory
First, check the current VM size of the node pool on cluster mycluster
. From the output, you can see the VM size is Standard_K8S3_v1
:
get-akshcinodepool -clustername mycluster
Status : {Error, Phase, Details}
ClusterName : mycluster
NodePoolName : mycluster-linux
Version : v1.22.4
OsType : Linux
NodeCount : 2
VmSize : Standard_K8S3_v1
Phase : scaling
Standard_K8S3_v1
in the list of available VM sizes shows that it has 4 cores and 6 GB of memory:
Get-AksHciVmSize
VmSize CPU MemoryGB
------ --- --------
Default 4 4
Standard_A2_v2 2 4
Standard_A4_v2 4 8
Standard_D2s_v3 2 8
Standard_D4s_v3 4 16
Standard_D8s_v3 8 32
Standard_D16s_v3 16 64
Standard_D32s_v3 32 128
Standard_DS2_v2 2 7
Standard_DS3_v2 2 14
Standard_DS4_v2 8 28
Standard_DS5_v2 16 56
Standard_DS13_v2 8 56
Standard_K8S_v1 4 2
Standard_K8S2_v1 2 2
Standard_K8S3_v1 4 6
The new size you want to set for 4 cores and 8 GB of memory is Standard_A4_v2
. To update the node pool mycluster-linux
, use the Set-AksHciNodePool
cmdlet, which has been updated to accept a -VMsize
parameter:
Set-AksHciNodePool -ClusterName mycluster -name mycluster-linux -vmsize Standard_A4_v2
After a few minutes, the process is complete. You can check the result by running Get-AksHciNodePool
again and verify that the VmSize
is now Standard_A4_v2
:
get-akshcinodepool -clustername mycluster
Status : {Error, Phase, Details}
ClusterName : mycluster
NodePoolName : mycluster-linux
Version : v1.22.4
OsType : Linux
NodeCount : 2
VmSize : Standard_A4_v2
Phase : scaling
Next steps
See the documentation for the updated PowerShell commands: