Zum Hauptinhalt springen
  1. Beiträge/
  2. Kleines Homelab/
  3. k3s-prod: Kubernetes Cluster Konfiguration und Anwendungsbereitstellung/

Forgejo Runner

··343 Wörter· ·
Inhaltsverzeichnis

Forgejo Runner
#

Ein Forgejo Runner ist ein Daemon, der mit einer Forgejo-Instanz zusammenarbeitet, um CI/CD (Continuous Integration/Continuous Delivery)-Jobs auszuführen. Er ruft Workflows von der Forgejo-Instanz ab, führt sie in einer isolierten Umgebung aus und sendet dann Protokolle und den endgültigen Status zurück.

Quelle
#

Helm-Chart forgejo-runner aus der OCI-Registry codeberg.org/wrenix/helm-charts.

Dokumentation
#

Die Dokumentation für den Runner ist Teil der Forgejo-Dokumentation.

Funktion
#

Dieser Dienst stellt Runner für die Ausführung von CI/CD-Pipelines bereit. Es sind zwei Instanzen konfiguriert: eine für die lokale Forgejo-Instanz und eine weitere für Codeberg.

Lokale Anpassungen
#

  • Die values.yaml-Datei enthält die Konfiguration für die Haupt-Runner-Instanz, einschließlich der Verbindung zur Forgejo-Instanz und der Runner-Labels.
  • Die values-codeberg.yaml-Datei enthält die Konfiguration für die Codeberg-Runner-Instanz.
  • Beide Instanzen verwenden Docker-in-Docker (DinD) für die Ausführung von Jobs.

Wichtige Einstellungen
#

  • Instanzen: Es werden zwei Runner-Deployments erstellt:
    1. forgejo-runner: Verbindet sich mit der lokalen Instanz.
    2. forgejo-runner-codeberg: Verbindet sich mit der öffentlichen Instanz https://codeberg.org.
  • Replikas: Für die lokale Instanz werden 5 Runner-Replikate betrieben — je einer pro Hardware-Node, erzwungen über podAntiAffinity (topologyKey: kubernetes.io/hostname). Mit capacity: 2 ergibt das 10 parallel ausführbare Jobs.
  • Ressourcen: Beide Container haben Requests/Limits. Das CPU-Limit liegt auf dem dind-Container (4 CPU), damit CI-Jobs die auf denselben Nodes laufenden Produktions-Workloads nicht verdrängen können.
  • Docker-Daemon: daemon.json (MTU 1400, IPv6) wird per ConfigMap docker-config in den dind-Container nach /etc/docker/daemon.json gemountet.
  • Labels: Die Runner sind mit einer Vielzahl von Labels konfiguriert, die auf verschiedene Docker-Images von catthehacker/ubuntu verweisen. Diese Images sind speziell für die Verwendung mit Gitea/Forgejo Actions vorbereitet.
  • Docker-in-Docker: Die Runner laufen im privileged-Modus und mit host-Netzwerk, um Docker-Befehle innerhalb der CI-Jobs ausführen zu können (Docker-in-Docker).

Installation
#

Das Chart wird zweimal aus derselben Quelle instanziiert — einmal je Zielinstanz. Die Bereitstellung wird durch die kustomization.yaml-Datei verwaltet.

1kubectl kustomize --enable-helm apps/forgejo-runner | kubectl apply -n forgejo-runner -f -

Abhängigkeiten
#

  • Forgejo: Eine laufende Forgejo-Instanz, bei der sich die Runner registrieren können.
  • Keine Docker-Engine auf den Nodes nötig: Jeder Runner-Pod bringt seinen eigenen Docker-Daemon als dind-Sidecar mit. Dafür läuft der Pod privilegiert — er kann damit mehr als ein gewöhnlicher Workload, was der Preis für Docker-in-Docker ist.
Fabrice Kirchner
Autor
Fabrice Kirchner
stolzer Vater, Nerd, Admin