Raw New Markdown
Generating updated version of doc...
Rendered New Markdown
Generating updated version of doc...
---
title: Manually scale nodes in an Azure Kubernetes Service (AKS) cluster
description: Learn how to manually scale the number of nodes in an Azure Kubernetes Service (AKS) cluster.
ms.topic: how-to
ms.date: 01/22/2024
author: schaffererin
ms.author: schaffererin
# Customer intent: As a Kubernetes administrator, I want to manually scale the nodes in my AKS cluster, so that I can optimize resource allocation based on my application's performance needs.
---
# 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][kubernetes-drain] 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][service-quotas] 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.
### [Azure CLI](#tab/azure-cli)
1. Get the *name* of your node pool using the [`az aks show`][az-aks-show] command. The following example gets the node pool name for the cluster named *myAKSCluster* in the *myResourceGroup* resource group:
```azurecli-interactive
az aks show --resource-group myResourceGroup --name myAKSCluster --query agentPoolProfiles
```
The following example output shows that the *name* is *nodepool1*:
```output
[
{
"count": 1,
"maxPods": 110,
"name": "nodepool1",
"osDiskSizeGb": 30,
"osType": "Linux",
"vmSize": "Standard_DS2_v2"
}
]
```
2. Scale the cluster nodes using the [`az aks scale`][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*:
```azurecli-interactive
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:
```json
{
"aadProfile": null,
"addonProfiles": null,
"agentPoolProfiles": [
{
"count": 1,
"maxPods": 110,
"name": "nodepool1",
"osDiskSizeGb": 30,
"osType": "Linux",
"vmSize": "Standard_DS2_v2",
"vnetSubnetId": null
}
],
[...]
}
```
### [Azure PowerShell](#tab/azure-powershell)
1. Get the *name* of your node pool using the [`Get-AzAksCluster`][get-azakscluster] command. The following example gets the node pool name for the cluster named *myAKSCluster* in the *myResourceGroup* resource group:
```azurepowershell-interactive
Get-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster |
Select-Object -ExpandProperty AgentPoolProfiles
```
The following example output shows that the *name* is *nodepool1*:
```output
Name : nodepool1
Count : 1
VmSize : Standard_D2_v2
OsDiskSizeGB : 128
VnetSubnetID :
MaxPods : 30
OsType : Linux
MaxCount :
MinCount :
Mode : System
EnableAutoScaling :
Type : VirtualMachineScaleSets
OrchestratorVersion : 1.23.3
ProvisioningState : Succeeded
...
```
2. Scale the cluster nodes using the [Set-AzAksCluster][set-azakscluster] command. The following example scales a cluster named *myAKSCluster* to a single node. Provide your own `-NodeName` from the previous command, such as *nodepool1*:
```azurepowershell-interactive
Set-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -NodeCount 1 -NodeName <your node pool name>
```
The following example output shows the cluster successfully scaled to one node, as shown in the *AgentPoolProfiles* property:
```output
Name : nodepool1
Count : 1
VmSize : Standard_D2_v2
OsDiskSizeGB : 128
VnetSubnetID :
MaxPods : 30
OsType : Linux
MaxCount :
MinCount :
Mode : System
EnableAutoScaling :
Type : VirtualMachineScaleSets
OrchestratorVersion : 1.23.3
ProvisioningState : Succeeded
...
```
---
## 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](use-system-pools.md).
> [!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](./cluster-autoscaler.md#disable-the-cluster-autoscaler-on-a-node-pool).
### [Azure CLI](#tab/azure-cli)
* To scale a user pool to 0, you can use the [az aks nodepool scale][az-aks-nodepool-scale] in alternative to the above `az aks scale` command, and set `0` as your node count.
```azurecli-interactive
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](cluster-autoscaler.md) to `0`.
### [Azure PowerShell](#tab/azure-powershell)
* To scale a user pool to 0, you can use the [Update-AzAksNodePool][update-azaksnodepool] in alternative to the above `Set-AzAksCluster` command, and set `0` as your node count.
```azurepowershell-interactive
Update-AzAksNodePool -Name <your node pool name> -ClusterName myAKSCluster -ResourceGroupName myResourceGroup -NodeCount 0
```
* You can also autoscale `User` node pools to zero nodes, by setting the `-NodeMinCount` parameter of the [Cluster Autoscaler](cluster-autoscaler.md) 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][cluster-autoscaler] to automatically scale your cluster.
<!-- LINKS - external -->
[kubernetes-drain]: https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/
<!-- LINKS - internal -->
[az-aks-show]: /cli/azure/aks#az-aks-show
[get-azakscluster]: /powershell/module/az.aks/get-azakscluster
[az-aks-scale]: /cli/azure/aks#az-aks-scale
[set-azakscluster]: /powershell/module/az.aks/set-azakscluster
[cluster-autoscaler]: cluster-autoscaler.md
[az-aks-nodepool-scale]: /cli/azure/aks/nodepool#az-aks-nodepool-scale
[update-azaksnodepool]: /powershell/module/az.aks/update-azaksnodepool
[service-quotas]: ./quotas-skus-regions.md#service-quotas-and-limits