← All field notes
Platform 4 min read

5 Kubernetes Mistakes That Cost You £3,000+/Month

The most expensive K8s misconfigurations we see in every audit, and exactly how to fix them. Save £10k+/year.

5 Kubernetes Mistakes That Cost You £3,000+/Month

Kubernetes is powerful. It’s also expensive when configured badly.

After auditing 20+ K8s clusters, we see the same 5 mistakes costing teams £3,000-£10,000/month in unnecessary cloud spend.

Mistake 1: Running Everything in the Same Node Pool

What we see: One large node pool with identical instance types running all workloads.

Why it’s expensive: Your background jobs don’t need the same expensive compute-optimized instances as your API servers. But if they’re all in the same node pool, they get the same hardware.

Real example: SaaS company running background jobs on c5.2xlarge instances (£0.34/hour). Jobs needed 1 CPU and 2GB RAM. Actual requirement: t3.medium (£0.042/hour).

Cost: Running 10 background workers 24/7 = £890/month wasted.

Fix:

  • Create separate node pools for different workload types
  • API servers: compute-optimized (c5 family)
  • Background jobs: burstable (t3 family)
  • Data processing: memory-optimized (r5 family)
  • Use node selectors and taints/tolerations to schedule pods correctly

Mistake 2: No Resource Limits = Overprovisioned Nodes

What we see: Pods deployed without CPU/memory requests and limits.

Why it’s expensive: Kubernetes can’t pack pods efficiently. You end up with 10 nodes at 30% utilization when you could run on 4 nodes at 75% utilization.

Real example: E-commerce platform running 40 pods across 12 nodes. Average node utilization: 32%.

After setting proper resource requests/limits: 40 pods across 5 nodes. Average utilization: 78%.

Savings: 7 fewer m5.xlarge nodes = £1,260/month.

Fix:

resources:
  requests:
    memory: "256Mi"
    cpu: "100m"
  limits:
    memory: "512Mi"
    cpu: "500m"

Use Vertical Pod Autoscaler (VPA) to right-size these values based on actual usage.

Mistake 3: Always-On Development/Staging Clusters

What we see: Separate K8s clusters for dev, staging, and production – all running 24/7.

Why it’s expensive: Your dev cluster gets used 40 hours/week. You’re paying for 168 hours/week.

Real example: Startup running 3 identical clusters (production, staging, dev):

  • Production: 8 nodes (essential, must run 24/7)
  • Staging: 6 nodes (used 9am-6pm, Mon-Fri)
  • Dev: 4 nodes (used sporadically)

Cost: Staging cluster running 24/7 = £2,880/month. Actually needed ~40 hours/week.

Fix: Automate cluster shutdown for non-production environments:

  • Staging: Auto-scale to 0 nodes outside working hours = save 75%
  • Dev: Use ephemeral clusters that spin up on-demand
  • Or consolidate dev/staging into production cluster with namespace isolation

Savings: £2,160/month (staging) + £1,800/month (dev) = £3,960/month.

Mistake 4: Persistent Volumes That Never Get Deleted

What we see: Hundreds of EBS volumes attached to deleted pods, still incurring charges.

Why it’s expensive: When pods get deleted, PersistentVolumes often stick around due to `Retain` reclaim policies.

Real example: Found 120 orphaned EBS volumes (100GB each) from old staging deployments.

Cost: 120 × 100GB × £0.08/GB = £960/month for storage nobody was using.

Fix:

  • Set `reclaimPolicy: Delete` for non-production PVCs
  • Audit volumes monthly: kubectl get pv | grep Released
  • Automate cleanup with a CronJob that deletes Released PVs older than 7 days

Mistake 5: No Cluster Autoscaler (or Bad Configuration)

What we see: Either no autoscaling at all, or Cluster Autoscaler configured with overly conservative settings.

Why it’s expensive: Manual node management means you overprovision to handle peak load, then pay for idle capacity 90% of the time.

Real example: API that sees 10x traffic during business hours (9am-5pm). Team manually provisioned for peak load = 24/7 overprovisioning.

Cost: Running 15 nodes 24/7 when they only needed 15 nodes for 8 hours/day.

Wasted capacity: 15 nodes × 16 hours/day × 30 days = £3,600/month in idle compute.

Fix: Enable Cluster Autoscaler with aggressive scale-down:

--scale-down-delay-after-add=5m
--scale-down-unneeded-time=5m
--scale-down-utilization-threshold=0.5

Pair with Horizontal Pod Autoscaler (HPA) for pod-level scaling:

kubectl autoscale deployment api-server 
  --cpu-percent=70 
  --min=2 
  --max=20

The Compounding Effect

Here’s the scary part: most teams have 3-4 of these mistakes running simultaneously.

Total monthly waste: £890 + £1,260 + £3,960 + £960 + £3,600 = £10,670/month

That’s £128,040/year in pure infrastructure waste.

What To Do About It

If you’re running Kubernetes in production and haven’t done a cost audit in the last 6 months, you’re almost certainly overspending.

Our 2-week Infrastructure Audit includes:

  • Complete K8s cluster cost analysis
  • Node pool optimization recommendations
  • Resource request/limit right-sizing
  • Autoscaling configuration review
  • We implement the top 5 quick wins

Fixed price: £3,000
Delivery: 2 weeks
Typical ROI: 10-15x in first year

Book a Free Discovery Call

We’ll review your cluster configuration and tell you honestly what’s costing you money.

AS

Written by Alan Son

CTO judgment, grounded in delivery.

I build commercial AI products and help founders turn ambitious technical ideas into reliable production systems.

More about my work

Need an experienced technical partner?

Let’s work out the right next move.