So, now most of you using Azure Kubernetes Service will probably know about node pools. If you are not too sure, then a node pool is a grouping of nodes of the same configuration. But did you know there are two different types of node pools? We have System and User node pools. System node pools primary purpose is hosting critical system pods like CoreDNS and tunnelfront, hence the name system. User node pools are designed for you to host your application pods. If you cluster only has a System node pool, which it would if you used the Azure CLI, or Portal to create your cluster than don’t worry, you can still run your application pods on the system node pool.
System node pools
So, as mentioned above a system node pool is designed to run the system pods. Each node in this node pool will have a label of kubernetes.azure.com/mode:system. Some features and limitations of system node pools are:
- Must be running Linux.
- They can have a minimum of 1 node, but it is recommended to have 2 nodes or 3 if it is your only Linux node pool.
- They only support AKS cluster running on Virtual Machine Scale Sets.
- The nodes need at least 2 vCPUs and 4GB memory.
- They need to support at least 30 pods.
- Cannot be made up of Spot VM’s.
- Can have multiple system node pools.
- If only one system node pool, it cannot be deleted.
- Can be changed to a user node pool if you have another system node pool.
User node pools
Are designed to run your application’s pods. Some features and limitations of user node pools are:
- User node pools can be either Linux or Windows.
- Can scale down to 0 nodes.
- Can be deleted with no issues.
- Spot VM’s can be used
- Can be changed to a system node pool.
- Can have as many user node pols as Azure will let you.
Let’s see some examples
When you create a new AKS cluster using the portal or Azure cli then the node pool that is automatically created is the system node pool. You don’t even have to specify it in the commands. It just happens. When you add additional node pools using the az aks nodepool add command the newly created node pool will be a user node pool.
Add a system node pool to existing AKS cluster
The following example will show you how to create a new system node pool with 3 nodes:
1 |
az aks nodepool add -g pixel-aks-weu --cluster-name pixel-aks-weu -n nodepool2 --mode system |
To see all your node pools and what type of node pool they are you can use the az aks nodepool list command:
1 |
az aks nodepool list --resource-group pixel-aks-weu --cluster-name pixel-aks-weu --output table |
Update (Change) the node pools
As mentioned above you can change each node pool type to the other. To do that you use the az aks nodepool update command and just change the mode to the one you want:
1 |
az aks nodepool update -g pixel-aks-weu --cluster-name pixel-aks-weu -n nodepool1 --mode system |
Delete a system node pool
So now I have two system node pools I can delete one of them. To do that you need to use the az aks nodepool delete command:
1 |
az aks nodepool delete -g pixel-aks-weu --cluster-name pixel-aks-weu -n nodepool2 |
All in All
Node pools are worth looking at if you have not already. And with the user node pool being able to scale down to 0 I can see some nice cost savings especially for dev clusters and maybe even production clusters depending on your business.
Thank you for reading and I hope you found this article helpful and if you do have any questions please reach out.
1 Comment
The official way to Stop and Start your Azure Kubernetes Service (AKS) cluster - Pixel Robots. · September 29, 2020 at 12:26 pm
[…] still required to run the system components. You can read more about System and User node pools at https://pixelrobots.co.uk/2020/06/azure-kubernetes-service-aks-system-and-user-node-pools/. With this new feature the control plane and agent nodes are stopped, meaning that your cluster is […]