Getting Started

kcl (Kubernetes Cluster Launcher) creates a ready-to-use Kubernetes cluster on a VPS — either one it provisions for you, or one you already have.

Install CLI

curl -sfL https://get.kcl.wolke.host | sh

Create a Cluster

There are two ways to create a cluster, depending on whether you want kcl to provision the server for you or you already have one.

Option A: Let kcl provision a server

kcl creates the VPS, installs Kubernetes, and bootstraps it in one step. Requires the HCLOUD_TOKEN environment variable, set to a valid Hetzner Cloud API token.

export HCLOUD_TOKEN=your-hetzner-api-token
kcl create hello --provider=hetzner
--provider stringCloud provider to use (currently: hetzner)
--image stringOS image (default "ubuntu-24.04")
--size stringInstance size/type (default "cx23")
--region stringRegion or location (default "nbg1")

Option B: Use your own existing server

kcl create hello --host=IP_or_hostname --user=username --key=path/to/key
--host stringVPS IP address or hostname
--user stringSSH user (default "root")
--key stringPath to SSH private key
--password stringSSH password (only needed the first time, if kcl's key isn't already on the server)

If you don't pass --key, kcl generates one for you at ~/.kcl/ssh/<cluster-name>/id_ed25519 and installs it on the server automatically.

--provider and --host can't be used together — pick one.

Note: make sure ports 80, 443, and 6443 are open to inbound traffic (firewall / security group) — kcl needs them for HTTP/HTTPS ingress and the Kubernetes API server.

What happens next

Once the node is reachable, kcl installs Kubernetes and automatically sets up ingress-nginx, cert-manager, and Let's Encrypt, so your cluster can serve HTTPS traffic right away.

Use your cluster

kcl use hello
kubectl get nodes

Providers

Currently supported for --provider:

CLI Reference

kcl create <name>

Creates a new cluster, either on a provider-hosted VPS or your own server. See Create a Cluster above for a walkthrough.

--provider stringCloud provider to use (currently: hetzner). Requires HCLOUD_TOKEN. Cannot be used with --host
--image stringOS image, used with --provider (default "ubuntu-24.04")
--size stringInstance size/type, used with --provider (default "cx23")
--region stringRegion or location, used with --provider (default "nbg1")
--host stringVPS IP address. Cannot be used with --provider
--user stringSSH user, used with --host (default "root")
--key stringPath to SSH private key, used with --host (auto-generated if omitted)
--password stringSSH password, used with --host (only needed the first time)

kcl list

Lists every cluster kcl is currently managing, along with its host address.

kcl list

No flags.

kcl status <cluster-name>

Shows a live dashboard for a cluster: SSH connectivity, control plane status (version, role, API server health), and current RAM/CPU usage on the node.

kcl status hello

No flags. Takes one positional argument, the cluster name.

kcl use <cluster-name>

Merges the cluster's kubeconfig into your default kubeconfig and switches your active kubectl context to it.

kcl use hello

No flags. Takes one positional argument, the cluster name.

kcl sans add <cluster-name> <ip-or-domain>

Adds a trusted IP address or domain name to the cluster's API server certificate, so you can connect to kubectl using that address without a certificate error.

:
kcl sans add hello api.example.com

No flags. Takes two positional arguments: cluster name, then the IP address or domain to trust.

kcl detects your node's Kubernetes distribution (k0s, k3s, or kubeadm) automatically and restarts the control plane to apply the change. You may be prompted for the server's sudo password. Allow ~15 seconds after it finishes before running kubectl commands again.