An honest look at when a small team needs Kubernetes, simpler alternatives, and a minimal, maintainable setup on a managed cluster if you do.
In this article
- 01What Kubernetes gives you, and what it costs
- 02When you probably do not need it
- 03Signs Kubernetes is worth it
- 04A minimal setup: start managed
- 05The handful of objects you actually need
- 06Settings that prevent most incidents
- 07Ingress, certificates and DNS
- 08Deploy with GitOps
- 09Security basics for a small cluster
- 10What it costs to run
- 11Day-two work you must plan for
What Kubernetes gives you, and what it costs
Kubernetes schedules containers across a pool of machines, restarts them when they fail, rolls out new versions gradually, scales them with load and gives services stable network names. It also has a huge ecosystem of tools for deployment, security and monitoring, and the same manifests run on any major cloud.
The cost is complexity. Even with a managed control plane, someone has to understand networking, ingress, certificates, resource limits, upgrades and the many add-ons a real cluster needs. For a team of three to ten engineers, that time comes directly out of product work.
When you probably do not need it
If you run a handful of stateless services and a managed database, simpler platforms give you most of the benefits with far less to operate. AWS ECS with Fargate, Google Cloud Run and Azure Container Apps all run containers with autoscaling, rolling deployments and managed TLS, without a cluster to maintain. A single virtual machine with Docker Compose is still a reasonable choice for internal tools and early prototypes.
Our Docker vs Kubernetes and serverless vs containers comparisons help place these options.
Signs Kubernetes is worth it
Kubernetes starts paying for itself when several of these are true:
- You run many services, workers and scheduled jobs that need consistent deployment
- You need to run the same platform across clouds or on customer infrastructure
- You rely on ecosystem tools, such as operators for databases or queues, that assume Kubernetes
- Workloads have specific needs like GPUs, sidecars or fine-grained network policies
- Someone on the team has Kubernetes experience and time to own the platform
A minimal setup: start managed
Never run your own control plane as a small team. Use Amazon EKS, Google GKE (Autopilot mode removes node management entirely) or Azure AKS. Start with one cluster for non-production and one for production, or a single cluster with separate namespaces if budget is tight and the risk is acceptable. Define the cluster itself with infrastructure as code, such as Terraform, so it can be recreated.
Keep stateful services out of the cluster at first. Managed databases, caches and queues from your cloud provider remove the hardest Kubernetes problems, persistent storage, backups and failover, from your plate. Run stateless application containers in the cluster and connect them to managed data services over private networking.
The handful of objects you actually need
A typical web service needs only a few Kubernetes resources. Learn these well before adding anything else:
- Deployment: runs a set of identical pods and handles rolling updates
- Service: gives the pods a stable internal address
- Ingress or Gateway API route: exposes HTTP services to the internet through a controller
- ConfigMap and Secret: configuration and sensitive values, injected as environment variables or files
- HorizontalPodAutoscaler: adds or removes pods based on CPU or other metrics
Settings that prevent most incidents
Set resource requests on every container so the scheduler places pods sensibly, and memory limits so one leaking pod cannot starve its neighbors. Add a readiness probe so traffic only reaches pods that are ready, and a liveness probe only for failures a restart can fix; an aggressive liveness probe causes restart loops under load. Run at least two replicas of anything user-facing and add a PodDisruptionBudget so node upgrades do not take everything down at once.
Handle shutdown gracefully too. When a pod is terminated, Kubernetes sends SIGTERM and waits for the termination grace period before killing it. Your app should stop accepting new requests, finish in-flight ones and exit cleanly; a short preStop delay gives load balancers time to stop routing traffic to the pod first.
Ingress, certificates and DNS
Traffic enters through a controller. Many teams use their cloud provider's load balancer controller; the Kubernetes project now steers new setups toward the Gateway API, so check the maintenance status of any ingress controller before adopting it. cert-manager issues and renews TLS certificates automatically, for example from Let's Encrypt, and external-dns can create DNS records from your resources.
Deploy with GitOps
Store manifests in Git, packaged with Helm or Kustomize, and let a GitOps tool such as Argo CD or Flux apply them to the cluster. CI builds and pushes images and updates the image tag in the manifests; the GitOps controller notices and syncs. Every change is reviewed, the cluster state matches Git and rollback is a Git revert. Keep secrets out of Git using External Secrets Operator with your cloud's secret manager.
Security basics for a small cluster
Default settings are permissive, so tighten a few things from the start:
- Run containers as non-root, with a read-only root filesystem where the app allows it
- Enforce Pod Security Admission with the baseline or restricted profile per namespace
- Add NetworkPolicies to limit which pods can talk to each other, using a network plugin that enforces them
- Give pods cloud permissions through workload identity (EKS Pod Identity or IRSA, GKE Workload Identity, AKS workload identity) rather than node-wide credentials
- Keep RBAC tight: developers rarely need cluster-admin
- Scan images in CI and rebuild them regularly for base image patches
What it costs to run
Costs come from more places than nodes. Some providers charge a fee per cluster for the managed control plane, and load balancers, persistent volumes, NAT gateways and log storage add up. Resource requests drive how many pods fit on a node, so oversized requests waste money quietly. Use the cluster autoscaler or Karpenter on AWS to add and remove nodes with demand, and consider spot or preemptible nodes for stateless workloads that tolerate interruptions.
Day-two work you must plan for
Kubernetes publishes new minor versions a few times a year, and each is supported for a limited period, so managed providers eventually upgrade old clusters for you. Budget time each quarter for upgrades and add-on updates. Add monitoring with Prometheus and Grafana or a managed equivalent, centralize logs and watch costs, since oversized node pools are the most common source of waste.
If you want a second opinion on whether Kubernetes fits your stage, Nexzem's DevOps consulting team can review your setup and recommend the simplest platform that meets your needs.



