TL;DR:
- K3s is the most widely deployed choice for resource-constrained edge nodes — minimal footprint, production-grade, and straightforward to manage
- MicroK8s is the better pick for single-node and developer environments, with optional addon ecosystem and snap-based installation
- KubeEdge is the right choice when you have thousands of nodes with intermittent connectivity and need a Kubernetes control plane that can tolerate offline edge devices
Running Kubernetes at the edge is a different problem from running it in a cloud data centre. Your nodes may have 1-2GB of RAM. Network connectivity may be unreliable or expensive. You may be managing hundreds or thousands of geographically distributed devices rather than a handful of rack servers. And you often can’t afford the operational overhead of a full Kubernetes setup on hardware that costs less than the monthly bill for a single cloud VM.
Three projects have emerged as the main options for teams that want Kubernetes semantics without the full Kubernetes overhead: K3s, MicroK8s, and KubeEdge. Each is optimised for a different version of the “edge” problem.
K3s: The Production Standard for Constrained Nodes
K3s is a CNCF project from Rancher (now SUSE) that packages a fully conformant Kubernetes distribution in a single binary under 100MB. It replaces etcd with SQLite by default (or PostgreSQL/MySQL for HA deployments), removes cloud-provider-specific code and alpha features, and bundles containerd, CoreDNS, Traefik, and a service load balancer. The result runs in under 512MB of RAM on a single node.
Minimum requirements: 512MB RAM, 1 CPU core. Runs on ARMv7, ARM64, and x86_64. Commonly deployed on Raspberry Pi, Jetson Nano, and industrial edge gateways.
Install on a new edge node:
# Agent node setup
curl -sfL https://get.k3s.io | sh -
# Connect to an existing cluster
curl -sfL https://get.k3s.io | K3S_URL=https://server-ip:6443 \
K3S_TOKEN=your-cluster-token sh -
K3s manages the same workload primitives as full Kubernetes — Deployments, DaemonSets, StatefulSets, CronJobs, Services — which means your existing Kubernetes manifests and Helm charts work without modification. This compatibility is K3s’s strongest selling point for teams already invested in Kubernetes tooling.
Where K3s works best: edge sites with 1-20 nodes, reliable-enough network connectivity to the control plane, and where you want to manage edge workloads with the same tools as your cloud clusters. Factory floors, retail locations, remote offices, and edge data centres.
Where K3s struggles: extremely resource-constrained devices (under 256MB RAM), massive fleets of geographically scattered nodes where maintaining network connectivity to a central control plane isn’t practical, and scenarios where workloads need to continue operating during extended disconnections from the control plane.
MicroK8s: Best for Single-Node and Developer Use
MicroK8s is Canonical’s lightweight Kubernetes, distributed as a snap package. It’s designed to install in under a minute and get a developer or small team to a working Kubernetes environment quickly. The snap packaging means automatic updates and clean install/uninstall, which is attractive for environments where you want managed upgrades without manual patching.
Install:
sudo snap install microk8s --classic --channel=1.30/stable
sudo usermod -a -G microk8s $USER
sudo microk8s status --wait-ready
Enable addons (this is MicroK8s’s distinctive feature):
microk8s enable dns storage ingress prometheus
microk8s enable gpu # For NVIDIA GPU support
microk8s enable metallb # For bare metal load balancing
The addon system makes it easy to bring up monitoring, ingress, storage, and GPU support without manual Helm chart installation. For development and testing environments, this is genuinely convenient.
MicroK8s supports multi-node clusters, but its sweet spot is single-node edge deployments — an industrial PC at a manufacturing site, a media server at a retail location, or a development machine. For larger multi-node edge deployments, K3s’s operational model scales better.
Where MicroK8s works best: single-node production deployments on Ubuntu/Debian hardware where snap packaging is acceptable, developer environments where you want a quick local Kubernetes, and small edge deployments where the addon ecosystem adds value.
KubeEdge: Purpose-Built for Massive IoT Fleets
KubeEdge is a CNCF graduated project designed from the ground up for the specific problem of managing thousands of edge devices with unreliable connectivity. It splits the Kubernetes control plane into a cloud component (CloudCore) and an edge component (EdgeCore) that runs on each device. The critical difference from K3s and MicroK8s: EdgeCore continues to run workloads even when the network connection to CloudCore is severed.
This autonomy property makes KubeEdge the right choice for true IoT-at-scale deployments where edge devices may be offline for hours at a time — smart street lights, agricultural sensors, remote industrial equipment — and you cannot accept workload failure during connectivity gaps.
Architecture overview:
Cloud Edge
-------- --------
Kubernetes API Server <--> CloudCore (beehive message bus)
CloudCore <--> EdgeCore (MQTT broker, edged, metamanager)
|
Containerized edge workloads
EdgeCore runs a stripped-down Kubelet called edged that has been optimised for constrained hardware. It communicates with CloudCore over a WebSocket connection and caches the desired state locally, so it can continue enforcing workload specs when offline.
Minimum requirements for EdgeCore: 256MB RAM, 1 CPU. KubeEdge officially supports ARMv7, ARM64, and x86_64.
Scale: CNCF case studies have documented KubeEdge deployments at tens of thousands of edge nodes — traffic monitoring infrastructure, smart city deployments, manufacturing floor sensors. At that scale, the offline tolerance and lightweight edge agent are essential.
Where KubeEdge works best: IoT deployments at hundreds to thousands of nodes, devices with intermittent or expensive network connectivity, use cases where workload continuity during disconnection is a hard requirement, and teams comfortable with a more complex two-component architecture.
Where KubeEdge is overkill: deployments under ~50 nodes with reliable connectivity, teams who don’t need the offline autonomy feature, and situations where the two-component CloudCore/EdgeCore architecture adds operational complexity without benefit.
Choosing Between Them
| Criterion | K3s | MicroK8s | KubeEdge |
|---|---|---|---|
| Min RAM | 512MB | 512MB | 256MB (EdgeCore) |
| Multi-node | Yes | Limited | Yes (thousands) |
| Offline resilience | No | No | Yes |
| K8s compatibility | Full | Full | Full (CNCF certified) |
| Best for | 1-20 node sites | Single node / dev | Massive IoT fleets |
| Operational complexity | Low | Very low | High |
The decision usually comes down to two questions: how many nodes, and how reliable is your connectivity?
For most edge teams — a handful to a few dozen nodes, reasonable connectivity — K3s is the right default. It’s the most operationally straightforward, has the broadest community and tooling support, and its compatibility with standard Kubernetes means your DevOps processes transfer without adaptation.
For pure single-node deployments where you want the quickest path to Kubernetes and prefer snap-managed updates, MicroK8s is hard to beat on simplicity.
For true IoT-at-scale where you’re managing geographically scattered devices that will absolutely go offline, KubeEdge is the only option that directly solves the offline continuity problem. Accept the operational overhead; it’s the cost of the capability.
All three are production-grade, actively maintained, and CNCF-affiliated. The choice is about which constraints you’re optimising for, not which is better in the abstract.