Kubernetes enables a self-service Platform-as-a-Service (PaaS) that creates a hardware abstraction layer for development teams. These development teams can quickly and efficiently request the resources they need: if they need more resources to handle additional loads, they can get them quickly. All resources come from an infrastructure shared by all teams. All you have to do is provision and exit, and leverage the tools developed around Kubernetes to automate packaging, deployment and testing.
It is cost-effective - as containers generally are - as they are more resource-efficient than hypervisors and virtual machines. As containers are so lightweight, they require less CPU and memory resources to run.
Kubernetes is a cloud-agnostic technology because it runs on Amazon Web Services (AWS), Microsoft Azure and Google Cloud Platform (GCP) alike. In addition, it can be run on-premises, i.e. outside the cloud. Workloads can be moved without having to redesign applications or rethink the infrastructure, thus standardising a platform and avoiding vendor lock-in.
Containers are small and fast, and have an advantage in that an application can be packaged in a single container image. This one-to-one relationship between application and image offers a range of clear benefits that tip the balance in favour of the use of containers. With them, we can create images at the time of compilation. Applications do not need to be composed together with the rest of the stack or linked to the production infrastructure environment.
Generating a container image at build time allows for a consistent environment from development to production. On the other hand, containers are more transparent than virtual machines, which makes administration and monitoring easier. Everything seems to be an advantage when it comes to containers and Kubernetes: tools that undoubtedly make life easier for developers.