Is Kubernetes Used in Production? A 2026 Guide to Running K8s at Scale

Five years ago, the question “is kubernetes used in production?” felt like an existential risk assessment. You’d see half the room raise hands, the oth...

kubernetes used production 2026 guide running scale
By Nishaant Dixit
Is Kubernetes Used in Production? A 2026 Guide to Running K8s at Scale

Is Kubernetes Used in Production? A 2026 Guide to Running K8s at Scale

Stop 3AM Pages

Free K8s Audit

Get Started →
Is Kubernetes Used in Production? A 2026 Guide to Running K8s at Scale

Five years ago, the question “is kubernetes used in production?” felt like an existential risk assessment. You’d see half the room raise hands, the other half whisper “we’re still evaluating.” Today that question is meaningless in the binary sense. Yes, Kubernetes is used in production – by Coinbase, Spotify, Bloomberg, and thousands of mid-market companies. But the real question has shifted: where should you use it, how do you keep it from bankrupting you, and when does the complexity outweigh the benefit?

I run SIVARO, a product engineering firm that builds data infrastructure and production AI systems. We’ve deployed Kubernetes for clients ranging from Series A startups to Fortune 500s. I’ve seen glorious wins and catastrophic bills. This guide is my unfiltered take – no fluff, no vendor cheerleading. You’ll learn when Kubernetes is the right tool, how to optimize costs with tools like Karpenter, and the painful lessons I’ve collected along the way.

The Real Question Isn’t “If” – It’s “Where”

Most people think the answer to “is kubernetes used in production?” is a simple yes. It’s not.

In 2026, the vast majority of cloud-native companies run Kubernetes in production for stateless microservices, batch jobs, and AI inference pipelines. But they don’t run everything on it. Databases? Many still prefer managed RDS or PlanetScale. Cron jobs with tight latency? Sometimes a simple Lambda is better. The dirty secret: Kubernetes adds operational drag. If your team is three engineers and you’re running a single monolith on a $200/month server, you don’t need K8s. Period.

I’ve seen this first-hand. A client in early 2025 insisted on migrating their Rails app to EKS. Three months later, their deployment times went from 30 seconds to 12 minutes, and their bill tripled. They didn’t need Kubernetes. They needed a process manager and a load balancer.

So when should you use Kubernetes? Three signals:

  1. You’re scaling beyond a few services – more than 5 microservices or you need per-service autoscaling.
  2. You need multi-tenant isolation – team A can’t interfere with team B’s deployments.
  3. Your workloads are bursty or unpredictable – you benefit from binpacking and spot instances.

But the moment you decide yes, you inherit the second-order mess: cost control, cluster management, and the “why did my pod get evicted” panic at 3 AM.

When Kubernetes Fails in Production

I’ll be honest: I’ve broken production Kubernetes clusters. Twice. Both times were avoidable.

First failure: no resource limits. I was young and confident. I deployed a ML training job without setting CPU/memory requests. It consumed all spare capacity on three nodes, starved the critical API pods, and caused a 12-minute outage. The autoscaler didn’t trigger because the nodes weren’t technically overcommitted – they were just unfairly allocated. Classic.

Second failure: misconfigured PodDisruptionBudget. We were using Karpenter for spot instance management (more on that shortly). Karpenter decided to consolidate two nodes into one. But our PDB required minimum 3 replicas for a critical stateful set, and we only had 2 replicas spread across those two nodes. Karpenter evicted a pod, the PDB blocked the eviction, and the consolidation got stuck for 40 minutes. Our response time spiked. I learned the hard way what this blog post describes: PDBs are not a silver bullet – they’re a promise you have to actually enforce.

If you’re asking “is kubernetes used in production?” and you haven’t tested PDBs with disruptions, your answer is “not safely.”

Cost Optimization: The Karpenter Revolution

The biggest wallet killer in Kubernetes is wasted compute. Over-provisioning, under-utilized nodes, and paying on-demand prices when spot would work fine. That’s where Karpenter changed the game for us.

Karpenter is an open-source Kubernetes cluster autoscaler built by AWS. Unlike the old Cluster Autoscaler (which works at the node-group level), Karpenter schedules pods directly – provisioning nodes that match the exact resource needs of pending pods. It’s smarter, faster, and more cost-efficient.

The Tinybird team published how they cut AWS costs by 20% while scaling with EKS, Karpenter, and Spot Instances. That’s not a marketing claim – I’ve seen similar results across multiple projects. In 2025, we helped a fintech client reduce their EKS bill from $47k/month to $36k/month, purely by replacing Cluster Autoscaler with Karpenter and switching 60% of workloads to spot instances.

Here’s a minimal Karpenter provisioner configuration that we use as a starting point:

yaml
apiVersion: karpenter.sh/v1beta1
kind: NodePool
metadata:
  name: default
spec:
  template:
    spec:
      requirements:
        - key: kubernetes.io/arch
          operator: In
          values: ["amd64"]
        - key: karpenter.sh/capacity-type
          operator: In
          values: ["spot", "on-demand"]
      nodeClassRef:
        group: eks.amazonaws.com
        kind: EC2NodeClass
        name: default
  limits:
    cpu: 1000
  disruption:
    consolidationPolicy: WhenUnderutilized
    expireAfter: 720h

That consolidationPolicy: WhenUnderutilized is the magic. Karpenter watches nodes and if it can reschedule pods onto fewer, cheaper nodes, it will drain and terminate the under-utilized ones. The AWS blog on optimizing compute costs with Karpenter consolidation explains the algorithm in detail – it’s a bin-packing problem that runs every few seconds.

But here’s the catch: consolidation can be aggressive. I’ve seen it evict pods that were mid-mutation. That’s why you need PDBs and the right consolidationPolicy. There are three modes:

  • WhenEmpty – only consolidate empty nodes (safe, slow)
  • WhenUnderutilized – consolidate if pod scheduling improves (default, good balance)
  • WhenEmptyOrUnderutilized – aggressive, can cause churn

For production, start with WhenUnderutilized. Test with staging workloads first.

Karpenter Consolidation: The Good, The Bad, and The Hungry Workloads

Karpenter’s consolidation is brilliant – when it works. The problem is “hungry workloads” – batch jobs that consume all CPU and memory on a node for hours. Karpenter won’t consolidate that node because it’s fully utilized. That’s correct behavior. But if you have a mix of batch and interactive services, you’ll end up with some nodes that stay permanently 80% utilized while others fluctuate. Karpenter handles this by only consolidating after the hungry pod finishes, or if it can move the pod to a cheaper instance type.

The Karpenter concepts page has a beautiful diagram of how consolidation evaluates each node. It looks at all possible combinations of instance types that could host the running pods, then picks the cheapest. If a cheaper combination exists, it will cordon, drain, and terminate.

Here’s a real-world example: we had a service that ran five small pods (0.5 CPU each) on a single m5.large (2 CPU). Karpenter consolidated them onto a t3.small (2 CPU but cheaper). Cost dropped from $0.096/hour to $0.026/hour. Same CPU, same memory, half the price.

But we also had a stateful database pod that needed 16 GB memory and I/O credits. Karpenter tried to move it to a t3.2xlarge – cheaper, but burstable networking. The database choked under load. We had to add a nodeSelector to pin it to m6i instances.

That’s the trade-off: Karpenter optimizes for cost, not performance. You need to label your workloads correctly.

Spot Instances and the Stability Tradeoff

Spot Instances and the Stability Tradeoff

If you’re running Kubernetes in production today and not using spot instances, you’re leaving 60-70% savings on the table. But spots come with a reliability tax – your node can be reclaimed at any time with a 2-minute warning.

The key is smart spot diversification. Karpenter’s spot capacity type automatically picks the cheapest spot instance in your region from a set of families. You can control that with requirements:

yaml
requirements:
  - key: node.kubernetes.io/instance-type
    operator: In
    values: ["m5.large", "m5a.large", "m6i.large"]
  - key: karpenter.sh/capacity-type
    operator: In
    values: ["spot"]

That’s the karpenter spot instance configuration best practices in a nutshell: restrict to a handful of compatible instance families, spread across generation and niche (e.g., Intel, AMD). This reduces the chance of a full spot pool wipeout.

But even with diversification, you need PodDisruptionBudgets. The personal take I mentioned earlier went into deep detail about how PDBs interact with Karpenter’s consolidation. Here’s my rule: for every critical workload, set a PDB that allows at most 1 unavailable replica, and ensure you run at least 2 replicas. Also set topologySpreadConstraints to spread across nodes and zones. That way, if Karpenter evicts one pod, the other keeps serving.

yaml
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: api-pdb
spec:
  minAvailable: 1
  selector:
    matchLabels:
      app: api

That YAML saved us from the 12-minute outage I caused earlier.

Karpenter Cost Allocation: Who Pays for What?

Now the hard part: karpenter cost allocation kubernetes. Karpenter itself doesn’t track costs. It provisions nodes, but who pays? If you have teams sharing a cluster, you need to tag nodes and propagate those tags to the AWS cost reports.

Here’s what we do: add spec.template.metadata.labels with team and environment labels in the NodePool definition, and then map those to EC2 tags via EC2NodeClass.

yaml
apiVersion: karpenter.sh/v1beta1
kind: EC2NodeClass
metadata:
  name: default
spec:
  amiFamily: AL2
  subnetSelector:
    karpenter.sh/discovery: my-cluster
  securityGroupSelector:
    karpenter.sh/discovery: my-cluster
  tags:
    karpenter.sh/provisioner-name: default
    Environment: production
    Team: platform

Then in AWS Cost Explorer, group by user:Team. That gives you per-team spend. We also inject karpenter.sh/capacity-type: spot or on-demand into labels, so you can slice by instance market.

Without this, your finance team will hate you. They’ll see “EC2 – $80,000” and ask where it went. You need to answer.

Production-Level Configuration: What I’ve Learned the Hard Way

Based on scaling failures and cost blowups, here are the non-negotiables:

  1. Set resource quotas per namespace – without them, one bad deployment can starve the cluster. Use ResourceQuota and LimitRange together.
  2. Enable vertical pod autoscaling alongside horizontal – many workloads are memory-hungry but CPU-thrifty. VPA with mode: Auto can right-size requests automatically.
  3. Monitor Karpenter metrics – track karpenter_nodes_created, karpenter_nodes_terminated, and consolidation decisions. We use Prometheus and Grafana dashboards.
  4. Test disruption scenarios – we run chaos experiments every month: force a node drain and observe PDB behavior. Use LitmusChaos or a simple script.
  5. Budget spot termination gracefully – set up a Node Termination Handler (or enable the alpha AWSNodeTerminationHandler addon) to react to EC2 spot termination notices.

The ScaleOps guide to Kubernetes cost optimization in 2026 covers many of these with real numbers. One stat that stuck: misconfigured resource requests account for 30% of cloud waste in Kubernetes environments.

FAQ

1. Is Kubernetes used in production by small startups?

Sometimes. If you have less than 10 microservices and a team of 5, you’ll likely spend more time babysitting the cluster than shipping features. Use managed services like Railway or Fly.io first. Migrate to Kubernetes when you hit scaling pain.

2. Can you run stateful workloads on Kubernetes in production?

Yes, but with caution. Use StatefulSets with persistent volumes, test backup/restore, and set pod disruption budgets. Databases like PostgreSQL can run well if you use operators like CloudNativePG. I’ve done it – but only after proving the operator handles failover correctly.

3. Should I use EKS, GKE, or AKS in 2026?

EKS with Karpenter is my default recommendation. GKE Autopilot is simpler but more expensive. AKS is catching up but Karpenter isn’t natively supported (you can run it, but it’s extra work). If you’re already on GCP, GKE with Standard mode and Karpenter is fine.

4. How do you handle security in production Kubernetes?

RBAC, network policies, PodSecurityStandards, and regular image scanning. Use Kyverno or OPA for policy enforcement. Don’t run containers as root. These are table stakes.

5. What’s the minimum cluster size for production?

3 nodes in a managed node group (or Karpenter with at least 1 node). Single-node clusters are not production-safe – no failure domain.

6. How much does Kubernetes cost in production?

The control plane alone is ~$0.10/hour per cluster (EKS). Node costs depend on workload. Expect $200-500/month for a small cluster with three nodes. Large clusters can hit $50k+ easily.

7. Is Karpenter production-ready?

Absolutely. It’s been GA since 2023 and is the standard for AWS clusters. I’d trust it over Cluster Autoscaler for any new deployment.

8. What’s the biggest mistake people make when deploying Kubernetes in production?

Over-engineering. Start with a simple setup: managed control plane, a single node pool, basic HPA, and cheap monitoring (K9s + Prometheus). Then iterate.

Conclusion: The Honest Answer to “Is Kubernetes Used in Production?”

Conclusion: The Honest Answer to “Is Kubernetes Used in Production?”

Yes. But only if you’re ready to invest in the operational maturity it demands. Kubernetes in production is not a fire-and-forget installation. It requires continuous tuning: right-sizing requests, managing spot interruptions, configuring Karpenter policies, and allocating costs correctly.

I’ve run it for clients generating tens of millions in revenue. It works. But I’ve also watched teams burn 40% of their cloud budget on idle nodes because they skipped the Karpenter consolidation setup. The difference between success and failure is not the technology – it’s the discipline to treat infrastructure code with the same rigor as application code.

So to the original question: is kubernetes used in production? Yes – at SIVARO, at Tinybird, at every serious cloud-native operation I know. But they use it deliberately, not as a default. They use Karpenter for autoscaling and cost control, they enforce PDBs, and they audit their resource allocation weekly. That’s the only way to make it work.

Now go configure your NodePool.


Nishaant Dixit — Founder of SIVARO. Building data infrastructure and production AI systems since 2018. Built systems processing 200K events/sec.

Free · No Commitment · 48-Hour Delivery

Get a free infrastructure audit

2-hour remote session. We audit your data infrastructure, identify what's costing you time and money, and deliver a written roadmap with specific, measurable targets. No pitch.

Book Your Free Audit
N
Nishaant Dixit
Founder & Lead Engineer at SIVARO

Building data-intensive systems since 2018. 200K events/sec pipelines, production RAG systems, Kubernetes infrastructure. LinkedIn →

Start a Project
Need help with infrastructure?

Kubernetes, Karpenter, DevOps pipelines, and container orchestration for production workloads.

Explore MVP to Production