I’ve been trying for some time to run the cheapest single-node Kubernetes cluster I could on Azure Kubernetes Service (AKS). My target is to run it for a month at $70 (AUD) or below, but it takes some investigation to determine how to do this.

I’m using the Azure CLI and, prior to optimising for cost, the command to bring a cluster up looks like this;

az aks create -n myCluster

This will bring up a cluster with default settings that will cost much more than my target, so over the next few sections I’ll add to this command such that the resulting cluster is much cheaper. All prices are $AUD and the region is Australia East.

If you don’t care for the why, see the result here.

Node count and size

By default, the cluster is going to have 3x Standard_DS2_v2, which will cost us ~$844.929/month. We’ll drop this to a single node and smaller size VM. AKS docs note that every AKS cluster will have at minimum one system node pool, and, that system node pools require a VM SKU of at least 2 vCPUs and 4GB memory. The cheapest VM at that configuration is the Standard_B2s @ ~$52.921/month.

We can set this using the the following parameters;

--node-count 1 --node-vm-size Standard_B2s

Load balancer

AKS uses a Load Balancer and by default the Standard sku @ ~$30/month will be selected. The Basic sku is free, but the Load Balancer sku cannot be changed once the cluster has been created, so we must set it at time of creation.

--load-balancer-sku basic

Node disk size

Disk size defaults to 100GB which for this VM is a Premium SSD p10 @ ~$27/month. Minimum disk size is 30 so we’ll choose the 32GB p4 @ $7.25/month.

--node-osdisk-size 32

The cheapest cluster

az aks create -n myCluster \
    --node-count 1 \
    --node-vm-size Standard_B2s \
    --load-balancer-sku basic \
    --node-osdisk-size 32

Running these settings for a month comes in at ~$66AUD.

Dead-ends

There were other avenues I investigated to decrease the cost that, at the time of writing, were not feasible. I’ll take a look at these now.

Spot VMs

Spot VMs allow access to excess cloud capacity at a reduced cost, but the access to the VM is not guaranteed and eviction policies mean the VM may be deallocated if Azure needs that capacity back.

You cannot create a cluster with Spot Node pool and instead it must be added to the cluster afterwards. To add an additional node pool, the cluster must support multiple node pools. Both multiple node pools and Spot node pools require the Standard SKU load balancer and therefore would increase the price $30/month.

Standard SSD

Standard SSDs are cheaper than Premium SSDs. Although the Azure Pricing Calculator lets you choose the Managed OS Disk Tier for your nodepool, setting a disk type on an agentpool is not currently supported and for a Standard_B2s VM, aks create selects a Premium SSD. See the Github issue and subsequent Azure Feedback forum entry.