Reading Time: 3 minutes
Share:
Twitter
LinkedIn
Facebook
Reddit
Whatsapp
Follow by Email

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:

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:

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:

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:

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.

Share:
Twitter
LinkedIn
Facebook
Reddit
Whatsapp
Follow by Email

Pixel Robots.

I’m Richard Hooper aka Pixel Robots. I started this blog in 2016 for a couple reasons. The first reason was basically just a place for me to store my step by step guides, troubleshooting guides and just plain ideas about being a sysadmin. The second reason was to share what I have learned and found out with other people like me. Hopefully, you can find something useful on the site.

0 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *