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

Pripneš lahko tudi na oznako izdaje, ki je v diffu bolj berljiva: trenutna izdaja je @v0.12.0 (oktober 2026). Vzemi najnovejšo oznako z izdaj lok8s in pin premakni namerno, ko nadgradiš.

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