The World is going crazy for containers and Kubernetes right now. Container adoption is on the rise – according to the ‘Flexera 2020 State of the Cloud‘ report, containers are now mainstream, with 65% of respondents using Docker for containers, and 58% using Kubernetes:
In addition to the significant level of adoption, 51% of respondents said that increasing the use of containers was one of their top cloud initiatives for 2020 – in fact this was the 3rd ranked cloud initiative after cost optimization and migrating more workloads to the cloud:
So clearly containers and Kubernetes are here to stay. But as more and more workloads are migrated to containers, the challenge of managing and orchestrating all of these newly containerized workloads has spawned a battle between tech vendors.
Lack of of resources or expertise was cited as the number one challenge for container use, with lack of service provider expertise and managing containers also holding businesses back:
It seems to me like an obvious answer to many of these challenges is to adopt a Platform as a Service (PaaS) solution for managing containers. The big 3 public cloud vendors all have an offering as you would expect:
- Amazon EKS (Elastic Kubernetes Service)
- Azure Kubernetes Service
- Google Kubernetes Engine
So I decided to launch a LinkedIn poll asking the question ‘Which is your preferred PaaS Kubernetes Orchestration tool?’. Before we get into the results, let’s take a look at each what Kubernetes is, and then at each of the service offerings in a bit more detail.
What is Kubernetes?
Originally a Google project, benefiting from 15 years of Google experience in running massive production workloads, Kubernetes was open sourced in 2014, enabling community input to drive the project forward. The name ‘Kubernetes’ originates from the Greek language and it means ‘helmsman’ or ‘pilot’ in the nautical sense, hence the ship’s wheel logo.
According to the Kubernetes website, ‘Kubernetes is a portable, extensible, open-source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation.’ That’s quite a mouthful.
To understand why you need Kubernetes, you must first understand a little about containers. A container is a standard unit of software that packages up application code, runtime, system tools, system libraries and settings so that the application can run in the same way on any computing infrastructure. So if a developer develops in a container on his or her laptop, that container can be moved to a physical server, virtual machine or public cloud environment without any changes being made to it. This makes deploying apps much faster.
Unlike virtual machines, which split up a server and enable it to run multiple Operating Systems, containers actually split up an Operating System between multiple applications, making both physical and virtual servers even more efficient. This is due to the fact that each container shares the Operating system kernel. Shared part of the OS are read only, and each container has it’s own mount for writing data. So in effect containers are much more lightweight and consume less resources than VMs.
Sounds great – so what’s the catch? Well, while containers are a great way to manage and package applications, you need a way to manage them – if one container fails, you need to make sure another one is spun up. If your application workload increased, you’re going to want to add more containers. This is where Kubernetes comes in. Kubernetes provides:
- Service Discovery and Load Balancing
- Storage Orchestration
- Automated rollouts and rollbacks
- Automatic bin packing
- Self Healing
- Secret and configuration management.
Amazon Elastic Kubernetes Service (EKS)
Amazon EKS is a fully managed Kubernetes service which makes it easy for AWS customers to run Kubernetes on AWS without having to install, operate and maintain their own Kubernetes control plane. EKS was released for general availability in June 2018.
Any apps running on Kubernetes can run on EKS. EKS customers can also elect to integrate with Fargate, which is a serverless compute orchestration tool for containers. Fargate removes the need to provision and manage compute instances on which to run containerized workloads. The EKS contol plane is both scalable and highly available, running across three AWS availability zones.
Amazon EKS supports both Windows and Linux worker nodes and containers. AKS integrates with CloudTrail and CloudWatch for logging and monitoring.
Amazon EKS is priced at $0.10 per hour for each Amazon EKS cluster – a single cluster can be used to run multiple applications by segregating with Kubernetes namespaces and IAM security policies.
You then pay for any EC2 or Fargate managed compute resources created to run your Kubernetes worker nodes.
Azure Kubernetes Service (AKS)
Azure Kubernetes Service is the Microsoft fully managed serverless Kubernetes offering. AKS enables elastic provisioning of capacity without the need to manage underlying infrastructure. Event driven autoscaling and triggers can be added with the open source KEDA project.
AKS was also released for general availability in June 2018.
Microsoft claim a faster end to end development experience through integration with Azure Dev Spaces, including integration with Visual Studio Code Kubernetes tools, Azure DevOps and Azure Monitor. Microsoft also claim that AKS is available in more regions than any other cloud service provider offering – I have not however validated this claim.
Unlike AWS, Microsoft do not charge at all for AKS – they only charge for the underlying virtual machine instances, storage and network resources consumed by the Kubernetes cluster.
Google Kubernetes Engine (GKE)
Finally, Google Kubernetes Engine (GKE) is the fully managed Kubernetes service on Google Cloud Platform (GCP). GKE offers secured and managed Kubernetes with four way autoscaling and multi cluster support.
GKE was released for general availability in August 2015.
Google, as the inventors of Site Reliability Engineering (SRE) cite this as a feature of the GKE service.
Much like AWS and Azure, GKE enables enterprise ready container solutions with pre-built deployment templates, Kubernetes pod and cluster autoscaling and workload and network security.
GKE is also priced at $0.10 per cluster per hour, unless clusters are managed by Google Anthos in which case no management fee is charged. Much like AWS and Azure, any worker nodes are billed as Google Compute Engine resources.
Logicata Kubernetes Poll Results
So let’s take a look at the results of my poll:
We can see that Amazon EKS is the clear favourite with 47% of the vote. Could this be due to the winning combination of EKS and Fargate, offering the most compelling and cost effective serverless Kubernetes solution?
Coming a close second is Google Kubernetes Engine with 34% of the vote. It’s no surprise for Google to be doing very well in this space, considering that Kubernetes was originally a Google project. Google also attracted the best comments in the poll, with respondents stating that ‘GKE just works’ and that using GKE is a ‘serene experience’ – high praise indeed. Yet despite a 3 year head start, Amazon have still stolen the lions share of this market, no doubt due to their dominant overall market share position.
Despite being number 2 in terms of overall public cloud market share, Microsoft did not fare so well in this poll, coming in 3rd place. But this is reflective of the relative usage between the 3 PaaS offerings, as evidenced in this 2019 survey by the Cloud Native Computing Foundation, which puts AKS and GKE as the top 2 services actually in use:
So there you have it – Amazon is still the favourite PaaS Kubernetes offering – watch this space to see if they can hold on to that title! If you want help deploying or managing EKS, check out our AWS Managed Services page and reach out to us for a chat.