TL;DR: Azure and Digital Ocean don't charge for the compute resources used for the control plane, making AKS and DO the cheapest for running many, smaller clusters. For running fewer, larger clusters GKE is the most affordable option. Also, running on spot/preemptible/low-priority nodes or long-term committed nodes makes a massive impact across all of the platforms.

k8s-price-graph.png


Table of Contents:


Overview

With Google Cloud's recent announcement to start charging $0.10/hour for each cluster on GKE, it seemed like a good time to revisit pricing across the major managed Kubernetes offerings.

gke-price-increase.png
This upset some people on the internet...

This article will focus on:

Cost Breakdown

The cost of running Kubernetes on each of these platforms is based on the following components:

Additionally, the cloud providers offer large discounts if you are willing/able to use preemptible/spot/low-priority nodes OR commit to using the same nodes for 1-3 years.

It is important to point out that while cost is a useful dimension to examine when evaluating providers, there are other factors that should also be considered including:

Those factors are beyond the scope of this article/exploratory analysis. This blog post from StackRox (Feb. 2020) provides a detailed look at the non-price factors for EKS, AKS, and GKE.


Jupyter Notebook

To make it easier to explore the cost tradeoffs I created a Jupyter notebook using plotly + ipywidgets to facilitate rapid exploration of cluster sizes/tradeoffs across the different cloud providers.

You can interact with a live version of that notebook yourself using Binder:

Posts/2020/03/managed-kubernetes-comparison/binder.png
https://mybinder.org/v2/gh/sidpalas/managed-kubernetes-pricing/master?filepath=%2Fmanaged-kubernetes-price-exploration.ipynb

If any of my calculations or pricing constants look incorrect, please let me know (via a Github Issue or Pull Request! -- Github repository)

Takeaways

There are too many variables to give much of a recommendation beyond my TL;DR up top, but here are some takeaways:

*NOTE: I used general-purpose compute node types for all 4 clouds (n1 GCP Compute Engine instances, m5 AWS ec2 instances, D2v3 Azure virtual machines, and dedicated CPU DO droplets). Further exploration could be done across the burstable and entry-level VM types. Also, it appeared that pricing for VMs scaled linearly with # of vCPU and GB of memory, but I am not sure that assumption holds as you move towards some of the less standard memory/cpu ratios.

The article "The Ultimate Kubernetes Cost Guide: AWS vs GCP vs Azure vs Digital Ocean" published in 2018 used a single reference cluster with 100 vCPU cores and 400 GB of memory. As a point of comparison, here is how much my calculation shows that cluster would cost (using on-demand prices) on each of these platforms.


Hopefully, this article + notebook will help you in your journey to evaluate the major managed Kubernetes offerings and/or save $$$ on your cloud infrastructure by taking advantage of the available cost-saving opportunities.