Skip to content

Quickstart

Krijg binnen ongeveer 15 minuten een Kubernetes-cluster draaiend op Hetzner.

Vereisten

  • Een Hetzner Cloud-account en een project-API-token met lees- en schrijfrechten (Hetzner Console → Security → API tokens):

    bash
    export HCLOUD_TOKEN="<jouw-token>"
  • De lok8s CLI: één op zichzelf staand commando (installeert de vastgepinde toolchain in je project, raakt je systeem niet aan):

    bash
    curl -fsSL https://get.lok8s.io | sh -s -- -p kubeone

    Gebruik je al b? Deze twee doen hetzelfde:

    bash
    b env add github.com/kernpilot/lok8s#kubeone
    b install
  • Een SSH-sleutelpaar (Ed25519 aanbevolen)

  • Een domein dat je beheert: het API-endpoint en de certificaatnamen van het cluster worden daarvan afgeleid. Je stelt het in bij stap 1; de referentieconfiguratie bevat example.com als plaatsaanduiding, niet als standaard.

1. Maak je clusterconfiguratie

lo houdt één map per cluster bij, vernoemd naar het domein van het cluster: clusters/<domein>/cluster.lok8s.yaml. Maak de map aan in je project en sla het bestand daar op:

bash
mkdir -p clusters/example.com
# plak het onderstaande bestand in clusters/example.com/cluster.lok8s.yaml
lo use example.com

lo use markeert het domein als actief, zodat elk volgend commando weet welk cluster je bedoelt.

yaml
# clusters/example.com/cluster.lok8s.yaml
apiVersion: cluster.lok8s.dev/v1beta1
kind: KubeOne
metadata:
  name: my-cluster
spec:
  kubernetes:
    version: "v1.35.5"
  cluster:
    # VERPLICHT: een domein dat je beheert; voor het API-endpoint en certificaten
    domain: example.com
  provider:
    name: hetzner
    # De machines, in de termen van Hetzner zelf: elk `server`-item wordt één
    # `hcloud server create`, en zijn sleutels zijn hcloud-flags. De rol komt
    # uit het label 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 voor dev; voeg er twee toe voor HA
        - name: cp-1
          type: cx33
          image: ubuntu-24.04
          # fsn1, nbg1 of hel1
          location: fsn1
          ssh-key: [0]
          network: 0
          label: lok8s.dev/cluster=my-cluster,lok8s.dev/role=control-plane
        - name: worker-1
          type: cpx31
          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: cpx31
          image: ubuntu-24.04
          location: fsn1
          ssh-key: [0]
          network: 0
          label: lok8s.dev/cluster=my-cluster,lok8s.dev/role=worker

Wijzig domain (en de mapnaam) naar een domein dat je beheert vóór de volgende stap: niets in dit bestand kan het voor je raden. De drie SSH-paden gaan uit van een Ed25519-sleutel met de standaardnaam (~/.ssh/id_ed25519); heet de jouwe anders of staat hij elders, pas die dan ook aan.

2. Uitrollen

bash
lo provision

Dit maakt je control plane en worker nodes aan op Hetzner Cloud. De kubeconfig wordt weggeschreven naar .kubeconfig/my-cluster.yaml in je project, vernoemd naar metadata.name. Je ~/.kube/config blijft ongemoeid.

Uitrollen duurt doorgaans 10–15 minuten. Hetzner factureert de servers per uur (een kleine dev-opstelling kost ongeveer € 0,03/uur), en met lo destroy verwijder je op elk moment weer alles.

3. Verifiëren

kubectl wijst nog steeds naar de context die je eerder gebruikte, dus selecteer het nieuwe cluster expliciet; anders antwoordt get nodes voor je vorige:

bash
export KUBECONFIG=.kubeconfig/my-cluster.yaml
kubectl get nodes

Je zou je control plane en worker nodes in de status Ready moeten zien.

4. Registreren bij kubehz (optioneel)

Alleen deze stap vraagt een gratis kubehz-account; de vereisten hierboven zijn alles wat de cluster zelf nodig heeft.

Verbind je cluster met het kubehz-dashboard voor alleen-lezen gezondheidszichtbaarheid. Registratie is alleen uitgaand: kubehz krijgt nooit toegang tot je cluster.

bash
lo kubehz register

Dit meldt het cluster aan met de status Creating. Claim het vervolgens op app.kubehz.cloud om eigenaarschap te bewijzen en het aan je account te koppelen (register → claim → owned). Zie Registratie voor de details en wat het dashboard toont.

Volgende stappen

Documentstatus

AspectDetail
Statuslive: komt overeen met de uitgeleverde CLI-flow; de uitrolduur is een conservatieve grens, nog niet gemeten op deze topologie
Laatst gecontroleerd2026-09-05