If you are already using containers in your business or if you intend to do so soon, I'm sure you already know it. But anyway, lets give a quick reminder of what Kubernetes is.
We will also see what are the reasons that make Kubernetes the preferred platform to develop better applications and deploy them in production in less time. And how it has become the core of the main PaaS in the market and a large number of Cloud products for container management.
Kubernetes (K8S) is defined as an open-source system for the automation of deployments, scaling, and management of containerized applications.
This container orchestrator was initially designed by Google, who later donated it to the Cloud Native Computing Foundation, it's written in Go. It can be deployed in multiple cloud or bare-metal environments and supports multiple container runtimes (docker, rkt, cri-o or frakti).
Lately K8S is becoming the de facto standard for container orchestration because it provides many more advantages than other solutions in the market. Its main features are:
- Scaling and autoscaling: depending on the CPU usage, it allows vertical scaling of your applications automatically or manually (through a command or through the interface).
- Discovery of services and load balancing: it is not necessary to use an external mechanism for the discovery of services since Kubernetes assigns the containers their own IP addresses and a unique DNS name for a set of containers and can balance the load on them.
- Self-repair: in case of failure of a container you can restart it automatically. You can replace or re-plan containers when a node dies. And if there are containers that do not respond to the health checks defined by the user, you can stop them.
- Deployments and automatic rollbacks: when an application needs to be updated or its configuration changed, Kubernetes deploys the changes progressively while monitoring its health to ensure that it does not kill all instances at once, and in case of failure, it makes an automatic rollback.
- Planning: it is responsible for deciding in which node each container will be executed according to the resources it requires and other restrictions. It mixes critical workloads and best-effort to enhance the use and saving of resources.
- Configuration management and secrets: sensitive information, such as passwords or ssh keys, are stored in Kubernetes hidden in secrets. Both the configuration of the application and the secrets are deployed and updated without having to reconstruct the image or expose confidential information.
- Storage Orchestration: You can automatically mount the necessary storage system, be it local storage, storage in a public cloud provider (such as GCP or AWS), or even a network storage system such as NFS, SCSI, Gluster, Ceph, Cinder, or Flocker.
- Batch execution: in addition to services, Kubernetes can manage batch and CI workloads, replacing containers that fail.
The evolution of Kubernetes
Since its inception, Kubernetes has been a project that has enjoyed great recognition and has always had a lot of impact, but in recent months its influence has been consolidated based on different factors.
The community has grown considerably. Google and Red Hat contribute the most, but there are also Meteor, CoreOS, Huawei, Mesosphere and many more.
This growing interest is also noted in the number of issues that arise in the Stack Overflow platform or in the number of meetups that are held related to this technology.
In addition, it is no longer perceived as a toy with which to experiment, it is acquiring sufficient solvency so that it is increasingly used in production, according to the CNCF survey:
The options to use Kubernetes hardly have any restrictions, almost any option of use is possible thanks to all the possibilities of installation that it offers and because many solutions are integrating it in their architectures. Thus, we have a wide range to use K8S in the flavor we want.
- Bare Metal: we can deploy our cluster directly on physical machines using multiple operating systems: Fedora, CentOS, Ubuntu, etc.
- Virtualization On Premise: if we want to mount our cluster on premise, but with virtual machines, the possibilities grow. We can use Vagrant, CloudStack, Vmware, OpenStack, CoreOS, oVirt, Fedora, etc.
- Cloud solutions: if we want to have all the advantages of Kubernetes, without taking care of managing everything below, we have all these alternatives in the cloud:
- Google Container Engine: service managed and offered by Google, who is responsible for managing the instances of Compute Engine. It also deals with monitoring, logging, health of the instances and updating Kubernetes to the latest available version.
- OpenShift: the leader of the PaaS integrates Kubernetes and, when using it in its different options (enterprise, online, etc.), we will be using managed K8S clusters.
- CoreOS Tectonic: is the product through which CoreOS provides Kubernetes. Facilitates portability, among several providers, of public and private cloud. Its installation, updating and maintenance require less operations work. It includes Prometheus for the monitorization and management of alerts.
- CoreOS: will substitute its fleet system for Kubernetes.
- Kops: it serves to create and manage Kubernetes’ clusters (if required, in production and with high availability) from the command line. So far, it has been the unofficial way to install Kubernetes in AWS and has in its plans reaching Google Compute Engine y VMware vSphere.
- Deis: its opensource PaaS, which is now called Workflow, has been based on Kubernetes for years
- Mesosphere: it seems after their latest announcement, they will veer towards using Kubernetes as the orchestrator in place of Marathon.
- CloudFoundry offers Kubernetes in its Container Runtime.
- Others: Azure, IBM, Kube2Go, GiantSwarm also offer services managed by Kubernetes.
And if that wasn’t enough, now Amazon Web Services has joined as a Platinum member of the Kubernetes DevOps group, the Cloud Native Computing Foundation.
Containers have meant a radical change in the way we build and deploy applications. As the density of containers increases, tools are needed to facilitate communication, administration and planning.
It is in this environment where an orchestrator becomes necessary. From its appearance it was already clear how Kubernetes took advantage against other orchestrators.
Although there have been many changes in recent months and there is great competition, it seems that we are witnessing the consolidation of Kubernetes as the main orchestration solution: it is found in all PaaS and in all Cloud services, it has the best features and the community never stops improving it.
Without a doubt it is the technology that everybody talks about, everyone wants to contribute to in their modules and is the preferred platform to build applications based on containers.