Manually scale the node count in an Azure Kubernetes Service (AKS) cluster

If the resource needs of your applications change, your cluster performance may be impacted due to low capacity on CPU, memory, PID space, or disk sizes. To address these changes, you can manually scale your AKS cluster to run a different number of nodes. When you scale in, nodes are carefully cordoned and drained to minimize disruption to running applications. When you scale out, AKS waits until nodes are marked Ready by the Kubernetes cluster before pods are scheduled on them.

This article describes how to manually increase or decrease the number of nodes in an AKS cluster.

Before you begin

  • Review the AKS service quotas and limits to verify your cluster can scale to your desired number of nodes.

  • The name of a node pool may only contain lowercase alphanumeric characters and must begin with a lowercase letter.

    • For Linux node pools, the length must be between 1-11 characters.
    • For Windows node pools, the length must be between 1-6 characters.

Scale the cluster nodes

Important

Removing nodes from a node pool using the kubectl command isn't supported. Doing so can create scaling issues with your AKS cluster.

  1. Get the name of your node pool using the az aks show command. The following example gets the node pool name for the cluster named myAKSCluster in the myResourceGroup resource group:

    az aks show --resource-group myResourceGroup --name myAKSCluster --query agentPoolProfiles
    

    The following example output shows that the name is nodepool1:

    [
      {
        "count": 1,
        "maxPods": 110,
        "name": "nodepool1",
        "osDiskSizeGb": 30,
        "osType": "Linux",
        "vmSize": "Standard_DS2_v2"
      }
    ]
    
  2. Scale the cluster nodes using the az aks scale command. The following example scales a cluster named myAKSCluster to a single node. Provide your own --nodepool-name from the previous command, such as nodepool1:

    az aks scale --resource-group myResourceGroup --name myAKSCluster --node-count 1 --nodepool-name <your node pool name>
    

    The following example output shows the cluster successfully scaled to one node, as shown in the agentPoolProfiles section:

    {
      "aadProfile": null,
      "addonProfiles": null,
      "agentPoolProfiles": [
        {
          "count": 1,
          "maxPods": 110,
          "name": "nodepool1",
          "osDiskSizeGb": 30,
          "osType": "Linux",
          "vmSize": "Standard_DS2_v2",
          "vnetSubnetId": null
        }
      ],
      [...]
    }
    

Scale User node pools to 0

Unlike System node pools that always require running nodes, User node pools allow you to scale to 0. To learn more on the differences between system and user node pools, see System and user node pools.

Important

You can't scale a user node pool with the cluster autoscaler enabled to 0 nodes. To scale a user node pool to 0 nodes, you must disable the cluster autoscaler first. For more information, see Disable the cluster autoscaler on a node pool.

  • To scale a user pool to 0, you can use the az aks nodepool scale in alternative to the above az aks scale command, and set 0 as your node count.

    az aks nodepool scale --name <your node pool name> --cluster-name myAKSCluster --resource-group myResourceGroup  --node-count 0 
    
  • You can also autoscale User node pools to zero nodes, by setting the --min-count parameter of the Cluster Autoscaler to 0.

Next steps

In this article, you manually scaled an AKS cluster to increase or decrease the number of nodes. You can also use the cluster autoscaler to automatically scale your cluster.