In a world where more and more is possible, it is sometimes quite a challenge to build a solid foundation for software that is future-proof. With a solid foundation you are assured of software that is easy to expand with extra features and you won't have any problems in terms of capacity if it turns out to be a much greater success than you ever dared to dream. One of the latest trends in software development is the containerization of software.
Container-orchestration by Kubernetes
By looking at the structure of software in a smart way, we create applications that always perform on any infrastructure.
Starting with the foundation
What is containerization?
When installing software on a server, there are many things to take into account. Is the correct operating system running on the server? Do you need to communicate with multiple servers? Are all configuration files present? And don't even get us started on the consequences of switching cloud providers. One of the solution to all these issues is containerization: packing the code of software (and all the libraries, operating systems, and configurations needed to run the code) into a single file called a ‘container’. This way of packaging allows the software to run uniformly and consistently on any infrastructure.
Clarity about development
The popularity of placing software in containers can be explained even before a single line of code is written. Because you can make clear agreements with the development team about what a container should look like, they can develop and implement applications quickly and uninhibited. Do you want to use a new tool as a developer? No problem! You really don't have to call the system administrator first, who then has to install a new framework on the server. We install the new tool in the container we are working on, this ensures us that the software works everywhere. Was the code written on a desktop computer and now it needs to be moved to a virtual machine? No worries! The container stands on its own and is therefore portable; the software will run smoothly on any platform and/or cloud.
The role of Kubernetes
‘Kubernetes’ (sounds like coo-ber-net-ees) is a container-orchestration system. Large application consist of different functionalities and all these different parts are stored in their own container. Kubernetes is the ecosystem that allows you to automate all your different containers and their capabilities. It helps you communicate with your different containers and automates a LOT. There are other tools that do roughly the same thing (such as ECS and Docker Swarm), but Kubernetes has been the market leader for years.
It's clear that developing software in a container offers many advantages, but containerization also offers many advantages in terms of performance and management. Suppose you suddenly have a lot of visitors on your website, Kubernetes will (fully automatically) ensure that an extra container is booted up and the requests from the website are distributed over both containers (also called 'load balancing'). The user won't notice it at all, except maybe that your website is running so smoothly.
The real strength of Kubernetes lies in its endless possibilities for growth. Because your entire application runs in containers, it is easy to upgrade or update individual containers (even while they are in use). This way you can make additions or adjustments exactly in those places where the most profit can be made. Horizontal scaling (the use of multiple servers) is no problem at all. The container structure makes different software components easy to move, without having to reconfigure everything.
Powercombo with Knative
But we can get even more efficient! When (parts of) applications are not used, they shouldn't require server capacity. That's why we also use 'Knative'. Knative helps us to make server space available, but only when requested. Applications therefore no longer run in the background by default, but are started the moment someone asks for it. This combination of Kubernetes and Knative allows us to make optimal use of server space ánd time.
- Portable software that performs the same on any infrastructure.
- Server space is optimally used and server load is automatically balanced.
- If (part of) your software crashes, Kubernetes automatically starts a new container so that the end user isn't inconvenienced.
- An application has to be cloud native for it to be compatible with this software (but we can help you with that!).