I'd be interested in when you would recommend to use Kubernetes, and when not. I initially (some years ago) was under the impression that only larger organizations would benefit from Kubernetes (as opposed to using Docker, which is pretty much a given). Was that a correct impression? Is it still now? What are some heuristics advocating for or against using Kubernetes?
I don't think size is the determining factor now - I think it's more about location. If you want to run your apps in containers in the cloud, then Kubernetes is the best option because all the clouds have a managed service which takes away a lot of the admin headaches. There's a steep learning curve to Kubernetes - you really need a good book to help you along - but the payback is you can really can model your application once in a few YAML files and have it run the same way in any cloud, and in dev on your laptop too. I'd caution against managing your own Kube cluster in the datacenter, and I think Docker Swarm is still a valid option there, because the admin side is so much easier and the apps are modelled in the Compose spec which is much simpler.
Kubernetes requires different types of applications (cloud-native if you wish) to fully unleash it's potential. Many people jump on the Kubernetes band wagon just because it is trendy - and lift & shift their stateful monoliths (as oppose to dismantling the monolith first, which might involve huge overall architecture changes to your application).
That is a typical anti-pattern. It works best in microservices architectures where lots of small services, services that can be placed in containers.
I don't agree that's an anti-pattern For sure you'll get the most benefit from Kubernetes if your apps are distributed across small lightweight components, but that's not a requirement.
For me the biggest attraction of Kubernetes is that it runs *all* your apps and it doesn't care whether they're microservices or monoliths. Using a single modelling language to describe all your apps and a single set of tools to build, deploy and manage everything is what makes Kubernetes work for lots of organizations.
Running a big monolith in a Pod is fine - you still get healthchecks and automatic rollouts and scale and load balancing and centralized configuration and monitoring and logging and all the other great things, and you can do it without changing code. That lets you move your legacy apps to the cloud without a project, and for apps which are actively being developed you can have a roadmap to break up the monolith but do it gradually.
Thanks for the opinions. It's good to hear that there isn't a particular type of app that is particularly ill-suited for Kubernetes.
It works best in microservices architectures where lots of small services
There's got to be more to it than that. Lots of companies use Kubernetes, and not just for microservices, not by a long shot. Which is, of course, for the better, as microservices have been relentlessly overhyped and misused, just like ESBs, web services, and all kinds of other supposed silver bullets before them.
You showed up just in time for the waffles! And this tiny ad:
Building a Better World in your Backyard by Paul Wheaton and Shawn Klassen-Koop