Node Pools
What Are AKS Node Pools?
In Azure Kubernetes Service (AKS), a node pool is a scalable pool of VMs that serve as the compute infrastructure for running containerised workloads. Each node in a pool is an Azure VMSS, and all nodes in a given pool share the same configuration (e.g. VM size, OS type).
There are two main types of node pools:
- System node pools: These host critical system components like CoreDNS and kube-proxy. They must have at least one node and are required for the cluster to function. The system node pool can be used to run user workloads if necessary, but it is typically reserved for system services to ensure they have dedicated resources.
- User node pools: These are intended for running your application workloads. You can have multiple user node pools to support different workload types or configurations.
How Are Node Pools Used?
Node pools allow you to:
- Isolate workloads: For example, you can run production and development workloads on separate pools, on separate subnets and with separate permissions.
- Use different OS types: You can mix Linux and Windows node pools in the same cluster.
- Scale independently: Each node pool can scale up or down based on demand using the Cluster Autoscaler.
- Apply different VM SKUs: You can optimise cost and performance by selecting appropriate VM sizes for each pool.
AKS uses Virtual Machine Scale Sets (VMSS) as the underlying infrastructure for node pools, enabling autoscaling and high availability.
VM SKUs in Node Pools
When you create a node pool, you specify the VM size (SKU) for the nodes. This determines the compute, memory, and storage capacity available to your workloads. This selection determines the SKU of the Virtual Machine Scale Set (VMSS) that backs the node pool, and all nodes in the pool will use the same VM size.
If you need different VM sizes for different workloads, you can create multiple node pools with different SKUs. For example, you might have a pool with Standard_D2s_v5
VMs for general workloads and another pool with Standard_E4s_v5
VMs for memory-intensive applications.
Specialized Node Pools
Specialized node pools in Azure Kubernetes Service (AKS) allow you to tailor your cluster to meet specific workload requirements. These node pools can be configured with different VM types, operating systems, and capabilities to optimise for performance, cost, or hardware features.
Type | Description |
---|---|
GPU Node Pools | Ideal for machine learning, AI, and graphics-intensive workloads. Use VM sizes like Standard_NC6 or Standard_ND40rs_v2 . |
Spot Node Pools | Use Azure Spot VMs for cost-effective, interruptible workloads. Often combined with on-demand VMs for resiliency. |
Ephemeral OS Disk Pools | Use ephemeral disks for stateless workloads to improve performance and reduce costs. |
Windows Node Pools | Run Windows-based containers. Must be in separate pools from Linux nodes. |
ARM64 Node Pools | Use ARM-based VMs (e.g., Dpsv5 , Dplsv5 , Epsv5 ) for cost-effective, power-efficient workloads. Can be mixed with x64 pools in the same cluster. |
Node Pool Scaling in AKS
AKS supports both manual and automatic scaling of node pools to match workload demands and optimise resource usage.
Manual Scaling
You can manually scale a node pool by increasing or decreasing the number of nodes via the Azure Portal or CLI.
Cluster Autoscaler
The Cluster Autoscaler automatically adjusts the number of nodes in a pool based on pending pods and resource requests. Key features:
- Scales up when pods are unschedulable
- Scales down when nodes are underutilised
- Customisable profiles for bursty or cost-sensitive workloads
Node Auto-Provisioner
Node Auto-Provisioner (NAP) is based on the Karpenter project and dynamically provisions new node pools based on workload requirements:
- Supports multiple VM SKU families and architectures (e.g., ARM64 and AMD64)
- Enables efficient bin-packing and cost optimisation
- Automatically selects the best-fit VM size and type
Info
The Node Auto-Provisioner is currently in preview and may not be available in all regions or subscriptions.