Kubernetes is a platform for managing various workloads inside containers. Before I jump into a definition, let’s describe the problems it tries to solve. Imagine your application consists of several components. It can be microservices, multi-layer application, etc. Each type of component needs to be deployed on multiple servers. First of all, to support fault tolerance, but also to achieve horizontal scaling. Doing this by hand is quite problematic. Manually tracking which servers should host which components is tedious and error-prone.
You need to take into account:
- CPU and memory requirements of each component
- discoverability (where each component is located)
- provisioning (different components need different libraries and packages)
- scaling out and migrating from broken servers
- and so on, and so forth