None of them. Selfhost where possible. 95% of apps/services can use a monolitic system. Forget about clusters, kubernetes, microservices, etc. Unless you are really big do not waste time and money in that. Also If your app/service happens to grow scale horizontally or vertically. If it keeps growing ( maybe millions of clients...) and only after that, look for "no-lock" clouds so you can move freely between them (avoid those who charge by use like cpu ticks, ram etc, I have always seen them as one of the biggest scams ever). Or maybe housing is a good option too.
I used to be very much against Kubernetes, but now that you have easy and lightweight Kubernetes distributions like k3s, k0s, or mikrok8s, it's not that stupid to use Kubernetes for self-hosting. You have a lot of great community supported helm-charts where you can deploy complex applications using a few lines of YAML.
And everyone who knows about Kubernetes can understand what you are doing, maintain it, and deploy it somewhere else in a managed or not kubernetes environment.