This document is still a work in progress
Who is this "Kates" I keep hearing about?
Kubernetes, or k8s as it's commonly called, is container orchestration software. Does that sound complicated? It's not! At it's core, Kubernetes is a series of api controllers which work together to manage physical (or virtual) computing resources and schedule units of work called pods (the smallest of which contain only a single container).
We're all (or mostly all) familiar with virtual machines (VMs). VMs are handy because they allow us to more efficiently utilize machine resources by creating virtualized environments within a larger physical computing environment. It used to be that servers were only really powerful enough to run a single task (Apache or MySQL). Modern computers on the other hand are so powerful that it doesn't make much sense to run applications on machines in a 1:1 relationship. With VMs you can still securly isolate your applications in separate "machines" but have a smaller physical footprint in your data center; saving you money. But VMs have one small problem, they're innefficient. You're still lugging around entire operating systems in order to isolate and support just a single application. While there have been attempts to minimize the impact of this on various system resources (such as deduplication of files on disk), an OS still eats up CPU cycles and requires patching of OS files as well as all of the OTHER utilties that you probably don't even need to run your application. This is where containers really shine
As touched on at the start of this article, Kubernetes is a container orchestration platform. But what is a container? A container can be defined in a few differnet ways depending on which operating system you're talking about. On BSD, they're called Jails. On Solaris, they're called zones. And on Linux, they're called containers. As Kubernetes is really designed (at this time) to orchestrate Linux containers, let's define what a Linux container is at a high level.
According to Wikipedia:
Linux containers is a generic term for an implementation of operating system-level virtualization for the Linux operating system.
So, basically what we're doing is leveraging kernel level functions to provide isolation and impose limits on processes on a host operating system.
To be continued...