Cloud Parts

K3s

A certified Kubernetes distribution in one small binary, built for edge, IoT and other places where a full cluster is too heavy, with SQLite or embedded etcd for state.

Type
Open source
Made by
K3s project, a CNCF sandbox project; created by Rancher Labs, now maintained mainly by SUSE
License
Apache 2.0
Facts checked
6 October 2026

What it is

K3s is a complete Kubernetes distribution in a single binary of under 100 MB. Run k3s server and one process starts the API server, scheduler, controller manager, kubelet and kube-proxy, along with containerd, Flannel networking, CoreDNS, the Traefik ingress controller, a ServiceLB load balancer, a network-policy controller and local-path storage. Run k3s agent with the server’s address and a join token on another machine and it becomes a worker: it runs the kubelet, container runtime and networking, but no datastore or control plane. The host needs little more than a modern Linux kernel and cgroup mounts: 2 cores and 2 GB of RAM for a server, 1 core and 512 MB for an agent.

Its biggest departure from upstream is where cluster state lives. A single server keeps it in an embedded SQLite file through kine (“Kine is not etcd”), a shim that translates the etcd API calls Kubernetes makes into SQL. For high availability, three or more servers form an embedded etcd cluster, or two or more share an external PostgreSQL, MySQL, MariaDB or etcd. The project describes K3s as “a highly available, certified Kubernetes distribution designed for production workloads in unattended, resource-constrained, remote locations or inside IoT appliances”, which sets it apart from kind and minikube, built for tests and laptops. Rancher Labs released it in 2019, SUSE bought Rancher in 2020, and K3s has been a CNCF sandbox project since August 2020; its application to move up to incubation, filed in November 2025, is still open.

Why teams pick it

  • One binary and an install script give a working node in about 30 seconds, with ingress, load balancing, DNS and storage already included
  • Small enough for a Raspberry Pi, with ARM64 and ARMv7 builds; at launch a single-node cluster used about a quarter of the memory of upstream Kubernetes
  • A choice of datastore: SQLite for one server, embedded etcd for HA without a separate database, or a SQL database you already run
  • Follows upstream closely: v1.37.0+k3s1 shipped in September 2026, and patch releases for four minor versions came out the same day at month’s end

Watch out for

  • SQLite can’t serve more than one server; going HA means restarting with --cluster-init to convert to embedded etcd, which can be slow on SD cards
  • Opinionated defaults: Traefik, ServiceLB and the rest run unless you pass --disable, and with every component in one process you can’t set separate log levels or destinations per component
  • Linux only: there is no native Windows support
  • External databases must support prepared statements (connection poolers such as PgBouncer need extra configuration), and multi-master setups such as Galera aren’t supported

More of the Kubernetes family

What all container orchestration have in common →
MicroK8sOpen sourceDistributionsCanonical’s Kubernetes in one snap package: installs with one command on Linux, forms a highly available cluster by itself at three nodes, and adds features as addons.Red Hat OpenShiftCommercialDistributionsRed Hat’s Kubernetes platform: Kubernetes plus its own OS, operators that install and upgrade everything, and stricter security defaults, sold by subscription.RKE2Open sourceDistributionsSUSE’s security-focused Kubernetes distribution: one binary per node, hardened defaults, FIPS-validated crypto and close alignment with upstream.Talos LinuxOpen sourceDistributionsA Linux distribution that only runs Kubernetes: immutable, minimal, with no shell or SSH, and managed entirely through an API.Amazon EKSAWSManaged servicesAWS runs the Kubernetes control plane for you; you choose how much of the worker side to hand over too.Azure Kubernetes ServiceAzureManaged servicesMicrosoft’s managed Kubernetes: a control plane that can be free, node pools of Azure VMs, and an Automatic mode that runs the nodes too.Google Kubernetes EngineGoogle CloudManaged servicesGoogle’s managed Kubernetes, the oldest one: Google runs the control plane, and in Autopilot mode the nodes too.kindOpen sourceFor local developmentKubernetes IN Docker: each cluster node is a container, so a conformant multi-node cluster starts and disappears inside a CI job.minikubeOpen sourceFor local developmentA local Kubernetes cluster for developers on Linux, macOS or Windows, in a container, a VM or on the host itself, with laptop-friendly extras.kubeadmOpen sourceToolsThe official tool for turning Linux machines you already have into a Kubernetes cluster: `kubeadm init`, then `kubeadm join`.RancherOpen sourceToolsSUSE’s open-source control plane for fleets of Kubernetes clusters: one place to create, import, secure and upgrade them.AgonesOpen sourceBuilt on itRuns dedicated multiplayer game servers on Kubernetes: keeps a fleet of them warm, hands one to each match, and never kills a server while players are on it.KlutchOpen sourceBuilt on itA young open-source control plane, built on Crossplane, that lets many application clusters order databases from one central Kubernetes cluster.

How it fits with other technologies

A three-server HA cluster on embedded etcd, plus one agent · bash

# first server: start a new embedded etcd cluster
curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - server --cluster-init

# second and third servers join it (keep an odd number of servers)
curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - server \
  --server https://server1:6443

# agents run workloads only: no datastore, no control plane
curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - agent \
  --server https://server1:6443

sudo k3s kubectl get nodes    # servers show roles control-plane,etcd

Where K3s keeps cluster state#

DatastoreServersSuits
Embedded SQLite (default)Exactly oneShort-lived CI clusters, single edge boxes
Embedded etcdThree or more, an odd numberHA at the edge without running a separate database
External PostgreSQL, MySQL or MariaDB (via kine)Two or moreTeams that know SQL databases better than etcd
External etcdTwo or moreTeams that already operate etcd
  • K3s picks embedded etcd automatically if etcd data is already on disk or a server is told to start or join an etcd cluster; otherwise, with no datastore configured, it uses SQLite.

See it in a real stack

No architecture uses K3s yet. Drop it into the playground and wire it up yourself.Open playground →

Worth exploring

ArticleKubernetes in a microVMsmol machines docsThe vendor’s own guide to two ways of combining Kubernetes with microVMs: a containerd shim and RuntimeClass that start each pod as its own VM (marked experimental, with its known blockers listed), or a whole k3s cluster, through k3d, inside one VM. Useful for the concrete details, such as per-pod overhead, the /dev/kmsg device the kubelet needs and why Docker’s storage must sit on ext4, but written to sell smolvm.
All resources →
Where it came from2018–2026

K3s began inside Rio, an experimental Rancher Labs project for running applications on Kubernetes. Rio embedded a full cluster, and to cut its memory use the team removed every feature it didn’t need. They noticed three things: the stripped-down cluster had become the simplest way they knew to run Kubernetes at all; customers, such as companies with many retail stores, wanted a cluster in each location rather than in the cloud; and people who found the component wanted a lighter Kubernetes that ran easily on ARM.

Rancher announced K3s as its own open-source project on February 26, 2019: a roughly 40 MB binary bundling the container runtime and host utilities, with the Kubernetes components combined into server and agent processes. Removing legacy and alpha features made the biggest difference: a single-node cluster used a little over 260 MiB, against a little over 1 GiB for upstream Kubernetes 1.13.3 with Docker. The name is a joke on size: Kubernetes is a 10-letter word written K8s, so something half as big is a 5-letter word written K3s, with no long form.

Version 1.0 followed in November 2019, and K3s joined the CNCF sandbox in August 2020. Its first HA mode, built on dqlite, was replaced that September by embedded etcd, which became stable in December. SUSE completed its acquisition of Rancher Labs on December 1, 2020, and SUSE engineers are the project’s contacts in its 2025 CNCF incubation application.

Why it’s built this way

One binary, one process
Folding the control plane into a single process removes moving parts and lets K3s automate jobs such as distributing certificates. The only outside dependencies are the kernel and cgroup mounts, which suits unattended machines.
SQL through kine instead of mandatory etcd
etcd is another cluster to run. A short-lived CI cluster or a single edge box is simpler with an embedded SQLite file, and teams without etcd expertise can point K3s at MySQL or PostgreSQL instead.
etcd, not dqlite, for HA
In 2020 the team switched “to leverage the existing effort and knowledge that has gone into operating Kubernetes with etcd”, which also brought etcd snapshots and restores. Existing dqlite clusters had no upgrade path.
Batteries included
K3s packages ingress, a service load balancer, DNS and local storage for “batteries-included” cluster creation, so a cluster on bare hardware can route traffic and store data without a cloud provider or extra installs.

Timeline

  1. 2018

    Starts as an embedded component of Rancher’s Rio project

  2. 2019

    Announced on February 26; version 1.0 in November

  3. 2020

    CNCF sandbox in August; embedded etcd replaces dqlite; SUSE buys Rancher in December

  4. 2025

    Applies to the CNCF for incubation in November

  5. 2026

    v1.37.0+k3s1 in September

Sources13 · facts checked 6 October 2026

Improve this page on GitHub