Containers have everything needed to run it – code, run-time, system tools, system libraries, and settings. It’s available for both Windows and Linux based applications. Containers are based on operation-level virtualisation rather than hardware-virtualisation. They are small and fast; one application can be packed in each container image. All these factors make each container isolated from its surroundings as well as from each other.
PaaS (Platform as a service) is a complete development as well as a deployment environment for the cloud. PaaS has resources which can enable cloud-based, simple applications to sophisticated, cloud-enabled applications. PaaS is designed for complete (building, testing, implementing, managing and updating) web application support. PaaS provides a virtual infrastructure on which users can deploy any application; This gives complete independence from investing effort in infrastructure maintenance like updates, security, hardware failures, etc.
Containers are the enabler for PaaS. Containers make the environment more flexible. We can understand this from the following example –
Suppose you want to create a blog. There are three ways to do it.
Option 1. SaaS (Software as a Service): Find a hosting site (SaaS) and create your blog in it. It can be costly.
Option 2. IaaS (Infrastructure as a Service): Find an IaaS provider, Buy a server and connect it to a network, Upload a blog website, Create the site’s database, Start blogging.
Option 3. PaaS (Platform as a Service): Find a PaaS provider, Use a remote terminal to build and run container, Create your blog.
From this example it is evident that container based PaaS will give own IP and credentials, removing the worry related to where the service is running. On downtime, container based PaaS will make it easier to use another platform for running applications.
We can roll out benefits of containers as,
o Agile application creation and deployment: Increased ease and efficiency to create container image compared to VM image.
o Continuous development, integration and deployment: Provides for reliable and frequent container image build and, deploy with quick and easy rollbacks (due to image immutability).
o Dev and Ops separation of concerns: Create application container images at build/release time rather than deployment time, thereby decoupling applications from infrastructure.
o Environmental consistency across development, testing, and production: Runs the same on a laptop as well as on the cloud.
o Cloud and OS distribution portability: Runs on Ubuntu, RHEL, CoreOS, on-prem, Google Kubernetes Engine, and anywhere else.
o Application-centric management: Raises the level of abstraction from running an OS on virtual hardware to run an application on an OS using logical resources.
o Loosely coupled, distributed, elastic, liberated, micro-services: Applications are broken into smaller, independent pieces and can be deployed and managed dynamically.
o Resource isolation:Ensures predictable application performance.
o Resource utilization: High efficiency and density.
Kubernetes (also called K8s) is an open source system for the automation, deployment, scaling, operation as well as management of containerized applications. Google started a Kubernetes project in 2014. Kubernetes provide a platform for fully automating application containers across clusters of hosts. It supports a range of container tools, including Docker. Kubernetes manages containerized applications in a clustered environment.
Kubernetes is portable (in public, private, hybrid and multi-cloud), extensible (modular, pluggable, hookable and composable), as well as self-healing (auto-placement, auto-restart, auto-replication, auto-scaling). This makes it possible to deploy applications quickly, scale applications in need, add new features and limit hardware usage as per requirement.
Container orchestrators like Kubernetes form the foundation for nothing other than next-generation-PaaS. Container as a service (CaaS) platforms like Azure Container Service, Google Container Engine, and others are becoming the new infrastructure layer that PaaS is built upon. When layered on top of CaaS, the basic functionality (naming, discovery, packaging, etc.) are all provided by the CaaS, making it common across multiple PaaS that happened to be deployed on top of that CaaS. This means that developers can mix and match, deploying multiple PaaS to the same container infrastructure and choose the best suiting PaaS platform for each application. They can also choose to ‘drop down’ to raw CaaS infrastructure if that is a better fit for their application. Freeing PaaS from providing the infrastructure layer enables PaaS to diversify and target specific experiences without fear of being too narrow. The experiences become more targeted and powerful. Building on top of CaaS makes it more flexible as well.
All these make it sure that Kubernetes is the infrastructure for next-generation applications, PaaS and more.