In the end you are bound to AWS and have to reinvent many things when moving to another cloud provider.
How long did it take to set this up?
> AWS autoscaling groups + cloudwatch for adding and removing machines
Does this also work for multiple applications on one host?
> means that I still end up with fewer hosts if I just run each component
I don't know how your environments looks like but we used one VM for every environment. One environment needs about 20 GB max so we have to use 32 GB RAM VMs and waste quite some resources.
With k8s I have two beefy 64 GB nodes that host 6 environments.
This also speeds up the execution as 70% of time the environments have a low load and the beefy nodes have more CPU cores available than smaller VMs.
Most of the time we can also throw some Jenkins and other test jobs on the cluster for free (low priority deployments).
> Overhead
Yes there is definitely some overhead. 2 GB RAM for the master and 700 MB RAM on every node.
We choose larger nodes (8 CPUs and 64 GB RAM) so the overhead is not that great in comparison.
We do gain savings from k8s (about 15 to 30 %).
> k8s magic
You are right, there is no magic sauce. k8s just packs a nice package of things I otherwise need to do externally. Sure the external logic worked well in the past, but now I get many features for a rather low price without committing my company to a provider to hard.