Kubernetes and Docker are two of the words you hear most in conversations about DevOps today. Docker is a tool that allows you to contain and run applications, and Kubernetes provides a platform to orchestrate or manage these containers, since managing thousands of containers manually with Docker CLI is a very costly task.

In 2013 Docker began to gain popularity by allowing developers to quickly create, run and scale their applications by creating containers. Part of its success is due to being Open Source and the support of companies like IBM, Microsoft, RedHat or Google. In just two years, Docker had been able to turn a niche technology into a fundamental tool within everyone’s reach thanks to its greater ease of use. But if the number of applications grows in the system, it becomes complicated to manage.

Docker is not enough, since coordination is needed to make the deployment, service monitoring, replacement, automatic scaling and, ultimately, the administration of the various services that make up the distributed architecture.

Google is probably the first company that realized it needed a better way to implement and manage its software components to scale globally, and for years developed Borg (later called Omega) internally. In 2014, after almost a decade of intensive internal use, Kubernetes was publicly presented as an Open Source system based on learning using large-scale services. And today, Kubernetes is the de facto standard for implementing and deploying distributed applications.

Characteristics of Kubernetes

Modern applications are increasingly based on the use of containers, which are packaged microservices with their dependencies and configurations. Kubernetes is an open source software to implement and manage those containers on a large scale. It enables any number of servers of many types at the same time, separated by distance, to share workloads for a common tenant.

Most importantly, Kubernetes was designed to be used anywhere, so it can orchestrate on-site, public cloud and hybrid deployments. With Kubernetes, concrete steps can be taken to achieve better IT security. In addition, it must also be integrated with networking, storage, security, telemetry and other services to provide a comprehensive container infrastructure. This offers the simplicity of Platforms as a Service (PaaS) with the flexibility of Infrastructure as a Service (IaaS) and allows for portability between infrastructure providers.

 

Fuente: Vector ITC

 

Fuente: Vector ITC

 

Some of its features include:

  • The ability to automatically place containers according to your resource requirements, without affecting availability.
  • Service discovery and load balancing: no need to use an external mechanism for service discovery as Kubernetes assigns containers their own IP addresses and a unique DNS name for a set of containers and can balance the load on them.
  • Planning: it is in charge of deciding in which node each container will run according to the resources it requires and other restrictions. It mixes critical and best-effort workloads to enhance resource utilization and savings.
  • Enable storage orchestration: automatically set up the storage system as a public cloud provider. Or an on-premise networked storage system such as NFS, iSCSI, Gluster, Ceph, Cinder and others.
  • Batch execution: in addition to services, Kubernetes can manage batch and IC workloads, replacing failed containers.
  • Configuration and secret management: sensitive information such as passwords or ssh keys are stored in Kubernetes hidden in ‘secrets’. Both the application’s configuration and secrets are deployed and updated without having to rebuild the image or expose sensitive information.
  • Self-repair: restart failed containers, replace and re-program them when nodes die. Also remove unresponsive containers and do not publish them until they are ready.
  • Execution of automated deployments where changes to the application or its configuration are progressively implemented, while its status is monitored. This ensures that you do not delete all your instances at once. If something goes wrong, Kubernetes will reverse the change.

Transforming a company’s IT infrastructure with 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 are the biggest contributors, but there is also Meteor, CoreOS, Huawei, Mesosphere and many more.

In addition, Kubernetes is no longer perceived as something new to experiment with, it is gaining enough credit to be used more and more in production. In fact, by 2019, this platform was in production in 78% of the companies. One year earlier, in 2018, it was in 58%. Companies such as Tinder, Reddit, New York Times, Airbnb or Pinterest have integrated this technology into their services.

Companies are looking to develop applications, and containers and open source are becoming very important, as they realize that Kubernetes is the first step to create modern scalable applications.

Kubernetes is a system that can be used to efficiently implement applications. As a result, it can help companies save money by using less labor to manage their IT infrastructure.

Kubernetes effectively automates container management. Because containers allow for the assembly of code into smaller, easier to transport parts, and larger applications involve a package of multiple containers, Kubernetes can organize multiple containers into units. Therefore, containerized applications can be scaled automatically, making it more feasible with only fewer resources needed to manage multiple containers.

Kubernetes offers these capabilities to a business:

  • Multi-cloud flexibility: As more enterprises run on multi-cloud platforms, they benefit from Kubernetes, as it easily runs any application on any public cloud service or a combination of public and private clouds.
  • Faster time to market: Because Kubernetes can help the development team break down into smaller units to focus on single, targeted, smaller micro-services, these smaller teams tend to be more agile.
  • IT cost optimization: Kubernetes can help a company reduce infrastructure costs quite dramatically if it is operating on a large scale.
  • Improved scalability and availability: Kubernetes serves as a critical management system that can scale an application and its infrastructure whenever the workload increases, and reduce it as the load decreases.
  • Effective migration to the cloud: Kubernetes can handle rehosting, re-platforming and refactoring. It offers a seamless route to effectively move an application from the facility to the cloud.

Benefits and disadvantages for companies

In summary, and having seen all the above information, Kubernetes has the following benefits for companies:

  • Using Kubernetes and its huge ecosystem can improve productivity.
  • Using Kubernetes along with good native cloud technology attracts talent. For example, many software engineers want to work in companies that use modern and interesting technologies.
  • Kubernetes is a feasible solution for many years to come.
  • Kubernetes helps an application run more stably.
  • Kubernetes can be cheaper than other alternatives, especially if you have large computing resources.

While all of these advantages sound quite attractive, not all companies are using Kubernetes, and this may be the result of an assessment of their disadvantages:

  • Kubernetes can be too much for simple applications: If you do not intend to develop something complex for a large audience, or do not have large computing resources, you do not take full advantage of this technology.
  • Kubernetes is very complex and can reduce productivity: Kubernetes is known for its complexity. Especially for developers who are not familiar with infrastructure technologies, it can be very difficult to work with them.
  • The transition to Kubernetes can be cumbersome: If you have software and want to adapt it to Kubernetes, it must take time to run smoothly, which is difficult to estimate.
  • Kubernetes can be more expensive than other alternatives: This is because all of the above disadvantages cost engineers time that is not spent creating new “tangible” business value.

Kubernetes and Docker: better if they work together

Since Kubernetes appeared it proved to be much more popular than Docker and quickly became the industry standard for container orchestration, to the point that even Docker has adopted it. But, the fact remains that there is no need to choose: Kubernetes and Docker are basically different technologies that work well together to compile, deliver and scale container applications.

Kubernetes is an application for orchestrating or managing containers. However, the program does not create the containers themselves, but requires a container platform. Docker is by far the best known platform of this type, but alternatives are also available. Kubernetes uses existing container tools and integrates them into its own workflow. In this way, containers created with Docker or similar tools can be used in Kubernetes, which uses orchestration to manage, scale and move them.

Kubernetes ensures that everything works as desired and also takes care of replacing nodal points that may collapse. Therefore, using Kubernetes and Docker at the same time often results in a robust container environment.

While Kubernetes also works with other container platforms, Docker has become the most popular for many reasons. Not only because Docker has brought awareness of container virtualization, but also because Kubernetes and Docker have similar goals. In addition, both are supported by a strong open source community. The interaction of both works so well that Docker can be purchased as a package with Kubernetes, even though Docker has its own orchestration tool on the market.

In short, you can use Kubernetes with Docker for:

  • Improve infrastructure security and high application availability: Applications will remain connected, even if some of the nodes are disconnected.
  • Make the application more scalable: If the application begins to receive much more load and needs to scale horizontally to provide a better user experience, it is easy to deploy more containers or add nodes to a Kubernetes cluster.

Conclusions

Adoption in the use of containers will continue to grow. You can also see some standardization around Kubernetes and Docker. This will drive the growth of a large number of related development tools.

The technology stack is starting to mature quite a bit and almost all suppliers are starting to be compatible with each other thanks to Docker and Kubernetes. Google, Microsoft, Amazon or IBM, for example, are already compatible and work under the same standard. The struggle now lies in moving all that workload that is not yet in the cloud: the hybrid cloud.

Around the world, many CIOs and technologists have chosen to use Kubernetes, and it is expected to evolve much more in the coming years.

Containers are becoming increasingly popular in the software world and Kubernetes has become the industry standard for deploying containers into production. In addition, a high growth rate is expected for Kubernetes throughout this year as well.