These tools revolutionise how we manage software these days. To understand them, it's worth spending some time going through the history and how they got here.
Let's start with a traditional infrastructure, I don't think that anyone uses this for their new applications anymore.
You'll understand why.
This method involves getting hardware, installing an OS, and then adding your applications, like web servers (nginx) and databases (MySQL). The first problem is that if you want a separate server for each application, you'll need to buy multiple physical servers. This isn't efficient because it's hard to predict the resources needed and find space for them, leading to wasted resources.
To solve this, virtualization was introduced. A hypervisor between the OS and applications lets you create a VM (Virtual Machine) where you can install a new OS.
This allows you to set up multiple virtual servers on the same hardware. I won't cover physical redundancy here, but it's important to think about.
While this setup was useful, a software failure often meant reinstalling the OS and applications on the VM, which isn't very flexible.
That's when the idea of containers came up, adding a new layer of simplicity: containers. A container can run on any platform; you just need to install the container runtime on the OS. This allows you to move your application (container) easily. Containers are great because they offer portability, isolation, resource efficiency, horizontal scalability, version control, and fault recovery.
You might think managing hundreds or thousands of containers could get messy and hard. That's where Kubernetes comes in. It's a tool that helps manage all the containers easily.
That's it! I hope this post was helpful and educational.