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

Example · bash
# 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 nodes

When 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.

Example · bash
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC='--write-kubeconfig-mode 644' sh -
kubectl get nodes -o wide

Ephemeral CI cluster setup

Starts k3s without enabling the systemd service, ideal for short-lived CI environments.

Example · bash
curl -sfL https://get.k3s.io | INSTALL_K3S_SKIP_ENABLE=true sh -
k3s server --disable traefik &
sleep 10 && kubectl get nodes

Label edge node by location

Applies a location label to an edge node so workloads can be scheduled with node affinity rules.

Example · bash
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

  • Be the first to comment on this lesson.
When to Use k3s — k3s | SoundsCode