To understand what Kubernetes (K8s) is, you need to understand the technological developments that preceded it. In this article, you will learn what K8s is, how it evolved and why you should care.
Bare Metal Machines
Kubernetes has evolved over the years. It started with bare metal machines. A bare metal machine is a computer with hardware (central processing unit, memory and storage), an operating system (OS) and applications. The applications are oblivious of the hardware—they only interact with the OS.; hence, the OS “abstracts” from the underlying resources. One problem with bare metal machines was that applications that crash may drag other co-located applications down.
Following the (many) challenges of bare metal machines, virtual machines (VMs) came along. A VM is code that “wraps around” an application pretending to be a physical machine – hence the virtuality. VMs require their own OS, referred to as guest OS. One of the main advantages of VMs, when compared to bare metal, is that it is much easier to dedicate a VM to a single application. Each application can run on its own dedicated VM. As a result, individual applications can crash without impacting other applications running on the same physical machine.
But what about extremely big apps? That is where distributed systems come in. Enterprise applications often require considerably more computing capacity than a single machine — virtual or physical/bare metal — can handle. Instead, multiple machines are connected through a network to form a distributed application/system.
What came next? Containers, the new lightweight VMs. Containers are like VMs but they do not require a guest OS, so they consume less resources. The benefit is that more containers can be deployed on a single machine than VMs. Additionally, containers are portable and can be moved without affecting the application.
How do you break applications down into smaller pieces? Microservices are applications that are broken down into small components that can run independently. Each micro component is called a service — hence microservices. Having more components means that more VMs or more containers are needed. Since containers require fewer resources than VMs, microservices with containers are the more affordable option.
Which, finally – brings us to Kubernetes! Before K8s, a legacy app with hundreds of VMs migrates to containers; as a result, it’s now composed of thousands of containers which makes it near-impossible to manage. K8s relieves the management headaches. It’s like a data center or cluster OS which manages the cluster resources, ensuring all containers are up and running.
Why Manage With Kubernetes?
There are three main benefits to managing with K8s:
- Declarative state: Developer declares desired state or characteristics of the app to ensure the cluster does not deviate from it.
- Self-healing: K8s ensures the cluster always matches the declarative state and heals itself and the affected applications when there is a discrepancy.
- Auto-scaling: K8s has the capacity to automatically scale up (and create more nodes and/or pods) when capacity peaks, then reduce again after peak.
Kubernetes is great, but it has its challenges. It’s not a full-fledged, ready-to-use solution. Enterprises need an entire technology stack. Configuring and fine-tuning the different technologies so they work well with K8s is no easy task and requires significant resources—time, money, and highly specialized skills.