Step 1: Prepare your system
Install a modern Linux distribution on your device. Ensure the following prerequisites are in place before running the installer. On macOS or Windows, skip to kubesoloctl.
xt_comment; plus nftables on Alpine- and .Step 2: Install KubeSolo
Run the install script. It detects your architecture, libc and init system, installs the KubeSolo binary, writes /etc/kubesolo/config.yaml, and starts KubeSolo as a service.
To follow progress on systemd hosts, check the service logs. On other init systems, the installer prints where the logs are.
The admin kubeconfig is written to /var/lib/kubesolo/pki/admin/admin.kubeconfig.
Online, offline and air-gapped
The default online build pulls some system images when it first starts. For sites without reliable internet, install the offline build, which embeds them:
For a machine with no internet at all, prepare a bundle on a connected machine and install from it. See air-gapped installation.
Installer flags and versions
Pass options after sh -s --. Pin the version in automation so every device gets the same build:
The installer records your options in /etc/kubesolo/config.yaml, and KubeSolo reads that file every time it starts. Every option is listed in installer flags.
Portainer integration (optional)
To install KubeSolo and connect it to a Portainer server in one step, pass your Edge credentials as environment variables:
Alternative: kubesoloctl (Linux, macOS, Windows WSL2)
kubesoloctl is a single CLI for install, upgrade, reset and uninstall. On Linux it installs KubeSolo as a service. On macOS and Windows (WSL2), its container mode runs KubeSolo in a Docker container for development and CI. Download it from the releases page (kubesoloctl-<os>-<arch>), then:
Both merge the admin kubeconfig into ~/.kube/config for you.
Step 3: Confirm it's working
On the node
If kubectl was installed on the node before you ran the installer, the installer already merged the admin kubeconfig into ~/.kube/config for your user. Otherwise, point kubectl at it directly:
From another machine
Copy /var/lib/kubesolo/pki/admin/admin.kubeconfig to the machine where kubectl is installed. It is readable by root only, so copy it with sudo. Then use it for the current shell without touching your existing configuration:
Or merge it permanently into your existing kubeconfig:
The kubeconfig points at https://<node IP>:6443. If the node has several network interfaces, pin the address KubeSolo uses with network.nodeIP. If you reach the node through a hostname, NAT or another address, add it with --apiserver-extra-sans at install time, or kubernetes.apiServer.extraSANs later, and edit the server: line to match. See node IP.
Verify node status
Step 4: Deploy your first workload
Start with the Mosquitto example from the KubeSolo repository:
The example exposes MQTT on port 1883 through a NodePort Service. Reach it on the node's IP and the NodePort shown by kubectl get svc. To expose a service on its own port, use a LoadBalancer Service.
Step 5: Change settings later
You do not need to reinstall to change a setting. Edit /etc/kubesolo/config.yaml, or use kubesoloctl, then restart KubeSolo:
Every setting is listed in the configuration reference.
Uninstall
The uninstall script removes KubeSolo, its service and its configuration file, and keeps the data directory:
With kubesoloctl, which also removes container-mode instances:
For options such as --remove-data and --remove-kubeconfig, run the script locally. See uninstalling.