Single-node Kubernetes·v1.2.1 release notes

Kubernetes, minus the cluster.

Anywhere you run Docker or Podman, run Kubernetes instead. KubeSolo strips out everything that only exists for multi-node clusters and keeps the full Kubernetes API.

$curl -sfL https://get.kubesolo.io | sudo sh -
memory
<200 MB RAM
kubernetes
v1.35
arch
x86_64, ARM64, ARMv7, RISC-V 64
libc
glibc or musl
install
online or offline
license
MIT
root@rpi-gate: ~
$ pstree kubesolo
kubesolo─┬─kube-apiserver
         ├─controller-manager
         ├─kubelet
         ├─kube-proxy
         ├─nodesetter      # replaces scheduler
         ├─kine──sqlite    # replaces etcd
         ├─containerd──crun
         └─coredns

# removed, not disabled
etcd  kube-scheduler  leader-election
overlay-networking  control-plane-ha

$ kubectl get nodes
NAME       STATUS   VERSION
rpi-gate   Ready    v1.35.7+kubesolo-v1.2.1

Where it runs

Anywhere one node is the whole deployment, and a cluster would be overhead you never use.

edge-gw-07Ready

Device and far edge

Industrial gateways, sensor aggregators, remote monitoring. Connectivity is intermittent and RAM is measured in megabytes.

intermittent network
line-3-gatewayReady

Factory floors and OT

Air-gapped ISA-95 workloads. The offline build embeds KubeSolo's system images, so it installs and runs with no cloud connection.

air-gapped
rpi-greenhouseReady

IoT and embedded

Raspberry Pis, ARM SBCs and embedded Linux boxes that ran Docker Compose. Upgrade the runtime, not the hardware.

ARM64 · ARMv7 · RISC-V 64
dev-laptopReady

Developer machines

Native on Linux with no VM. On macOS and Windows (WSL2), kubesoloctl runs it in a container on Docker.

linux · macOS · WSL2
branch-akl-01Ready

Remote and branch sites

Small offices, retail, field deployments. One node per site, run the same way as the rest of the fleet.

one node per site
kiosk-lobby-02Ready

Kiosks and appliances

Terminals, digital signage, point-of-sale. Managed containers on locked-down hardware.

Coming from Docker or Podman

The same image runs unchanged. What you gain is the Kubernetes API around it.

docker
$ docker run -d --name web \
    --restart unless-stopped \
    -p 8080:80 \
    nginx:1.27
Probes and limits
Restarts on a failed health check, not only on exit, and a memory cap per container.
Access control
RBAC, ServiceAccounts and namespace isolation.
Ecosystem
Helm, CRDs and operators, GitOps with Flux or Argo CD, Prometheus.
One format
The manifests you test are the ones you ship.
kubesolo · web.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  selector:
    matchLabels: {app: web}
  template:
    metadata:
      labels: {app: web}
    spec:
      containers:
      - name: web
        image: nginx:1.27  # same image
        ports: [{containerPort: 80}]
        livenessProbe:
          httpGet: {path: /, port: 80}
        resources:
          limits: {memory: 128Mi}
---
apiVersion: v1
kind: Service
metadata:
  name: web
spec:
  type: LoadBalancer  # node IP, like -p
  selector: {app: web}
  ports: [{port: 8080, targetPort: 80}]

KubeSolo, K3s and MicroK8s

K3s and MicroK8s slim down a multi-node design. KubeSolo starts from one node.

CapabilityKubeSoloK3sMicroK8sDocker / Podman
Full Kubernetes APIyesyesyesno
RAM footprint <200 MByespartlynoyes
Single-node designyespartlypartlyyes
x86_64, ARM64, ARMv7, RISC-V 64yesyesyesyes
Flash / constrained storageyespartlynopartly
Helm & CRDsyesyesyesno
No etcd, no quorumyesyesnoyes
Air-gapped installyesyespartlyyes
OCI imagesyesyesyesyes

More detail in the FAQ →

Get started

One command on Linux. kubesoloctl on macOS and Windows (WSL2).

Install

Installs the binary, writes /etc/kubesolo/config.yaml and starts KubeSolo under your init system (systemd, OpenRC, SysV, s6, runit or upstart). The installer stops if Docker is present.

linux
$ curl -sfL https://get.kubesolo.io | sudo sh -

On macOS or Windows (WSL2), download kubesoloctl from the releases page and run KubeSolo in a container. This needs Docker Desktop or Docker Engine.

macOS · Windows (WSL2)
$ kubesoloctl install --run-mode=container

Point kubectl at it

The installer merges the admin kubeconfig into ~/.kube/config if kubectl is on the node. From another machine, copy /var/lib/kubesolo/pki/admin/admin.kubeconfig.

kubectl
$ kubectl config use-context kubernetes-admin@kubesolo
$ kubectl get nodes
# one node, Ready

Deploy something

The Mosquitto example from the repo:

kubectl
$ kubectl apply -f https://raw.githubusercontent.com/portainer/kubesolo/develop/examples/mosquitto.yaml
$ kubectl get all -n mosquitto

Running many nodes? Portainer's Edge Agent connects a KubeSolo fleet to one control plane for GitOps deployments, RBAC and remote lifecycle management.

portainer.io →