DEV Community

Cover image for Bare-Metal Kubernetes: What the Noise Is Actually About
Schiff Heimlich
Schiff Heimlich

Posted on

Bare-Metal Kubernetes: What the Noise Is Actually About

Bare-Metal Kubernetes: What the Noise Is Actually About

You have probably seen the announcements. Nutanix launched NKP Metal. Several vendors are pushing bare-metal Kubernetes offerings. The press makes it sound like the next revolution.

Here's what's actually going on, and why you should care.


The Problem Being Solved

If you run Kubernetes in the cloud, you're abstractions deep: containers on VMs on hypervisors on physical hardware. Each layer adds latency, consumes overhead, and introduces failure modes.

For most workloads, this doesn't matter. Your web app doesn't care if the hypervisor adds 0.3ms of latency.

For a specific class of workloads, it does matter:

  • Latency-sensitive applications at the edge — think content delivery, local inference, real-time processing
  • High-throughput data plane operations — network functions, storage controllers
  • GPU-direct workloads — where you want the container talking directly to the hardware

The push toward bare-metal Kubernetes is about removing the VM layer for these specific cases. Not all Kubernetes. Just the parts where the hypervisor tax actually costs you something.


What Changes When You Remove the VM Layer

Running Kubernetes directly on physical nodes changes a few things:

No more VM overhead. No KVM/QEMU tax. Your pod gets the full CPU, memory, and I/O of the physical host. For a GPU workload, this means direct PCI-e access without the virtualization layer introducing latency jitter.

Simplified resource allocation. You don't have to think about VM sizes and node counts separately. The node is the physical host. This sounds simpler but requires different operational thinking.

New operational requirements. No live migration. No VM-level snapshots. If a physical node fails, pods don't get rescheduled automatically the way they do with VMs. You need different health-check and recovery strategies.

Here's what that actually looks like operationally:

\`bash

With VMs, a node failure triggers live migration or restart

With bare metal, you're dealing with hardware

Health checking needs to be tighter

apiVersion: apps/v1
kind: Deployment
metadata:
name: edge-workload
spec:
replicas: 3
template:
spec:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: DoNotSchedule
# Force spread across physical hosts, not VMs
`\

The constraint whenUnsatisfiable: DoNotSchedule matters more on bare metal. You don't want two replicas landing on the same host if that host is your only option for that hardware profile.


The Practical Difference for Edge Deployments

Edge Kubernetes has a different failure profile than cloud. In cloud, a node failure is common, recoverable in seconds. At the edge, a node failure might mean:

  • Physical access required
  • Remote location with limited connectivity
  • Single-node "clusters" because hardware is expensive

Bare-metal Kubernetes at the edge means you're thinking about:

\`yaml

Edge cluster with local storage persistence

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer


Node affinity to keep stateful workloads pinned

apiVersion: apps/v1
kind: StatefulSet
metadata:
name: edge-db
spec:
serviceName: "edge-db"
replicas: 1 # Sometimes you only have one node
selector:
matchLabels:
app: edge-db
template:
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-type
operator: In
values:
- compute-node
tolerations:
- key: "node.kubernetes.io/unreachable"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 300
`\

The tolerationSeconds: 300 buys you 5 minutes before pods get evicted when a node becomes unreachable. At the edge, you want this grace period — you might be dealing with a temporary network partition, not an actual node failure.


Where This Makes Sense

Bare-metal Kubernetes is not a replacement for cloud Kubernetes. It's a specific tool for specific scenarios:

Makes sense:

  • Edge locations with latency-sensitive workloads
  • Telco/CNF workloads requiring low jitter
  • GPU clusters where you want direct PCI-e access
  • Remote locations where compute is expensive and you need efficiency

Does not make sense:

  • General web applications
  • Development/test environments
  • Workloads that scale horizontally in cloud
  • Teams without operational experience managing physical infrastructure

The Nutanix move is interesting because they span both worlds — VMs for general workloads, bare metal for specialized ones. Unified management across both is the actual value proposition for organizations already in that ecosystem.


The Operational Reality Check

Before jumping on this, understand what you're signing up for:

No live migration means planned maintenance is different. Upgrading the kernel on a bare-metal node means your pods go down. You need proper PodDisruptionBudgets and graceful draining:

\`bash

Check if your workload can tolerate node maintenance

kubectl get poddisruptionbudgets -A
kubectl describe poddisruptionbudgets

Drain before maintenance

kubectl drain --ignore-daemonsets --delete-emptydir-data
`\

Hardware failures are not transparent. A bad DIMM, a failing SSD, a RAID controller glitch — these don't show up in kubectl get nodes the same way a VM failure does. You need IPMI/BMC access and hardware monitoring out of band.

Inventory management is physical. Server serial numbers, firmware versions, BIOS settings — this is not aws ec2 describe-instances. It's a spreadsheet at minimum, hardware tags and asset IDs at best.


The Actual Opportunity

For most teams, cloud Kubernetes is fine. The hypervisor tax is real but small, and the operational simplicity is worth it.

For teams running edge infrastructure, telco workloads, or specialized compute (GPU, FPGA, network accelerators), bare-metal Kubernetes solves a real problem. The latency and efficiency gains are measurable.

The key is knowing which category your workload falls into. If you can't articulate why you need bare metal, you probably don't. And if you can, you're already aware of the operational tradeoffs.

This isn't a revolution. It's a specialized deployment model getting better tooling support. That's worth paying attention to if you're in that space.


Sources:

Top comments (0)