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:
# .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::
gh api repos/kernpilot/lok8s/commits/main --jq .shaPripenjanje 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:
| Skrivnost | Opis |
|---|---|
HCLOUD_TOKEN | Hetzner Cloud API žeton |
SSH_PRIVATE_KEY | Zasebni SSH ključ, ki ustreza sshPrivateKey v tvojem opisniku ponudnika (dostop do vozlišč) |
KUBECONFIG | Kubeconfig, 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.
- 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:
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:
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 deploylo 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
| Vidik | Podrobnost |
|---|---|
| Stanje | aktivno |
| Nazadnje pregledano | 2026-09-05 |