Eli5: What is Kubernetes in software development?


Eli5: What is Kubernetes in software development?

In: Engineering

It’s a set of tools for managing containers. Containers are basically a way of packaging software in a lightweight unit that contains everything needed for the software to run. It’s meant to speed up the deployment of applications by making them portable, easy to set up and configure, and easy to scale. Kubernetes is a system for managing many containers. It lets you configure and manage things like automatic application scaling, load balancing, deployments etc.

Kubernetes is a abstraction of common cloud computing operations. It provides an api for running processes across a suite of (virtual) machines (collectively called a cluster) and for the provision of storage; interaction over an internal network and with the outside world; and to scale resources on demand – amongst other things.

There’s an (optional) fine grained permissions system for operations within the cluster.

It’s based around a declarative model of the state a cluster – operations with the api revolve around telling the system what you want it to look like. It may be that the system will never reach the desired state, but operations will generally retry in the expectation that eventually the desired state will be achieved.

By providing a standard api if offers some hope of avoiding vendor lock in (although the abstraction is somewhat leaky, so this isn’t perfect). The major cloud providers have commercial managed kubernetes services. It’s an open source project, so you’re free to provision your own clusters on your own hardware if you choose.

Its relative popularity means that there’s plenty of free and commercial tools for implementing common tasks within k8s clusters – think in particular monitoring, logging, operations dashboards etc.

Unfortunately, trying to explain Kubernetes to a 5yo, or even to an adult who has no previous knowledge of software development, is going to involve a chain of “first you have to know this”.

A computer program is a set of instructions for a computer to execute. All computer programs are written with some assumptions about the computer and the computing environment in which that program is to run, and so the program is dependent on those assumptions, i.e., they have to be true in order for a computer to execute the program.

The assumptions vary widely, i.e., different computer programs assume and depend on different things. Some computer programs can be put into “containers”; you can think of a container as a collection of things needed for a particular computer program to run. Some might need a database connection, some are written to be executed within a web server environment, some might need a library of instructions or a “virtual machine”. Once a computer program has been written, assuming it is able to be packaged with a particular type of container, is put together in this software container with all the libraries, database connections, other programs, etc. that it needs to execute.

Kubernetes is a set of tools for dealing with a particular type of container. It lets computer people (programmers, system administrators, etc.) list, add, delete, execute, move, observe, etc. a collection of these containers.