Container technology caught the public’s attention with the introduction of Docker in 2013. The efficiency and cost benefits containerisation can offer quickly made it one of the hottest topics in cloud computing. Shortly after Dockers’ release, there has been a flood of new container management platforms, aiming to reduce the complexity of managing containerised applications. One of these platforms, the open source project Kubernetes, is by now the de facto standard for container management.
To understand the power of Kubernetes, you should have some basic knowledge about containers. In our previous blog posts we explained the basics of container technology, talked about the benefits of containers, turned surveys about container adoption into a Docker infographic and more. In case you missed it, let’s start with a short reminder of what containers actually are.
What are containers and where does Kubernetes fit in?
“A container image is a lightweight, stand-alone, executable package of a piece of software that includes everything needed to run it: code, runtime, system tools, system libraries, settings….(..)…Containers isolate software from its surroundings, for example differences between development and staging environments and help reduce conflicts between teams running different software on the same infrastructure.” – Source: Official Docker Website
In practice, containers enable you to make highly efficient use of the underlying infrastructure and develop and deploy applications more rapidly – a killer combination of benefits. It’s no wonder start-ups, SME as well as enterprises are adopting container technology at an explosive rate. 451 Research predicts more than 250% growth in the market from 2016 to 2020.
Deploying a container is relatively simple, shortly after Dockers’ release, lots of software-companies started using the technology in their software development and test process. But when it comes to actually running containers in production, you can end up with dozens – or even millions when using micro-services – of containers over time. All these containers need to be deployed, managed and connected to the outside world including scheduling, load balancing and distribution. Imagine you doing this manually; You would need an entire dev or ops army to accomplish this. This is where container orchestration (a.k.a. container management) i.e. Kubernetes comes to the rescue.
What is Kubernetes
Kubernetes, is a container management system, was originally created at Google. In 2015, Google released Kubernetes as an open-source project. Shortly after that Kubernetes was donated to the Cloud Native Computing Foundation (CNCF). The CNCF, initialised by Google in cooperation with the Linux Foundation, aims to promote container technology.
What does Kubernetes actually do?
In short, Kubernetes enables you to make the potential of container technology an operational reality by automating and simplifying your daily container workflow. Kubernetes automates deploying, scaling and managing containerised applications on a group (cluster) of (bare metal or virtual) servers. Kubernetes also lets you automatically handle networking, storage, logs, alerting, etc. for all your containers. To avoid going into ‘tech-mode’, we will try to explain Kubernetes’ strengths, main features and benefits in plain English, without going into too much detail. If you are interested in diving deeper into what Kubernetes is, the technology of Kubernetes, the Kubernetes architecture and components, we can refer you to the official Kubernetes documentation.
The business value of adopting containerisation and deploying Kubernetes
Enterprises, SME’s as well as start-ups are adopting container technology and Kubernetes with breathtaking speed. If your company is interested in embracing this technology, it’s important to keep in mind you shouldn’t turn to container technology or Kubernetes simply because ‘everyone’ seems to do so. Adopting containerisation and Kubernetes (or any other container management tool) as a stand-alone goal is the wrong way to look at it, instead the implementation should support your business, operational and strategic goals. In this blog post we will try to translate the idea behind container technology and the main features of Kubernetes into business value.
Benefits and advantages of containerisation
Before we dive into the benefits Kubernetes brings to the table, we’ll explore the main benefits of Docker:
Reducing resource costs:
Let’s kick off with an advantage that every company will appeal to: reducing expenses. Containers are isolated ‘packages’, that include everything the application needs to properly run. Multiple containers can share the same OS and network connection. This is much more efficient when it comes to resource utilisation than creating a virtual machine with its own OS for each application. Containers are lightweight by design and take up fewer resources, enabling you to save on hardware and data centre costs.
Ease-of-use and portability:
The isolation containers offer enables you to run your software consistently across environments. On your laptop, on any public cloud, private cloud, or even bare metal. Containers can also be copied to development, test, integration and live environments quickly and reliably. This greatly simplifies and speeds up the software development and release process, resulting in a faster time-to-market. This advantage offers more opportunities that at first sight may not be so obvious. Think for example of your overall business goal to improve your customer relations. It probably won’t be the first thing that comes to mind, but containerisation gives you the ability to respond quickly to customer requests for bug fixes or new features: something your customers will greatly appreciate.
Scalability and modularity:
Since containers are lightweight by design, they can be created within seconds. This enables you to scale instantly, helping you for example to react to unexpected website traffic load seamlessly. Containers also make it really easy to break down your application into individual components with their own function. You might want to have your application in one container and your database running in another container. Docker lets you link these containers together to create your application, making it easy to update or scale the components independently. This advantage shines even more when used in combination with a micro services architecture where an application is built out of loosely coupled services that communicate through simple API’s.
Benefits and advantages of using Kubernetes
There are a lot of options when it comes to container management, both open source and commercial. Kubernetes, however, is the most widely used solution and has surged in popularity in the past several years. Let’s find out why:
The case for Kubernetes v.s. other container management systems
Impressive heritage:
Kubernetes has a very mature and proven underlying architecture. Its design is built on over 10 years of operational experience of the Google engineers who helped build and maintain the largest container platform in the world.
Outstanding community and industry support:
Kubernetes’ broad adoption, growth, support and popularity stands out among all other container orchestration solutions. The project gained a very large active user and developer open source community, as well as the support of global enterprises, IT market leaders and major cloud providers.
Rich feature set and application support:
Kubernetes has a very rich feature set compared to other container management systems. It supports a wide spectrum of workloads, programming languages and frameworks, enabling stateless, stateful, and data-processing workloads. and making Kubernetes flexible enough to meet the needs of a wide range of users and use cases.
Ongoing development:
Soon after its first release, Kubernetes gained a very large and active community. With about 2000 Github contributors at the moment, varying from engineers working at fortune 500 companies to individual developers and engineers, new features are being released constantly. The large and diverse user community also steps in to answer questions and foster collaboration.
Kubernetes’ main features and benefits
Now that we’ve covered why Kubernetes is winning the container orchestration war, let’s have a look at the features Kubernetes has to offer. To understand the Kubernetes features, it’s good to know that applications deployed in Kubernetes are composed of multiple containers grouped as pods. Pods are co-located containers that share resources like filesystems, kernel namespaces and an IP adress. We have been working with Kubernetes for two years now, and it has became one of our favourite tools to build the versatile, tailored IT solutions our customers rely on us for. The full feature set Kubernetes offers is much too large to cover in this blog post, but we’ll discuss the main benefits and features.
It’s portable and 100% open source:
Kubernetes can practically be deployed on any infrastructure. Run your containers in one or more public cloud environments, on your dedicated virtual machines or on bare metal. You can use the same orchestration tool for all your different environments. Kubernetes’ compatibility across several platforms avoids infrastructure and cloud provider lock-in and makes a multi-cloud strategy and setup not only possible, but highly usable and flexible as well. The project is 100% open source, providing you with even more flexibility. Should you decide to hire external experts to help you implement and maintain your Kubernetes solution, you can easily switch providers if you are unsatisfied with their quality of service (provided you don’t use a specific commercial platform built upon Kubernetes).
Workload Scalability
Kubernetes is known to be efficient in its use of infrastructure resources and offers several useful features for scaling purposes:
– Horizontal infrastructure scaling: Kubernetes operates at the individual server level to implement horizontal scaling. New servers can be added or removed easily.
– Auto-scaling: With auto-scaling you can automatically change the number of running containers, based on CPU utilisation or other application-provided metrics.
– Manual scaling: You can manually scale the number of running containers through a command or the interface.
– Replication controller: The Replication controller makes sure your cluster has a specified number of equivalent pods (a group of containers) running. If there are too many pods, the Replication Controller terminates the extra pods. If there are too few, it starts more pods.
High Availability
Kubernetes is designed to tackle the availability of both applications and infrastructure, making it indispensable when deploying containers in production:
– Health checks and self-healing: Kubernetes guards your containerised application against failures by constantly checking the health of nodes and containers. Kubernetes also offers self-healing and auto-replacement: if a container or pod crashes due to an error, Kubernetes has got you covered.
– Traffic routing and load balancing: traffics routing sends requests to the appropriate containers. Kubernetes also comes in with built-in load balancers to distribute your load across multiple pods, enabling you to (re)balance resources quickly in order to respond to outages, peak or incidental traffic and batch processing. It’s also possible to use external load balancers.
Designed for deployment
One of the main benefits of containersation is the ability to speed up the process of building, testing, and releasing software. Kubernetes is designed for deployment, and offers several useful features:
– Automated rollouts and rollbacks: Want to roll-out a new version of your app or update its configuration? Kubernetes will handle it for you without downtime, while monitoring the containers’ health during the roll-out. In case of failure, it automatically rolls back.
– Canary Deployments: Canary deployments enable you to test the new deployment in production in parallel with the previous version, before scaling up the new deployment and simultaneously scaling down the previous deployment.
– Programming languages and frameworks support: Kubernetes support a wide spectrum of programming languages and frameworks like Java, Go, .Net, etc. Kubernetes also has a lot of support from the development community, who maintain additional programming languages and frameworks. If an application can run in a container, it should run well on Kubernetes.
And more
Yes, there is more. Kubernetes offers DNS management, resource monitoring, logging and storage orchestration (automatically mount the necessary storage system, be it local storage, or public cloud provider storage). Kubernetes also offers features to address security, for example by making sure sensitive information like passwords or ssh keys, are stored securely in Kubernetes secrets. Both the secrets and the configuration of applications are deployed and updated without having to reconstruct the image or expose confidential information. New features are being released constantly, and can be found on the Kubernetes GitHub page.
Kubernetes solutions for enterprises:
Let’s say you have done your research, and you are sure you want to use Kubernetes as your container management system. What are your options?
Do it yourself (perhaps with a little help)
It’s possible to build your own Kubernetes cluster from scratch, but as mentioned above, successfully setting up and maintaining a secure, highly available Kubernetes cluster is a lot of work. The process is complex and time-consuming. There are lots of companies out there that can provide you with Kubernetes consulting, training or workshops to help you get on the right track. However, when using Kubernetes in production, you will still need a team of at least 3 employees with expensive Kubernetes skills available at all times, in case anything goes wrong. In most cases and for most organisations, this just isn’t feasible.
Managed Kubernetes platforms (SaaS-solutions)
There is no shortage of commercial offerings based upon Kubernetes. New solutions are popping up every day. Most of these solutions are offerings from companies that build their own product around Kubernetes. The drawback of many of these Kubernetes platforms is that they are designed to simplify the use of Kubernetes management, and focus primarily on providing a simplified user interface (UI), instead of addressing the fundamental challenges of working with containerised applications and creating a production-ready environment. There are some nice options out there, but keep in mind that most of them limit the degree of customisation and lock you in to one specific product.
Fully Managed Kubernetes (IT outsourcing)
As a third option, you can hire Kubernetes specialists to implement and/or maintain your Kubernetes infrastructure, without the use of any commercial tools. Some providers offer consulting and implementation to help you get on the right track. Other service providers also offer day-to-day management and support. This is similar to traditional managed services and IT outsourcing.
The pace of Kubernetes adoption is creating a high demand for specialists that provide extended support and ongoing cluster operation services. This is why the Cloud Native Computing Foundation (CNCF) launched the Kubernetes Certified Service Provider Program. The KCSP program is a pre-qualified tier of vetted service providers who have extensive experience helping enterprises successfully adopt Kubernetes. We at Kumina are committed to being one of these specialists and are proud to say we are a Certified Kubernetes Service Partner.
We hope this post was helpful! Feel free to share your thoughts about Kubernetes or contact us about your Kubernetes project.
Tags: advantages, Benefits, containers, docker, features, kubernetes, solutions, value