How do you run Kubernetes on-premises?

Running Kubernetes on-premises means installing it on physical servers or virtual machines you own and supplying the parts a cloud provider normally adds: a highly available control plane, load balancers, persistent storage, certificates, a container registry, upgrades and backups. You can build the cluster yourself with kubeadm, install a distribution such as k3s, RKE2, Talos Linux or OpenShift, or connect your servers to a managed control plane. The software is the same Kubernetes as in the cloud; the extra work is in everything around it.

What the cloud provides and on-premises does not

ComponentWhat you need on-premisesCommon tools
Control planeAt least three control plane nodes for high availabilitykubeadm, a distribution, or a managed control plane
etcdFast disks, an odd number of members, regular snapshots stored off the clusteretcdctl snapshot, distribution tooling
API endpointA virtual IP or load balancer in front of the API serverskeepalived and HAProxy, kube-vip
Service load balancersSomething that assigns and announces IPs for type: LoadBalancerMetalLB, Cilium, kube-vip, hardware load balancers
Persistent storageA CSI driver backed by local disks, replicated storage or a SANRook-Ceph, Longhorn, vendor CSI drivers
IngressA controller for HTTP routing and TLSGateway API or Ingress controllers, cert-manager
RegistryImage storage close to the nodes, mirrors for offline sitesHarbor, pull-through caches
Node operating systemPatching, kernel updates, hardeningImmutable operating systems, configuration management
ObservabilityMetrics, logs and alerts for nodes and the control planePrometheus, Grafana, log collectors
BackupsCluster state and persistent volumes, restorable elsewhereetcd snapshots, Velero

Two of these cause most first-week surprises. A Service of type LoadBalancer stays in pending until you install a load balancer implementation, which load balancing for bare-metal Kubernetes explains. Stateful workloads need a storage layer, compared in storage options for on-premises Kubernetes.

Steps to an on-premises cluster

  1. Choose the hardware layer. Decide between bare-metal servers and virtual machines on a hypervisor such as Proxmox VE or vSphere. Bare metal vs virtual machines covers the trade-offs.
  2. Size the control plane. The kubeadm documentation calls for a minimum of three control plane nodes for a highly available cluster. Three etcd members tolerate one failure, five tolerate two. The etcd hardware guide names fast disks as the most critical factor and recommends SSDs.
  3. Pick an installation method. See the next section.
  4. Set up networking. Install a CNI plugin, reserve an IP range for load balancer Services, and configure DNS for the API endpoint and applications.
  5. Add storage. Install a CSI driver and define storage classes for the volume types your applications need.
  6. Plan upgrades. Kubernetes ships about three minor releases a year, and each gets about 12 months of patch releases. An on-premises cluster has to move through minor versions one at a time to stay supported.
  7. Back up and test restores. Snapshot etcd and back up persistent volumes to a location outside the cluster, then restore into a test cluster to prove it works.

Ways to install Kubernetes on-premises

ApproachExamplesWho operates the control planeTrade-off
Upstream with kubeadmkubeadm plus your own add-onsYouFull control, every component is your choice and your responsibility
Lightweight distributionk3s, MicroK8sYouSmall footprint and a simple install; fits small clusters and edge sites
Enterprise distributionRKE2, OpenShift, Talos LinuxYou, with vendor tooling and optional supportOpinionated defaults and lifecycle tools, sometimes a subscription
Managed control plane with your own nodesEKS Hybrid Nodes and other services that accept your own nodesThe providerNo control plane to run; nodes need a network path to the provider

A Kubernetes distribution bundles Kubernetes with a tested set of add-ons and an upgrade path, which removes much of the integration work in the table above. A managed control plane removes the etcd, API server and upgrade work entirely, and leaves you with the nodes, storage and network on site. For a comparison of two AWS options, see EKS Anywhere vs EKS Hybrid Nodes.

Private cloud Kubernetes

“Private cloud Kubernetes” usually means the same setup with self-service on top: teams request clusters or namespaces through an API or portal instead of a ticket. That requires automation for node provisioning, either through a hypervisor’s API, a bare-metal provisioning tool such as Metal3, or infrastructure as code, so that adding capacity does not depend on manual installs.

How Cloudfleet fits

Cloudfleet Kubernetes Engine (CFKE) runs the control plane as a managed service, and you add your own Linux servers or virtual machines as nodes with the CLI, Terraform or cloud-init. Nodes connect outbound only, work behind NAT and need no inbound firewall rules. See self-managed nodes and the Proxmox tutorial.

On this page