kulti

k3s clusters on local hypervisors — create, manage, delete

"No one ever asked me to make a CLI tool that could enable creating multiple, disposable, multi-node k3s clusters with real VM isolation, so that I would be able to quickly launch custom CNIs to a local k3s cluster. If someone did, I would tell them about kulti." — zpallin

kulti wraps Multipass VM provisioning and k3s installation into a single CLI tool. Spin up real multi-node clusters for local development and network testing — no cloud required. Swap CNIs, just for fun.

Similar to Minikube, MicroK8s, Kind, K3d, and Rancher Desktop.

kulti cluster lifecycle: create, run operations, delete

Requirements

multipass kubectl helm helm required only for Helm-based CNIs

Install

macOS — Homebrew
brew tap zpallin/kulti
brew install kulti
Linux — curl
curl -sSL https://gitlab.com/zpallin/kulti/-/raw/main/install.sh | bash
Go install
go install zpallin.com/kulti/cmd/kulti@latest

Quick Start

bash
# Create a 3-node cluster with Cilium
kulti create mycluster --workers 2 --cni cilium

# Merge kubeconfig and start using it
kulti kubeconfig get mycluster --merge
kubectl get nodes

# Swap CNI without recreating the cluster
kulti cni swap mycluster --cni calico

# List and describe
kulti list
kulti describe mycluster

# Done — clean up
kulti delete mycluster
kulti cni swap: replace a CNI on a live cluster without recreation

Supported CNIs

--cni <value>
embedded           k3s built-in flannel (default)
flannel            standalone flannel
calico             tigera-operator
cilium             helm-based
none               bring your own

# Custom sources also work
https://...         remote manifest
file:///path/...    local manifest
helm://repo/chart   helm install