Alle Systeme betriebsbereit · 40+ PoPsHosting seit 2010
INTERKVM HOST SRL·AS 25198
Startseite/Blog/Kubernetes on dedicated servers: building the parts the cloud hides
Dedicated Servers 15. Oktober 2026

Kubernetes on dedicated servers: building the parts the cloud hides

Managed Kubernetes hides the control plane, the load balancers and the storage behind an API and bills for every gigabyte that leaves. On bare metal, compute is cheaper and egress is flat, but those pieces become yours. The decisions in order, with a costed three-server cluster at the end.

Veröffentlicht
Lesezeit
6 Min.
Four ordered steps for Kubernetes on bare metal: three nodes for etcd quorum, a small distribution, a load-balancing design, then local or replicated storage.

Running Kubernetes on dedicated servers trades one bill for another kind of work. Managed Kubernetes in the cloud hides the control plane, the load balancers and the storage behind an API, and charges for compute and every gigabyte that leaves. On rented bare metal, compute is far cheaper and egress is a flat rate, but those three hidden pieces become yours to build. None of them is hard. All of them need deciding before the first workload goes live. This guide covers the decisions in order: cluster shape, distribution, load balancing, storage and networking, with a costed example at the end.

Why bare metal, and what you give up

The case for it is mostly arithmetic. A dual EPYC 9554 with 128 cores and 512 GB of RAM rents for €959 a month on our 1 Gbps tier, with no per-gigabyte egress charge. Cloud egress, by contrast, is metered: cost per terabyte of bandwidth shows a list price of $90 per terabyte at the first AWS tier. For a cluster that serves real traffic, egress alone can exceed the cost of the servers.

You also get the whole machine: no noisy neighbours, local NVMe without network-storage latency, and the full memory bandwidth of each socket.

What you give up is elasticity measured in seconds. A cloud cluster can add a node while a traffic spike is still building; a dedicated server takes up to an hour to activate when the configuration is in stock, longer when it is not. Bare-metal clusters are sized for the peak and run with headroom, rather than scaled on demand. If your load swings tenfold within a day, keep a cloud node pool for the swing, or keep spare capacity on the metal.

Cluster shape: three is the minimum that survives a failure

Kubernetes keeps its state in etcd, which needs a majority of members — a quorum — to accept writes. With three members, the cluster survives one failure; with five, it survives two. Two members is worse than one, because losing either stops the cluster.

That gives two sensible shapes:

  • Three servers, stacked. Each dedicated server runs a control-plane member and ordinary workloads. This is the right shape for most clusters up to a few dozen services. Taint nothing, reserve some CPU and memory for the system components, and keep etcd's data on NVMe.
  • Separate control plane. Three small machines run only the control plane, and the big servers are pure workers. The control plane needs little: the kubeadm minimum is 2 CPUs and 2 GB of RAM per node. Three 2 vCPU, 8 GB KVM VPS instances in the same city as the workers do this comfortably, at €59 each.

Keep every control-plane member in the same location. etcd is sensitive to latency between its members, and a quorum spread across cities is slower and more fragile.

Distribution: pick the least you have to maintain

  • k3s — a single binary with the essentials bundled: Flannel networking, CoreDNS, Traefik ingress, a simple service load balancer and a local-path storage provisioner. With three server nodes it runs embedded etcd in high-availability mode. It is the fastest way to a working cluster on a few machines.
  • kubeadm — the upstream installer. It gives you plain Kubernetes and expects you to choose every add-on yourself.
  • RKE2 — a hardened distribution from the team behind k3s, aimed at compliance-heavy environments.
  • Talos Linux — an immutable operating system that exists only to run Kubernetes, managed entirely through an API with no SSH. Install it by mounting its ISO through the server's IPMI console.

On a small team, k3s or Talos usually wins: fewer moving parts to patch.

Load balancing: the piece the cloud was doing for you

On a cloud cluster, a Service of type LoadBalancer gets an external address in seconds. On bare metal it stays <pending> forever unless something answers for it. The options:

  • Ingress on every node, DNS in front. Run the ingress controller on each server's public address and publish all of them in DNS. Simple, and good enough for many web workloads, though DNS failover is slow.
  • MetalLB in layer 2 mode. MetalLB announces service addresses with ARP from whichever node holds them. It needs the extra addresses to be on the same network segment as the nodes, which depends on how your provider delivers additional IPs. If they are routed to one server's main address instead, layer 2 mode cannot move them.
  • MetalLB or kube-vip in BGP mode. The cleanest failover: nodes announce service addresses to the upstream routers, and traffic shifts within seconds when a node dies. It needs a BGP session with the provider and, ideally, address space of your own — announce your own IP space covers what that involves.

Ask your provider exactly how additional IPs are delivered before choosing. It decides which of these designs is possible.

Storage: local, replicated, or both

  • Local NVMe through a local-path provisioner is the fastest option and the simplest. The catch: a volume lives on one node, so its pod is pinned there, and the data dies with the node unless the application replicates it.
  • Longhorn replicates block volumes across nodes over the network. Easy to run, but every write crosses the network once per replica.
  • Rook with Ceph gives replicated block, file and object storage, and scales well. It wants at least three nodes, several drives in each, and fast networking: the hardware guides from Red Hat and Canonical both treat 10 Gbps as the minimum for production.

For databases, the best pattern is often neither replicated option: local NVMe volumes, with the database replicating itself through an operator such as CloudNativePG for PostgreSQL. You get local-disk speed, and failover the database understands.

Replicated storage traffic shares the port with your users. Three replicas of a busy volume can move more data between nodes than the application sends to the internet, which is the strongest argument for the 10 Gbps tier on storage-heavy clusters.

Networking and the parts to lock down

Pick a CNI by what you need. Flannel is simple and enough for many clusters; Calico and Cilium add network policies, and Cilium adds eBPF-based load balancing and observability.

Unless your servers share a private network, node-to-node traffic crosses public addresses. Encrypt it: Flannel, Calico and Cilium all offer a WireGuard mode, and it costs little on modern CPUs. Lower the pod MTU accordingly, or let the CNI do it.

Then close everything the internet does not need: the API server on 6443 only from your own addresses, and the kubelet on 10250 and etcd on 2379–2380 only from other nodes. A bare-metal cluster has no cloud security group in front of it; the host firewall is the security group.

A costed example

Three dual Xeon E5-2699 v4 servers — 88 threads and 256 GB of RAM each — cost €897 a month together on the 1 Gbps tier: 264 threads, 768 GB of memory and 3 Gbps of guaranteed, unmetered bandwidth. Moving the same three machines to 10 Gbps for storage replication and heavier traffic costs €2,247 a month.

For CPU-bound or memory-bandwidth-bound workloads, three dual EPYC 9254 servers (96 threads, 256 GB, 10 NVMe bays each) cost €2,037 a month at 1 Gbps. EPYC vs Xeon explains which of those two families suits which workload.

Frequently asked questions

Is Kubernetes on dedicated servers cheaper than managed Kubernetes?

For steady workloads with real traffic, usually by a wide margin, because compute costs less and egress is not metered. The saving is paid for in operations work: you run the control plane, load balancing and storage yourself.

How many dedicated servers do I need for Kubernetes?

Three, so etcd keeps a quorum when one server fails. Each can run both the control plane and workloads. Add workers as load grows.

Which Kubernetes distribution is best for bare metal?

k3s for the quickest path on a few servers, Talos Linux for an immutable, API-managed setup, and kubeadm if you want upstream Kubernetes and plan to choose every component yourself.

How do LoadBalancer services work on bare metal?

Something has to announce the service addresses. MetalLB does it with ARP in layer 2 mode or with BGP; kube-vip is an alternative. Which one works depends on how your provider routes additional IPs.

Can I mix VPS and dedicated servers in one cluster?

Yes. Small VPS instances make a good separate control plane, with dedicated servers as workers. Keep them in the same city, and encrypt node traffic if it crosses public addresses.

Tweaksv1
Theme