Skip to content

GitHub Actions

Avtomatiziraj vzpostavitev clustra in sinhronizacijo konfiguracije z GitHub Actions.

Hitra pot — večkrat uporabni workflow

lok8s prinaša pripravljen workflow, ki vzpostavi gručo iz repozitorija in če gruča vklopi vidnost kubehz (spec.kubehz.access je registered ali managed), jo registrira ter izpiše prstni odtis za prevzem v povzetek opravila (ključ za prevzem, ki ga lo naloži v tvoj projekt Hetzner; glej Prevzem). Potrebuje natanko eno skrivnost:

yaml
# .github/workflows/spinup.yml
name: Spin up cluster
on: workflow_dispatch

jobs:
  spinup:
    uses: kernpilot/lok8s/.github/workflows/spinup.yml@main
    with:
      domain: my-cluster.example.com
    secrets:
      HCLOUD_TOKEN: ${{ secrets.HCLOUD_TOKEN }}

@main je premikajoča se referenca

To kliče večkrat uporabni workflow na @main, zato se spremeni, ko se spremeni lok8s. To je priročno, dokler je lok8s mlad, a pomeni, da se lahko zagon obnaša drugače kot prejšnji, ne da bi ti karkoli spremenil. Commit SHA (spinup.yml@<sha>) pripne obnašanje, ki si ga preizkusil, in je varnejša izbira za vse, kar ustvarja resnično infrastrukturo. Poišči SHA, na katerega trenutno kaže main, in ga vstavi v uses::

bash
gh api repos/kernpilot/lok8s/commits/main --jq .sha

Pripenjanje na trenutno izdajo (@v0.2.0, avgust 2026) še ni priporočeno: od te oznake je workflow dobil vzpostavitev s ključem za prevzem, zato izdaja zaostaja za tem, kar opisuje ta stran.

cluster.lok8s.yaml za domeno mora biti v repozitoriju pod clusters/<domain>/. Žeton platforme ni potreben: lastništvo dokažeš pozneje, interaktivno, ko prevzameš gručo.

Izberi to pot, razen če potrebuješ lastne korake; spodnji workflowi prikazujejo celotno ročno nastavitev.

Pisanje lastnih workflowov

Predpogoji

  • Repozitorij, ki vsebuje tvojo clusters/<domain>/cluster.lok8s.yaml
  • Konfigurirane skrivnosti (secrets) repozitorija GitHub (spodaj)

Potrebne skrivnosti

Dodaj jih v nastavitvah repozitorija pod Settings > Secrets and variables > Actions:

SkrivnostOpis
HCLOUD_TOKENHetzner Cloud API žeton
SSH_PRIVATE_KEYZasebni SSH ključ, ki ustreza sshPrivateKey v tvojem opisniku ponudnika (dostop do vozlišč)
KUBECONFIGKubeconfig, kodiran v Base64 (za poteke sinhronizacije)

Namestitev lok8s v CI

lok8s se distribuira kot okolje b, zato izvajalec najprej potrebuje b, nato pripeto orodjarno. Če tvoj repozitorij že vsebuje .bin/b.yaml (ustvari ga namestilnik lok8s), b install sam obnovi povsem enako orodjarno; vrstico b env add takrat izpusti.

yaml
      - name: Install b (binary manager)
        run: |
          curl -fsSL https://raw.githubusercontent.com/fentas/b/v4.18.4/install.sh \
            -o /tmp/b-install.sh
          B_INSTALL_DIR="$HOME/.local/bin" bash /tmp/b-install.sh
          echo "$HOME/.local/bin" >> "$GITHUB_PATH"

      - name: Install the lok8s toolchain
        env:
          # prepreči omejitve GitHub API pri prenosih binarnih datotek
          GITHUB_TOKEN: ${{ github.token }}
        run: |
          b env add github.com/kernpilot/lok8s#kubeone
          b install
          echo "$PWD/.bin" >> "$GITHUB_PATH"

Potek vzpostavitve

Ustvari .github/workflows/provision.yml:

yaml
name: Provision Cluster
on:
  workflow_dispatch:
    inputs:
      action:
        description: 'Action to perform'
        required: true
        default: 'provision'
        type: choice
        options:
          - provision
          - destroy

jobs:
  provision:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install b (binary manager)
        run: |
          curl -fsSL https://raw.githubusercontent.com/fentas/b/v4.18.4/install.sh \
            -o /tmp/b-install.sh
          B_INSTALL_DIR="$HOME/.local/bin" bash /tmp/b-install.sh
          echo "$HOME/.local/bin" >> "$GITHUB_PATH"

      - name: Install the lok8s toolchain
        env:
          GITHUB_TOKEN: ${{ github.token }}
        run: |
          b env add github.com/kernpilot/lok8s#kubeone
          b install
          echo "$PWD/.bin" >> "$GITHUB_PATH"

      - name: Setup SSH key
        run: |
          mkdir -p ~/.ssh
          echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
          chmod 600 ~/.ssh/id_ed25519

      - name: Run lo
        env:
          HCLOUD_TOKEN: ${{ secrets.HCLOUD_TOKEN }}
        run: lo --domain my-cluster.example.com ${{ inputs.action }}

Vhod ob sprožitvi izbere lo provision ali lo destroy, zato en workflow pokrije tako postavitev kot odstranitev.

Potek sinhronizacije

Ustvari .github/workflows/sync.yml, da ob potisku (push) uveljaviš spremembe konfiguracije:

yaml
name: Sync Cluster
on:
  push:
    branches: [main]
    paths:
      - 'clusters/**'

jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install b (binary manager)
        run: |
          curl -fsSL https://raw.githubusercontent.com/fentas/b/v4.18.4/install.sh \
            -o /tmp/b-install.sh
          B_INSTALL_DIR="$HOME/.local/bin" bash /tmp/b-install.sh
          echo "$HOME/.local/bin" >> "$GITHUB_PATH"

      - name: Install the lok8s toolchain
        env:
          GITHUB_TOKEN: ${{ github.token }}
        run: |
          b env add github.com/kernpilot/lok8s#kubeone
          b install
          echo "$PWD/.bin" >> "$GITHUB_PATH"

      - name: Setup kubeconfig
        run: |
          mkdir -p ~/.kube
          echo "${{ secrets.KUBECONFIG }}" | base64 -d > ~/.kube/config

      - name: Reconcile infrastructure
        env:
          HCLOUD_TOKEN: ${{ secrets.HCLOUD_TOKEN }}
        run: lo --domain my-cluster.example.com provision

      - name: Render the manifests
        run: lo --domain my-cluster.example.com build

      - name: Deploy platform
        run: lo --domain my-cluster.example.com deploy

lo provision je idempotenten: ponovni zagon uskladi cluster s tvojo specifikacijo. lo build tvoje storitve in dodatke upodobi v clusters/<domain>/artifacts.yaml, lo deploy pa to datoteko uveljavi. lo deploy se noče zagnati, dokler je lo build ni ustvaril.

Naslednji koraki

  • Registracija: registracija v nadzorno ploščo kubehz
  • KubeOne: podrobnosti orodja za vzpostavitev
  • CAPI: orodje za vzpostavitev Cluster API

Status dokumenta

VidikPodrobnost
Stanjeaktivno
Nazadnje pregledano2026-09-05