Quickstart
Avvia un cluster Kubernetes su Hetzner in circa 15 minuti.
Prerequisiti
Un account Hetzner Cloud e un token API di progetto con permessi di lettura e scrittura (Hetzner Console → Security → API tokens):
bashexport HCLOUD_TOKEN="<il-tuo-token>"La CLI lok8s
lo, un unico binario Go statico. Scaricalo da una release di lok8s, verificalo conchecksums.txte poi installalo. Scegli l’archivio per il tuo sistema (linux o darwin, amd64 o arm64):bashV=v0.12.0; A=lo-linux-amd64.tar.gz curl -fsSLO "https://github.com/kernpilot/lok8s/releases/download/${V}/${A}" curl -fsSLO "https://github.com/kernpilot/lok8s/releases/download/${V}/checksums.txt" sha256sum --ignore-missing -c checksums.txt # macOS: shasum -a 256 --ignore-missing -c checksums.txt tar -xzf "${A}" lo && mkdir -p "$HOME/.local/bin" && install -m 0755 lo "$HOME/.local/bin/lo"Poi crea il progetto e installa la toolchain KubeOne bloccata nella sua cartella
.bin/. Niente tocca il tuo sistema:bashmkdir my-project && cd my-project lo init project lo toolchain install --groups core,local,cloudUsi già b? Questi due installano
loe la stessa toolchain:bashb env add github.com/kernpilot/lok8s#kubeone b installUna coppia di chiavi SSH (Ed25519 consigliata)
Un dominio che controlli: l’endpoint API del cluster e i nomi dei certificati derivano da lì. Lo imposti al passo 1; la configurazione di riferimento riporta
example.comcome segnaposto, non come valore predefinito.
1. Crea la configurazione del cluster
lo tiene una cartella per cluster, con il nome del dominio del cluster: clusters/<domain>/cluster.lok8s.yaml. Crea la cartella dentro il tuo progetto e salva lì il file:
mkdir -p clusters/example.com
# incolla il file qui sotto in clusters/example.com/cluster.lok8s.yaml
lo use example.comlo use segna il dominio come attivo, così ogni comando successivo sa a quale cluster ti riferisci.
# clusters/example.com/cluster.lok8s.yaml
apiVersion: cluster.lok8s.dev/v1beta1
kind: KubeOne
metadata:
name: my-cluster
spec:
kubernetes:
version: "v1.35.5"
cluster:
# OBBLIGATORIO: un dominio che controlli; per l'endpoint API e i certificati
domain: example.com
provider:
name: hetzner
# Le macchine, nei termini di Hetzner: ogni voce `server` diventa un
# `hcloud server create` e le sue chiavi sono flag di hcloud. Il ruolo
# viene dall'etichetta lok8s.dev/role.
config:
cluster_name: my-cluster
sshUser: root
sshPrivateKey: ~/.ssh/id_ed25519
sshPublicKey: ~/.ssh/id_ed25519.pub
ssh-key:
- name: my-cluster
public-key-from-file: ~/.ssh/id_ed25519.pub
network:
- name: my-cluster
ip-range: 10.0.0.0/16
"#subnets":
- network-zone: eu-central
type: cloud
ip-range: 10.0.0.0/24
server:
# 1 control plane per dev; aggiungine altri due per l'HA
- name: cp-1
type: cpx32
image: ubuntu-24.04
# fsn1, nbg1 o hel1
location: fsn1
ssh-key: [0]
network: 0
label: lok8s.dev/cluster=my-cluster,lok8s.dev/role=control-plane
- name: worker-1
type: cpx32
image: ubuntu-24.04
location: fsn1
ssh-key: [0]
network: 0
label: lok8s.dev/cluster=my-cluster,lok8s.dev/role=worker
- name: worker-2
type: cpx32
image: ubuntu-24.04
location: fsn1
ssh-key: [0]
network: 0
label: lok8s.dev/cluster=my-cluster,lok8s.dev/role=workerL’esempio usa cpx32 (4 vCPU, 8 GB di RAM) per ogni server. Va bene anche qualsiasi tipo con almeno le stesse vCPU e la stessa RAM che il tuo account Hetzner offre nella località.
La disponibilità varia da account ad account e cambia di ora in ora: se Hetzner rifiuta un tipo, usa un altro tipo o un’altra località (fsn1, nbg1 o hel1).
Cambia domain (e il nome della cartella) con un dominio che controlli prima del passo successivo: niente in questo file può indovinarlo per te. I tre percorsi SSH presuppongono una chiave Ed25519 con il nome predefinito (~/.ssh/id_ed25519); se la tua ha un nome diverso o si trova altrove, aggiorna anche quelli.
2. Provisioning
lo provisionQuesto crea il control plane e i worker node su Hetzner Cloud. Il kubeconfig viene scritto in .kubeconfig/my-cluster.yaml nel progetto, con il nome di metadata.name. Il tuo ~/.kube/config non viene toccato.
Il provisioning richiede di norma 10–15 minuti. Hetzner fattura i tre server a ore, secondo il suo listino pubblicato. Con lo destroy puoi cancellare tutto in qualsiasi momento.
3. Verifica
kubectl punta ancora al contesto che usavi prima, quindi seleziona il nuovo cluster in modo esplicito; altrimenti get nodes risponde per il precedente:
export KUBECONFIG=.kubeconfig/my-cluster.yaml
kubectl get nodesDovresti vedere il control plane e i worker node nello stato Ready.
4. Registrazione con kubehz (opzionale)
Solo questo passo richiede un account kubehz gratuito; i prerequisiti sopra sono tutto ciò che serve al cluster in sé. La registrazione è aperta per i primi 25 account, poi solo su invito (vedi Dashboard e account).
Collega il tuo cluster alla dashboard kubehz per la visibilità della salute in sola lettura. La registrazione è solo in uscita: kubehz non ottiene mai accesso dentro il tuo cluster.
lo kubehz registerQuesto annuncia il cluster con lo stato Creating. Poi rivendicalo (claim) su app.kubehz.cloud per dimostrare la proprietà e collegarlo al tuo account (register → claim → owned). Vedi Registrazione per i dettagli e cosa mostra la dashboard.
Prossimi passi
- Guida al primo cluster: riferimento dettagliato della configurazione
- Dashboard e account: esplora la dashboard, l’accesso e l’account
- Come funziona: il modello, il confine di fiducia e i tuoi dati
- Guida Self-Hosted: configurazione self-hosted avanzata
- Control plane hosted: il percorso delegato
Stato del documento
| Aspetto | Dettaglio |
|---|---|
| Stato | live: corrisponde al flusso CLI rilasciato; la durata del provisioning è un limite conservativo, non ancora cronometrato su questa topologia |
| Ultima revisione | 2026-09-05 |