tldr; Azure Virtual Nodes have allowed us to scale while reducing cost and response time.

A recent project required significantly more computing power for nightly processing than was needed the rest of the day.  The micro services powering the nightly processes each required different resources and scale.   After researching it, we decided that it was more flexible and cost effective to extend our Azure Kubernetes Service (AKS) Cluster using Virtual Nodes.

Virtual Nodes are built on Azure Container Instances, allowing you to scale a Kubernetes Deployment from zero to hundreds of nodes – paying by the second.

Each micro service deployment can be configured for the appropriate CPU / RAM.  Beyond that, the nightly processes could evaluate the queue depth and select the appropriate number of servers to add to the cluster.

With Virtual Nodes, we were able to reduce the time required for nightly processing while reducing the costs significantly.  

At the current pricing, a 1 CPU / 8 GB RAM server costs $0.03906 per hour.  Running it for 30 minutes a day costs about $1.17 per month.

Microsoft's Virtual Nodes Documentation is good.  Some key notes:

  • Make sure you specify the container port in the Deployment
  • Ensure that you specify the CPU and memory requests in the Deployment (which determine the ACI container size)
  • ACI has a minimum of size of 1 CPU, so if you specify less than they, you will still pay for 1 CPU.
  • As of Jan 2020, readinessProbe and livelessProbes are not supported for Virtual Nodes in Azure Kubernetes Service (AKS) (Tracking Issue)