Kubernetes is the new normal. Everyone knows and understands kubernetes, it's the default option for now. Rolling out your own infra would be more expensive, actually. It may be a little surprising and counter-intuitive at the first glance, but it is the reality.
Like what stackoverflow said in their blog:
Have you been saying “we don’t need Kubernetes because we don’t have product market fit yet”? Take a closer look, and maybe you’ll find yourself saying “we need Kubernetes because we don’t have product market fit yet.”
Operating systems are complex, but few one would building their apps on top of bare metal. You probably have not read Linux's source code, but you can use it to host your app as long as you understand the basic concepts of threads and processes etc. You don't even have to know all the features of Linux. How many of you are masters of shiny new stuff like eBPF or WireGuard? You can just learn them when you really need to use them.
The same goes with kubernetes. It's complex indeed, but you don't need to understand every bit of it before using it. The concepts of k8s is actually very simple -- host an app on a distributed environment. It almost the same idea as running your app locally.
So, basically, as other people says, kubernetes is the OS of distributed systems. The analog in details:
Why did people migrate from bare metal to operating systems? Because the benefits of OSes outweighs the costs. So what are the problems kubernetes would solve by simply using it?
At the very start, you may not need all of them, but manually planing the machines needed and to decide which db on which machine is exhausting enough, unless you can put all your services on a single machine forever.
The problem here is: Using a single machine is no longer possible nowadays. Making topology for your services is inevitable, you have to do it manually, which is tedious and error-phone, or just use k8s.
With k8s, you can forget about machines or nodes and how your services communicate, just write a yaml deployment file, and your service is up and running. It makes a distributed system feel like a single node.