Let's stop calling Kubernetes a "container orchestrator". If you don't understand Kubernetes already, the term is just confusing. When I got started, I didn't understand what orchestration was, or why containers need it.
Let's call Kubernetes a "cloud operating system" instead.
Is Kubernetes really an operating system?
Here are things a traditional operating system (OS) does:
- Resource management
- Scheduling
- Security
- Hardware abstraction
- Users
- Multitasking
- Networking
- Terminal services
Linux /Windows do this for individual machines. Kubernetes does it for whole datacenters (clusters).
What OS-like responsibilities does Kubernetes handle?
I'll give three examples:
- Scheduling: on Linux, processes are scheduled to CPUs. On Kubernetes, Pods are scheduled to Nodes. Different operations, but both achieve the same purpose: sharing resources between applications running on the same "hardware". ("Hardware" in the Kubernetes sense means the cluster as a whole.)
- Hardware abstraction: With Linux, applications can write to files without caring about the harddisk manufacturer. With Kubernetes, Pods can write to a PersistentVolume the same way on AWS, GCP, and Azure. The underlying storage (e.g. EBS) is different, but the app doesn't need to care.
- Operating systems define executable formats. For Linux this is ELF files, on Windows PE files, and on Kubernetes it is Docker containers / Pods.
Here are more parallels:
Closing Notes
Does this analogy make Kubernetes easier to understand? Can we drop the term "container orchestrator" for good?