I should have paid more attention to my operating systems course in university. I thought I knew it all, given that I already wrote kernel modules. I was wrong of course.
So when asked what an operating system is, I just refer to MIT's course. Here is a snippet:
What do applications want from an O/S?
- Abstract the hardware for convenience and portability
- Multiplex the hardware among multiple applications
- Isolate applications to contain bugs
- Allow sharing among applications
Here's the thing: with microservices, applications no longer run on single machines. The machine is your entire data center. So what does an operating system for datacenters look like?
Kubernetes, of course! Here's a comparison:
Obviously Kubernetes isn't replacing POSIX here, but it is providing similar APIs at a higher abstraction layer - that of the datacenter, not the individual machine.
POSIX not UNIX
Kubernetes is POSIX not UNIX, because there isn’t one Kubernetes. It's an API, not an implementation.
You can run Minikube, KIND, K3s, OpenShift, GKE, EKS, or AKS. They all support the same YAML specs, but the implementation details can differ.
Like every operating system, Kubernetes supports different hardware using drivers. You can apply the same LoadBalancer resource to different Kubernetes distributions. On EKS it will be implemented one way, on GKE another. Same with CSI (storage) drivers.
Operating systems also define executable formats. In Kubernetes case, this is Docker containers.
Making Kubernetes Boring
The best thing about Linux is that it's boring.
You can develop and use Linux without being a kernel expert. This is hugely important.
We're not yet there with Kubernetes. The number one complaint people have about Kubernetes is complexity.
If Kubernetes is POSIX then we're missing both glibc (the C standard library) and the rest of usermode.
With Robusta.dev we're providing that missing part, but we've chosen to do it our own way.
Unlike other Kubernetes platforms, we're NOT abstracting away the underlying details or hiding them from you. You bring your existing Kubernetes cluster, running wherever you choose, and we provide usermode utilities that can streamline it.
No one succesful has made POSIX simpler by removing APIs or forcing you to use their hardware. So that approach wont work for a Kubernetes POSIX either. Also, it has to be open source.
What a Kubernetes usermode should include
Prometheus does a great job gathering metrics, but that's only part of a holistic monitoring solution. Robusta complements that, fills the observability gap, and automates day 2 operations.
We're providing re-usable utilities, just like traditional UNIX commands, to simplify monitoring, management, troubleshooting, and observability.