Kubernetes is an open-source platform for automated orchestration and management of Containerized applications.
Before dwelling into the specifics, let’s briefly explore its origins. Kubernetes is a Greek word, meaning “helmsman” or a “pilot”. Kubernetes was originally developed at Google to run containerized workloads, then released as open source in 2014 and maintained by the Cloud Native Computing Foundation (CNCF https://www.cncf.io/projects/kubernetes/). Kubernetes is often abbreviated as “k8s”, where 8 is the count of letters between k and s. There are variants of Kubernetes, we shall cover them in a separate blog post.
But what are these containers?
It would only be appropriate to have a quick introduction.
Containers may be viewed as an evolution of Virtual Machines. This is evident with their ability to abstract Operating System (OS) in addition to the virtualized hardware. Virtual Machines on the other hand abstracted the virtualized hardware while requiring OS management for each VM.
Containers are technology that bundles code and configuration required to run an application as a unit. It is this abstraction that makes Containers light weight, isolated and portable execution environments.
Containers by design are immutable i.e. once created they can’t be changed. Containers include all the components needed to run an application. It’s the ability to enable massive scalability while utilizing fewer resources than standalone or virtualized environments makes Containers indispensable to cloud native deployments.
Docker is often a platform of choice to create containers with the Container being an execution instance of a (Docker) image.
Core Concepts of Kubernetes
With the Containers gaining widespread adoption across various deployment scenarios, comprising of many Containers, there was an apparent need for a tool to manage or orchestrate Container lifecycle. And that need was solved by Kubernetes.
Let’s revisit Kubernetes….
Kubernetes is an open source, portable, extensible platform for management of Containerized applications & services, to enable both declarative configurations and automation. (Source: Kubernetes) We shall visit each of these terms to understand Kubernetes.
Portability:
The portability of Kubernetes refers to its ability to enable consistent and seamless deployment and management of containerized applications across diverse computing environments. This portability is crucial for organizations seeking to avoid vendor lock-in, optimize resource utilization, and adapt to changing business needs.
Extensibility
The extensibility of Kubernetes refers to its ability to support integration of additional features to the cluster without altering the core source code, offering flexibility and adaptability to diverse application needs without significant changes.
Declarative Configuration
Declarative configuration management in Kubernetes refers to the practice of specifying the desired state of a system or application through configuration files, without explicitly detailing the steps needed to achieve that state. In Kubernetes, users define the configuration of resources, such as pods, services, and deployments, in YAML or JSON files.
Automation
Automation in Kubernetes refers to the ability of the system to perform tasks, manage resources, and respond to events without manual intervention. Kubernetes automates various aspects of container orchestration, making it easier for users to deploy, scale, manage, and maintain containerized applications.
In essence, Kubernetes acts as a robust orchestrator that simplifies and enhances the management, scalability, resilience, and security of containerized applications, offering a wide array of functionalities tailored for modern software deployment and operations.