Containers / Orchestration

K3s vs Kubernetes (kubeadm)

Run K3s. For a homelab this one is not close: K3s is a CNCF-certified Kubernetes distribution packed into a single binary under 100 MB, it installs in about 30 seconds, and it idles at a fraction of what a kubeadm control plane eats. Full Kubernetes bootstrapped with kubeadm gives you the exact same API and kubectl experience while demanding more RAM, more setup, and ongoing etcd and certificate babysitting. The only honest reason to run kubeadm at home is deliberate practice for the CKA exam or for a job where you operate kubeadm clusters. Even then, the smart move is K3s as your daily driver plus a throwaway kubeadm cluster in VMs for drills.

Updated 2026-07-01 · by

Side by side

K3sKubernetes (kubeadm)
What it isCNCF-certified Kubernetes distribution from Rancher (SUSE), donated to CNCF in 2020Upstream Kubernetes bootstrapped with the official kubeadm tool
Install footprintSingle binary under 100 MB (roughly 70 MB), one process for the whole control planekubeadm, kubelet, and kubectl packages plus a container runtime you install and configure yourself
Minimum hardware (official)Server: 2 CPU / 2 GB RAM. Agents: 1 CPU / 512 MB RAM2 CPU / 2 GB RAM per machine minimum; a control plane is only comfortable at 2 CPU / 4 GB
Default datastoreSQLite (via kine); embedded etcd, MySQL, or Postgres optionaletcd, running as a static pod, no alternatives
Bundled componentscontainerd, Flannel CNI, CoreDNS, Traefik ingress, ServiceLB, local-path-provisioner, metrics-serverNone. You choose and install your own CNI, ingress, load balancer, and storage provisioner
Install timecurl -sfL https://get.k3s.io | sh - and you have a cluster in about 30 seconds30 to 60 minutes the first time: runtime, swap off, sysctls, kubeadm init, CNI, join tokens
Upgrade processRerun the installer or swap the binary; system-upgrade-controller automates fleetskubeadm upgrade plan/apply on each node, one minor version at a time, drain and uncordon every node
Current version (mid-2026)v1.36.2+k3s1, tracking upstream releases within weeksv1.36.x, the reference implementation
Kubernetes conformanceFully CNCF conformant; kubectl, YAML, and Helm charts behave identicallyIt is the standard everything else is measured against

What K3s Strips Out (and Why You Will Not Miss It)

K3s is not a fork or a toy. It passes the same CNCF conformance tests as upstream Kubernetes. What Rancher's engineers did was remove things a small cluster never touches: legacy and alpha features that are off by default anyway, the old in-tree cloud provider code for AWS, GCP, and Azure, and the in-tree storage drivers those clouds needed. Then they wrapped the API server, controller manager, scheduler, and kubelet into one binary that runs as one process. The result is under 100 MB on disk, and a fresh single-node server idles around 500 to 600 MB of RAM instead of the 1 to 1.5 GB a kubeadm control plane with etcd burns before you deploy a single pod.

The clever part is the datastore. Instead of requiring etcd, K3s ships kine, a shim that translates etcd API calls to SQLite by default. On a single node this means no etcd cluster to feed, no quorum to worry about, and no watching etcd chew through your Raspberry Pi's SD card (etcd's write-heavy IO genuinely kills SD cards, the K3s docs warn about it directly). When you want a real 3-server HA cluster later, start the first node with --cluster-init and K3s runs embedded etcd for you, snapshots included via k3s etcd-snapshot save.

K3s also bundles the boring decisions: containerd as the runtime, Flannel for networking, CoreDNS, Traefik as ingress, ServiceLB so LoadBalancer services just work on bare metal, and local-path-provisioner so PersistentVolumeClaims bind without any storage setup. Every one of these is swappable. Do not like Traefik? Install with --disable traefik and drop in ingress-nginx. You get working defaults on day one and full control on day thirty.

What Running kubeadm Actually Looks Like

kubeadm is the official bootstrapper, and it hides nothing. Before you even run kubeadm init you install a container runtime (containerd or CRI-O), disable swap, set kernel modules and sysctls, and install the kubeadm, kubelet, and kubectl packages on every node. Then init pulls the control plane images and launches kube-apiserver, kube-controller-manager, kube-scheduler, and etcd as separate static pods from /etc/kubernetes/manifests. Your cluster is still not functional at that point: nodes stay NotReady until you install a CNI plugin yourself. Budget 30 to 60 minutes the first time, and expect to troubleshoot at least one of swap, cgroups, or the CNI.

The ongoing cost is where kubeadm really diverges from K3s. Upgrades are a per-node ritual: kubeadm upgrade plan, upgrade apply on the control plane, then for each worker drain it, SSH in, upgrade kubeadm, run kubeadm upgrade node, upgrade kubelet and kubectl, restart, uncordon. One minor version at a time, no skipping. Certificates default to one-year validity, so a homelab cluster you ignore for 13 months greets you with x509 errors until you run kubeadm certs renew all and bounce the control plane. None of this is hard, but all of it is homework K3s does for you.

There is real educational value in that homework. Watching etcd fall over when it loses quorum, reading static pod manifests, and tracing why the scheduler will not place a pod teaches you how the machine works in a way K3s's single tidy process does not. The question is whether you want that lesson permanently attached to the cluster running your Jellyfin and Home Assistant. You do not.

The Learning-for-Work Argument

The strongest case for kubeadm at home is career prep, so let us be precise about what transfers. Everything above the cluster bootstrap layer is identical: kubectl, Deployments, Services, Ingress, RBAC, NetworkPolicies, Helm, GitOps with Flux or Argo CD. If you run K3s for a year you are running real Kubernetes for a year, and that experience is legitimate on a resume. Nobody interviewing you for a platform role asks which installer laid down your API server.

What does not transfer from K3s: the kubeadm upgrade choreography, managing standalone etcd with etcdctl, static pod manifest debugging in /etc/kubernetes/manifests, and manual PKI work. Those show up in two places: shops that run self-managed clusters on bare metal or VMs, and the CKA exam. Most companies are on EKS, AKS, or GKE, where the control plane is the cloud provider's problem and your kubeadm knowledge sits unused anyway.

So the practical split is this: K3s as the permanent cluster that runs your actual services, and a disposable kubeadm cluster (three VMs on Proxmox, 2 vCPU and 4 GB each) that you build, break, upgrade, and delete when you are studying. Building that kubeadm cluster from scratch three or four times teaches you more than keeping it alive for a year would. If you are still deciding whether Kubernetes belongs in your homelab at all, our Kubernetes vs Docker Swarm comparison covers that fight.

CKA Prep: Does K3s Knowledge Transfer?

Mostly yes, with specific gaps you must close. The CKA exam runs on kubeadm-built clusters tracking recent stable releases (v1.35/v1.36 territory in 2026), and roughly 80 percent of the tasks are pure kubectl and YAML work that behaves identically on K3s: troubleshooting workloads, RBAC, NetworkPolicies, Gateway API, storage objects, node maintenance. Daily driving K3s builds exactly the muscle memory those questions grade.

The gaps are the infrastructure tasks. The cluster upgrade question is one of the highest-point items on the exam and it is pure kubeadm procedure: upgrade plan, apply, drain, per-node kubelet upgrades, uncordon, verify. The etcd backup and restore task expects etcdctl snapshot save and restore against a standalone etcd static pod, with cert paths pulled from the manifest. K3s hides both flows behind its own commands (k3s etcd-snapshot, rerun-the-installer upgrades), so K3s-only experience leaves points on the table. Static pod behavior and /etc/kubernetes/manifests paths also differ.

The fix is cheap: two or three kubeadm VMs and a weekend of drills. Run the upgrade procedure until it takes you under 15 minutes, do etcdctl backup and restore five times, and you have covered everything K3s did not teach you. That is a far better trade than suffering kubeadm operations year-round for a handful of exam tasks.

Where K3s wins

  • Single binary under 100 MB installs a working cluster in about 30 seconds
  • Server runs in 2 GB of RAM, agents in 512 MB, genuinely Raspberry Pi friendly
  • SQLite default datastore eliminates etcd care and feeding on small clusters
  • Batteries included: Traefik, ServiceLB, local-path-provisioner, CoreDNS, metrics-server, all removable with --disable flags
  • Fully CNCF conformant, so kubectl skills, Helm charts, and manifests transfer 1:1
  • Embedded etcd HA and built-in snapshot command when you outgrow a single node

Where Kubernetes (kubeadm) wins

  • The exact stack the CKA exam and self-managed production clusters run
  • Teaches real architecture: apiserver, scheduler, controller-manager, and etcd as separate static pods you can inspect and break
  • No bundled opinions; you pick your own CNI, ingress, storage, and load balancer
  • kubeadm upgrade and certificate workflows match what employers with bare-metal clusters actually do
  • Reference implementation, so new Kubernetes features land here first with zero distro lag
  • Every failure mode is visible, which is miserable in production and excellent for learning

Which to pick, by situation

Your situationPickWhy
Raspberry Pi or mini PC cluster running self-hosted servicesK3sAgents run in 512 MB of RAM, the SQLite datastore will not shred SD cards like etcd does, and Traefik plus ServiceLB plus local-path storage means services are reachable on day one.
Studying for the CKA in the next few monthsKubernetes (kubeadm)The exam runs kubeadm clusters, and the highest-point tasks (kubeadm upgrades, etcdctl backup and restore) do not exist in K3s. Build a 3-VM practice cluster and drill the procedures.
Single node that just needs to run your apps reliablyK3sOne binary, one process, about 600 MB idle, no etcd, no certificate expiry surprises. A kubeadm control plane on the same box wastes 1 GB+ of RAM proving a point.
Practicing for a platform job that runs self-managed bare-metal clustersKubernetes (kubeadm)Component separation, standalone etcd, PKI, and upgrade choreography are the actual job. Breaking and rebuilding kubeadm clusters in VMs is the closest homelab simulation of it.
3-node HA cluster on mini PCs for learning real multi-master KubernetesK3sk3s server --cluster-init gives you embedded etcd with quorum, built-in snapshots, and HA semantics that match upstream, without hand-managing etcd or load-balancing the API server yourself.
GitOps playground for Flux or Argo CD and Helm experimentsK3sGitOps tooling only talks to the Kubernetes API, which is identical. K3s gets you to the interesting part in 30 seconds instead of an hour of bootstrap yak-shaving.

The verdict

K3s wins for homelabs, and it is not a judgment call. You get certified, conformant Kubernetes with the same API, the same kubectl, and the same ecosystem, delivered in one binary that installs in 30 seconds and leaves a gigabyte more RAM for the workloads you built the lab to run. Full kubeadm Kubernetes offers nothing extra for running services at home; it offers ceremony, and the ceremony is only valuable when it is the thing you are studying. So run K3s as your permanent cluster, and when the CKA or a bare-metal job is on the horizon, spin up three kubeadm VMs, drill the upgrade and etcd tasks until they are boring, then delete them. Keeping kubeadm as your daily homelab cluster is paying production tax on a hobby.

Choose K3s if you want real Kubernetes running your homelab services with the least RAM, disk, and maintenance overhead, on anything from a Pi to a 3-node HA mini PC cluster

Choose Kubernetes (kubeadm) if you are actively drilling for the CKA or a job operating self-managed clusters, and you want a disposable practice environment that matches production bootstrap, upgrade, and etcd procedures

Official links

FAQ

Is K3s real Kubernetes or a stripped-down clone?

Real Kubernetes. K3s passes the CNCF conformance suite, so every kubectl command, manifest, and Helm chart behaves the same. What it removes is code homelabs never execute: legacy alpha features and in-tree cloud provider integrations. It adds a kine shim so SQLite can replace etcd on small clusters.

Does K3s experience count toward the CKA?

About 80 percent of it transfers directly since most exam tasks are kubectl and YAML on a conformant cluster. The gaps are kubeadm cluster upgrades and etcdctl backup and restore, which K3s replaces with its own tooling. Drill those two procedures on throwaway kubeadm VMs and you are covered.

How much RAM does each actually use at idle?

A fresh single-node K3s server idles around 500 to 600 MB. A kubeadm control plane with etcd typically sits between 1 and 1.5 GB before any workloads. On a 8 or 16 GB mini PC that difference is real capacity for your actual services.

Can K3s do multi-node HA, or is it single-node only?

Full HA. Start the first server with --cluster-init and join two more servers, and K3s runs embedded etcd with proper quorum across three nodes. It also supports external MySQL or Postgres as the datastore, plus agents in the hundreds. Single-node SQLite is just the default, not the ceiling.

I do not like Traefik. Am I stuck with it?

No. Install with --disable traefik (same for servicelb or local-storage) and deploy ingress-nginx, MetalLB, or Longhorn instead. The bundles are conveniences, not requirements, which is exactly the right default for a homelab.

Related on HomelabCompass

← All comparisons