Kubernetes is still the default answer when people ask "how do we run this in production?" Managed options like GKE, EKS, and AKS take care of the control plane so your team can focus on apps instead of babysitting clusters. Honestly, most companies aren't building their own Kubernetes from scratch anymore — and that's a good thing.
Containers bundle your app with everything it needs, so "works on my machine" becomes "works everywhere." Kubernetes handles scheduling, scaling, restarts, and routing traffic through load balancers and ingress. Helm and Kustomize help you keep staging and production from drifting apart — at least in theory.
Serverless still has a seat at the table. Cloud Run, Lambda, and Azure Functions shine when traffic is spiky or event-driven and you don't want to think about nodes. Plenty of teams mix both worlds: APIs on Kubernetes, background jobs on serverless, databases managed by someone else entirely.
What's improved lately is the experience on top of raw Kubernetes. GitOps with Argo CD or Flux means your cluster state lives in Git and syncs on merge — no more manual kubectl roulette. Internal developer platforms hide complexity behind portals so app teams can deploy without becoming cluster admins overnight.
AI tooling for infra is popping up too. You can describe what you want in plain English and get Terraform or YAML back — handy for learning, risky if you apply it blindly. One wrong security group or an IAM role that's too permissive can ruin your week. Always review before you apply.
And yes, the bill matters. Right-size your pods, use spot instances where you can afford interruptions, and scale on real metrics — not guesses. Good observability (metrics, logs, traces) tells you what's actually eating budget and what breaks first when traffic jumps.