Kubernetes is being described as the next ‘Java’ i.e. it is fast becoming an endemic/ underlying platform for the whole industry just like the Java programming language.
For the first time, we are seeing the entire ecosystem aligning around the single platform via the Cloud native foundation.
Kubernetes is the underlying technology behind a term called ‘Cloud Native’
The Cloud Native foundation defines the term ‘Cloud Native’ as:
“Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.
These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.
The Cloud Native Computing Foundation seeks to drive adoption of this paradigm by fostering and sustaining an ecosystem of open source, vendor-neutral projects. We democratize state-of-the-art patterns to make these innovations accessible for everyone.”
But this definition does not really convey the full significance of the term.
Cloud native is a term used to describe container-based environments. Cloud-native technologies are used to develop applications built with services packaged in containers, deployed as microservices and managed on elastic infrastructure through agile DevOps processes and continuous delivery workflows.
The article descries the 10 Key Attributes of Cloud-Native Applications
- Packaged as lightweight containers:
- Developed with best-of-breed languages and frameworks:
- Designed as loosely coupled microservices:
- Centered around APIs for interaction and collaboration:
- Architected with a clean separation of stateless and stateful services:
- Isolated from server and operating system dependencies:
- Deployed on self-service, elastic, cloud infrastructure:
- Managed through agile DevOps processes
- Automated capabilities
- Defined, policy-driven resource allocation
Based on this background, we now explore the significance of Kubernetes and Cloud Native Applications in this article
We can understand Cloud Native Applications based on the evolution of application development
Traditional deployment: involved running applications on physical servers
Virtualized deployment: Virtualization allowed us to run multiple Virtual Machines (VMs) on a single physical server’s CPU.
Container deployment: Containers are similar to VMs but are more lightweight because they use a platform like docker.
So, in this evolution, Kubernetes can be seen as a platform for container orchestration which helps to run container-based applications resiliently. For example, if a container goes down, another container needs to start autonomously.
Significance of Cloud Native Applications and Kubernetes
But this background also does not explain the real significance of Kubernetes
Kubernetes provides a flexible, loosely-coupled mechanism for service discovery. Because this mechanism sits above the Cloud – it potentially provides a cloud agnostic way of providing service delivery. Cloud agnosticity may or may not be an objective – but it is certainly an unintended consequence of Kubernetes – which also explains it’s popularity.
So, developers in a cloud-native (kubernetes based) application engage with a layer which abstracts the underlying compute, storage and networking primitives from the infrastructure providers.
Kubernetes is synonymous with ‘cloud-native’ and provides an abstraction layer above individual cloud providers. This provides container orchestration (at a technical level) and Cloud agnosticity at a business level. Cloud-native is a computing paradigm that has just got started and is here to stay