...

/

Where Did Kubernetes Come From?

Where Did Kubernetes Come From?

Review the origins of Kubernetes.

Kubernetes was developed by a group of Google engineers partly in response to Amazon Web Services (AWS) and Docker. AWS changed the world when it invented modern cloud computing and everyone needed to catch up.

One of the companies catching up was Google. They’d built their cloud but needed a way to abstract the value of AWS and make it as easy as possible for customers to get off AWS and onto their cloud. They also ran production apps, such as Search and Gmail, on billions of containers per week.

At the same time, Docker was taking the world by storm, and users needed help managing explosive container growth.

While all this was happening, a group of Google engineers took the lessons they’d learned using their internal container management tools and created a new tool called Kubernetes. In 2014, they open-sourced Kubernetes and donated it to the newly formed Cloud Native Computing Foundation (CNCF).

Press + to interact

At the time of writing, Kubernetes is ~10 years old and has experienced incredible growth and adoption. However, at its core, it still does the two things Google and the rest of the industry need:

  1. It abstracts infrastructure (such as AWS).

  2. It simplifies moving applications between clouds.

These are two of the biggest reasons Kubernetes is important to the industry.

Kubernetes and Docker

All the early versions of Kubernetes were shipped with Docker and used as their runtime. This means Kubernetes used Docker for low-level tasks such as creating, starting, and stopping containers. However, two things happened:

  1. Docker got bloated.

  2. People created lots of Docker alternatives.

As a result, the Kubernetes project created the container runtime interface (CRI) to make the runtime layer pluggable. This means we can pick and choose the best runtimes for our needs. For example, some runtimes provide better isolation, whereas others perform better.

Kubernetes 1.24 finally removed support for Docker as a runtime as it was bloated and overkill for what Kubernetes needed. Since then, most new Kubernetes clusters have shipped with containerd (pronounced container dee) as the default runtime. Fortunately, containerd is a simplified version of Docker optimized for Kubernetes, and it fully supports applications containerized by Docker. Docker, containerd, and Kubernetes work with images and containers that implement the Open Container Initiative (OCI) standards.

The following figure shows a four-node cluster running multiple container runtimes.

Press + to interact
A four-node cluster running multiple container runtimes
A four-node cluster running multiple container runtimes

Notice how some of the nodes have multiple runtimes. Configurations like this are fully supported and increasingly common. In a later chapter, we’ll work with a configuration like this when we deploy a WebAssembly (Wasm) app to Kubernetes.

What about Docker Swarm

In 2016 and 2017, Docker Swarm, Mesosphere DCOS, and Kubernetes competed to become the industry standard container orchestrator. Kubernetes emerged as the winner.

However, Docker Swarm remains under active development and is popular with small companies wanting a simple alternative to Kubernetes.

Kubernetes and Borg: Resistance is futile!

We already said that Google has been running containers at a massive scale for a long time. Two in-house tools, Borg and Omega, orchestrated these billions of containers. So, it’s easy to make the connection with Kubernetes—all three orchestrate containers at scale, and all three are related to Google.

However, Kubernetes is not an open-source version of Borg or Omega. It’s more like Kubernetes shares its DNA and family history with them.

Press + to interact
Shared DNA
Shared DNA

As things stand, Kubernetes is an open-source project owned by the CNCF and licensed under Apache 2.0. Version 1.0 was shipped in July 2015, and at the time of writing, we’re already at version 1.31 and averaging three new releases per year.