Kubernetes is excellent technology and the wrong default. It exists to solve problems that appear at a particular scale, and it adds to your cloud hosting costs every month whether or not you have those problems.
What it is actually for
Running many services across many machines, replacing them without downtime, scaling them by demand, and recovering automatically when hardware dies. If you are doing all four, it earns its cost quickly.
Four checks before it adds to your cloud hosting costs
How many services do you run? One application and a database is not a fleet. The coordination Kubernetes provides has nothing to coordinate.
Does your traffic actually vary a lot? Autoscaling is valuable when load swings by an order of magnitude within a day. If your traffic is broadly steady, a slightly larger server is cheaper than an orchestrator and infinitely simpler.
Can someone on your team debug it at 3am? This is the question that decides it. Kubernetes failures are their own discipline, and if the answer is "we would call someone", you have added a dependency in exchange for resilience.
What does a bad deploy cost you right now? If thirty seconds of downtime is genuinely expensive, that is a real argument — although zero-downtime deploys can be had without a cluster.
What we run instead, and why we say so
Containers on ordinary servers, a pipeline in front, a proxy handling certificates and routing. Our own products run this way, this site included. One person can understand the whole arrangement in an afternoon, which matters more than elegance when something is broken and it is late.
The honest cost of this choice: scaling means a bigger machine or a second one added by hand, and there is no automatic recovery from a dead host. For products serving thousands rather than millions, that trade is almost always right.
When to change your mind
Move when a specific pain appears, not in anticipation: several teams deploying independently, traffic that genuinely spikes, or a reliability requirement written into a customer contract. Then the complexity buys something. Adopting it beforehand means paying the tax for years and calling it architecture. The cheapest infrastructure that actually works is what we set up by default — and we will say when your product has genuinely outgrown it.
Earlier in this series: what it costs to stop deploying by hand.