Skip to main content

K3s (legacy)

Retired — kept as legacy reference

The K3s mini-server cluster has been retired. Production workloads now run on the Talos cluster on the Intel NUC hardware.

It was replaced for four reasons:

  • Immutability. Talos has no mutable base OS — drift between nodes is not just unlikely, it's impossible. K3s ran on whatever Linux distro the box happened to ship with, and that drift had to be managed manually.
  • API-driven. Talos is configured exclusively through talosctl over mTLS. No SSH, no shell, no apt-get-day inventory. K3s required maintaining a host-OS layer in addition to the cluster itself.
  • No base OS to care about. With K3s the box was also a Linux server — kernel updates, package upgrades, journald log rotation, fail2ban tuning, etc. With Talos all of that is built into the image and shipped as one atomic upgrade.
  • Streamlined upgrades. Talos upgrades are an image swap with one-command rollback. K3s upgrades meant the cluster and the OS, in two separate upgrade workflows.

The Athlon 3000G hardware is still documented under hardware/k3s for completeness; this page is kept as historical reference.

What ran here​

K3s is a single-binary CNCF-certified Kubernetes distribution from Rancher / SUSE. The retired homelab cluster ran K3s on three Inter-Tech / Biostar B450NH mini-servers — AMD Athlon 3000G nodes intended for low-power, always-on workloads.

K3s had a second, shorter life after that: from December 2024 the first Hetzner edge node ran K3s as the public entry point, until it was rebuilt as the single-node Talos edge cluster in October 2025 (see History). The group_vars/edge.yaml and host_vars/edge-1.yaml files under ansible/ are the leftovers of that era.

Why K3s was the choice at the time​

  • Single-binary install. Easy bootstrap on consumer-grade hardware.
  • Embedded etcd HA. Works on 3 nodes without an external datastore.
  • Small resource footprint. Comfortable on a 1 GB-RAM Athlon.
  • Different distro from prod on purpose. Until Talos took over, the homelab ran two distinct distributions to keep operator muscle memory honest.

Why it ultimately lost to Talos​

See the deprecation banner above. The summary: K3s was a fine distribution, but the homelab needed a node OS — and Talos is the node OS. Running K3s meant accepting an extra mutable layer underneath.

Bootstrap (historical)​

# First server (control-plane + etcd init)
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server --cluster-init \
--disable=traefik --flannel-backend=none --disable-kube-proxy" sh -

# Additional servers join with the cluster token
sudo cat /var/lib/rancher/k3s/server/node-token # on the first node
curl -sfL https://get.k3s.io | K3S_URL=https://<first>:6443 \
K3S_TOKEN=<token> INSTALL_K3S_EXEC="server" sh -

--disable=traefik and --flannel-backend=none --disable-kube-proxy switched off the bundled networking/ingress so Cilium could take over.

Where to look next​

  • Talos — the active cluster OS, and the reason this page exists in past tense
  • Hardware → K3s cluster — the physical mini-server hardware, also kept for reference