Skip to content

Schnellstart

Bringe in etwa 15 Minuten einen Kubernetes-Cluster auf Hetzner zum Laufen.

Voraussetzungen

  • Ein Hetzner Cloud-Konto und ein Projekt-API-Token mit Lese- und Schreibrechten (Hetzner Console → Security → API tokens):

    bash
    export HCLOUD_TOKEN="<dein-token>"
  • Die lok8s CLI: ein in sich geschlossener Befehl (installiert die gepinnte Toolchain in dein Projekt, nichts berührt dein System):

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

    Nutzt du bereits b? Diese beiden tun dasselbe:

    bash
    b env add github.com/kernpilot/lok8s#kubeone
    b install
  • Ein SSH-Schlüsselpaar (Ed25519 empfohlen)

  • Eine Domain, die dir gehört: der API-Endpunkt und die Zertifikatsnamen des Clusters leiten sich daraus ab. Du setzt sie in Schritt 1; die Referenzkonfiguration liefert example.com als Platzhalter, nicht als Standard.

1. Cluster-Konfiguration erstellen

lo hält pro Cluster einen Ordner, benannt nach der Domain des Clusters: clusters/<domain>/cluster.lok8s.yaml. Lege den Ordner in deinem Projekt an und speichere die Datei dort:

bash
mkdir -p clusters/example.com
# füge die Datei unten in clusters/example.com/cluster.lok8s.yaml ein
lo use example.com

lo use markiert die Domain als aktiv. Jeder spätere Befehl weiß damit, welchen Cluster du meinst.

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:
    # PFLICHT: eine Domain, die dir gehört; für API-Endpunkt und Zertifikate
    domain: example.com
  provider:
    name: hetzner
    # Die Maschinen, in Hetzners eigenen Begriffen: Jeder `server`-Eintrag wird
    # zu einem `hcloud server create`, seine Schlüssel sind hcloud-Flags. Die
    # Rolle kommt aus dem 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 für Dev; für HA zwei weitere ergänzen
        - name: cp-1
          type: cx33
          image: ubuntu-24.04
          # fsn1, nbg1 oder 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

Ändere domain (und den Ordnernamen) vor dem nächsten Schritt auf eine Domain, die dir gehört: Nichts in dieser Datei kann sie für dich erraten. Die drei SSH-Pfade setzen einen Ed25519-Schlüssel mit Standardnamen voraus (~/.ssh/id_ed25519); heißt deiner anders oder liegt er woanders, passe auch die an.

2. Bereitstellen

bash
lo provision

Dies erstellt deine Control Plane und Worker-Nodes auf Hetzner Cloud. Die kubeconfig wird als .kubeconfig/my-cluster.yaml im Projekt abgelegt, benannt nach metadata.name. Deine ~/.kube/config wird nicht angefasst.

Die Bereitstellung dauert typischerweise 10–15 Minuten. Hetzner rechnet die Server stündlich ab (ein kleines Dev-Setup liegt bei etwa 0,03 €/Stunde), und du kannst mit lo destroy jederzeit alles wieder löschen.

3. Überprüfen

kubectl zeigt weiterhin auf den zuvor genutzten Kontext; wähle den neuen Cluster also explizit aus, sonst antwortet get nodes für deinen vorherigen:

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

Deine Control Plane und Worker-Nodes sollten im Zustand Ready erscheinen.

4. Bei kubehz registrieren (optional)

Nur dieser Schritt braucht ein kostenloses kubehz-Konto; die Voraussetzungen oben sind alles, was der Cluster selbst benötigt.

Verbinde deinen Cluster mit dem kubehz-Dashboard für schreibgeschützte Zustandssichtbarkeit. Die Registrierung ist nur ausgehend: kubehz erhält niemals Zugriff in deinen Cluster.

bash
lo kubehz register

Dies meldet den Cluster mit dem Status Creating an. Beanspruche ihn anschließend unter app.kubehz.cloud, um den Besitz nachzuweisen und ihn mit deinem Konto zu verknüpfen (registrieren → beanspruchen → besitzen). Siehe Registrierung für die Details und was das Dashboard anzeigt.

Nächste Schritte

Doku-Status

AspektDetail
ZustandLive: entspricht dem ausgelieferten CLI-Ablauf; die Bereitstellungsdauer ist eine konservative Schranke, auf dieser Topologie noch nicht gemessen
Zuletzt geprüft2026-09-05