The benefits of Kubernetes as a container orchestrator have been widely understood since its inception in 2014.
There are many such benefits:
- Kubernetes is declarative and lets you focus on what should happen and not how it happens.
- Kubernetes allows for separation of concerns by providing dev teams with a high level API they target (i.e. yaml files) without worrying about operational concerns like control plain maintenance.
- Kubernetes has a large and rapidly growing ecosystem for domain-specific workflows on top of containers. For example, you can run machine learning workflows with Kubeflow.
- Kubernetes supports agile methodologies like rapid development, continuous integration and deployment, and efficient rollbacks.
- Kubernetes provides consistency across your development, testing, and production environments.
I could speak for days about the benefits that Kubernetes offers SMEs and smaller businesses alike. By open sourcing Kubernetes, Google has made it possible for every developer in the world to use first-class tooling. This continues the cloud revolution that Amazon started when they launched AWS, this time improving the software side as opposed to the hardware side.
However, let us look at Kubernetes from a totally different perspective.
Kubernetes as a cloud operating system?
Kubernetes is a container orchestrator, but what is a container orchestrator anyway? To answer this, let’s go back in time.
Imagine that it’s the late 70s and you just created the world’s first operating system for personal computers. How do you market it?
Perhaps you call it a “process orchestrator” because an operating system lets you run multiple processes at the same time and orchestrates them so that they don’t interfere with one another. No, don’t like the name? Well, the term “operating system” was chosen and has stuck ever since.
The point is, an operating system manages multiple processes running on the same machine. It lets you run the same application on hardware from different vendors. It abstracts away the hardware from the application developer.
Kubernetes does all that and more, but the machine is now an entire datacenter in the cloud and the hardware is a cloud provider like AWS or GCP.
This might sound a little far-fetched to some - and let me be clear - I do not believe that Kubernetes as a cloud computing OS will lead to the obsoletion of other operating systems like Linux or Windows - they are still here to stay.
Furthermore, every node in a Kubernetes cluster is still running Linux. But if you zoom out and look at the datacenter as a whole, then it too has an operating system and that operating system is Kubernetes.
Why do we need a cloud OS?
Let’s consider the macro reasons that organisations are adopting the cloud, and why standardisation is so attractive.
Scalability- up or down, on-demand, and a ‘pay for what you use’ model makes cloud computing the ideal solution for most organisations. Ease of use alongside the ability to self serve means that costs are lower, while efficiency is at a maximum.
This started with the shift to virtualization, but containers have accelerated the process by reducing the footprint of each individual workload. Containers reduce the minimum computing unit to that of a single application, not that of an entire operating system containing an application.
However, all those containers need to be managed, just like processes on an individual machine must be managed. Furthermore, the underlying infrastructure itself must be managed and allocated in a fair and efficient manner. Lastly, you must keep the freedom to move between major clouds and avoid vendor lock-in.
All these are the concerns of operating systems, from resource management to scheduling to hardware-abstraction.
A massive paradigm shift
We have seen this happen before. When mobile phones first appeared, so did mobile operating systems like Android and iOS. Before that, when the world shifted from mainframes to personal computers, Windows and other PC operating systems were invented.
In every case, a shift in the computing paradigm led to the need for a new operating system that could satisfy the needs of the new platform.
What does an OS provide?
At a high level, an operating system manages resources - period. In more detail, there are physical resources such as your disc, GPU, and memory and there are virtual resources like files and users.
An operating system takes all of these resources and manages them. It splits them fairly and efficiently between different processes.
Time is a resource too. An operating system splits CPU time among running processes via a centralised scheduler.
An operating system is also responsible for the movement of data in and out of memory, it provides a portal for terminal services, and of course, often (though not always) comes equipped with a GUI to help make things easier for operators (or more modernly users). Speaking of users, operating systems manage their access rights and maintain security.
In this lens, the Kubernetes OS concept starts to make more sense, as all those services are provided by Kubernetes in the context of your datacenter.
Kubernetes operating system parallels
Let’s make a few substitutions to make the analogy more natural. For example, we can compare Linux processes and threads with pods and containers in Kubernetes. We can compare CPUs with nodes. Hence, scheduling processes to CPUs is now equivalent to scheduling pods to nodes.
The core philosophy of Linux is that “everything is a file”. In Kubernetes, the equivalent of this is “everything is a yaml resource in etcd” or “everything is a CRD”. This too, is a form of standardisation that operating systems do to simplify the life of users and developers. In Linux, every file works with a standard API, so every resource can be opened and written the same way. In Kubernetes, everything is an etc resource and there are similar benefits.
When it comes to hardware abstraction, again there are parallels. Linux uses drivers to access different hard drives, and K8S works the exact same way with CSI plugins. This lets you access storage without worrying about the configuration of the cloud disc.
Looking to the future
In the 80 some odd years since the conceptualization of the computer and subsequently the operating system, there have only been a few major paradigm shifts in how we use computers, yet each one has had profound effects on our day to day life.
Everybody remembers when Windows and Macintosh PCs first became available. Everybody also remembers when smartphones first became available with iOS and Android. Now, with the shift to cloud computing, Kubernetes is leading a similar shift, of tectonic proportions. Like Windows, Linux, iOS, and Android before it, Kubernetes is here to stay!