When to Use k3s
k3s shines at the edge, on IoT devices, in CI pipelines, and on small single-purpose servers.
k3s was designed for places where a full Kubernetes cluster is too big or too costly to run.
Great fits
- Edge computing — a cluster running physically close to users or sensors.
- IoT and ARM devices — it runs happily on a Raspberry Pi.
- CI/CD — spin up a throwaway cluster in seconds to test manifests.
- Development — a realistic local cluster without the weight.
- Small production — a few nodes hosting an internal app or a personal project.
When to think twice
Very large clusters (hundreds of nodes) or environments that need specific vendor-managed control planes may be better served by a managed cloud Kubernetes. k3s can scale, but its sweet spot is small-to-medium.
Example
# A common edge pattern: one tiny server node per site
curl -sfL https://get.k3s.io | sh -
# Minutes later you have a working cluster on that box
sudo k3s kubectl get nodesWhen to use it
- A factory floor uses k3s on an ARM server to run computer-vision inference pods that process camera feeds locally without cloud round-trips.
- A GitLab CI pipeline spins up a disposable k3s cluster per merge request to run integration tests against a real Kubernetes API.
- A remote weather station deploys k3s on a solar-powered NUC to collect, buffer, and sync sensor data pods periodically.
More examples
Run k3s on a Raspberry Pi
Installs k3s on ARM hardware and exposes the kubeconfig so unprivileged users can run kubectl.
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC='--write-kubeconfig-mode 644' sh -
kubectl get nodes -o wideEphemeral CI cluster setup
Starts k3s without enabling the systemd service, ideal for short-lived CI environments.
curl -sfL https://get.k3s.io | INSTALL_K3S_SKIP_ENABLE=true sh -
k3s server --disable traefik &
sleep 10 && kubectl get nodesLabel edge node by location
Applies a location label to an edge node so workloads can be scheduled with node affinity rules.
NODE=$(kubectl get nodes -o jsonpath='{.items[0].metadata.name}')
kubectl label node $NODE topology.kubernetes.io/zone=factory-floor-a
kubectl get node --show-labels
Discussion