Deploying Kubernetes on Bare Metal — End to End
The whole build in order, from racked hardware to running workloads: node baseline and containerd, an API-server VIP with kube-vip, a kubeadm HA control plane, CNI, workers, MetalLB and ingress, storage, an observability baseline, and the day-2 drills that decide whether the cluster survives. Real commands and manifests, not prose about them.
Overview
Every piece of this exists as its own topic. What does not exist anywhere — including on kubernetes.io — is the order, and the order is most of the difficulty. The docs are organised by concept; a build is organised by dependency. Get the sequence wrong and you discover it late: you cannot add a control-plane VIP after kubeadm init without regenerating certificates, and you cannot change a node's cgroup driver without rebuilding the node.
There is one fact that reframes the whole exercise, stated plainly in the kubeadm HA guide: a bare-metal kubeadm cluster does not support Service objects of type LoadBalancer, and does not support dynamic PersistentVolumes. On a cloud provider, the cloud-controller-manager supplies both. On bare metal there is no CCM, so a cluster that has completed kubeadm init and installed a CNI is *not yet usable* — every type: LoadBalancer Service sits in forever and every PVC stays Pending. Steps 7 and 8 below are not enhancements; they replace a component you do not have.
The second thing to internalise is that etcd is the cluster. Practitioner consensus, and the reason on-premises clusters most often go unstable, is disk latency: etcd is deliberately sensitive to it, and a leader that cannot fsync its Raft log in time loses leadership. Past a threshold that becomes a leader-election storm where no leader holds the lease long enough to make progress, and the visible symptom is kubectl hanging. Give etcd a dedicated SSD or NVMe device, never the OS disk. This is the single most common bare-metal HA mistake.
Work through the ten steps in order. Each links to the topic that covers its subject in depth; this one is the spine.
Sign up free to read the full topic
More DevOps topics
- Crossplane — Cloud Control Plane
- Dagger
- Data Observability
- Database Migrations in CI/CD
- Database Schema Evolution
- Debugging a Broken Alerting Pipeline
- Deployment Strategies
- Dev Containers & Reproducible Dev Environments
- Developer Experience Metrics
- Developer Productivity — SPACE Framework
- DevSecOps Architecture & Pipeline
- Distributed Tracing
Start free on Cariara · Coding problems · System design studio