Skip to main content

Problembehandlung bei Actions Runner Controller-Fehlern

Erfahre, wie du Actions Runner Controller-Fehler beheben kannst.

Rechtliche Hinweise

Protokollierung

Die ARC-Ressourcen (Actions Runner Controller), zu denen der Controller, der Listener und die Runner gehören, schreiben Protokolle in die Standardausgabe (stdout). Du solltest eine Protokollierungslösung implementieren, um diese Protokolle zu sammeln und zu speichern. Verfügbare Protokolle können dich oder den GitHub-Support bei der Problembehandlung und beim Debuggen unterstützen. Weitere Informationen findest du in der Kubernetes-Dokumentation unter Protokollierungsarchitektur.

Ressourcenbezeichnungen

Bezeichnungen werden den vom Actions Runner Controller erstellten Ressourcen hinzugefügt, zu denen Controller, Listener und Runner-Pods gehören. Du kannst diese Bezeichnungen verwenden, um Ressourcen zu filtern und dir die Problembehandlung zu erleichtern.

Controllerpod

Die folgenden Bezeichnungen werden auf den Controllerpod angewendet.

app.kubernetes.io/component=controller-manager
app.kubernetes.io/instance=<controller installation name>
app.kubernetes.io/name=gha-runner-scale-set-controller
app.kubernetes.io/part-of=gha-runner-scale-set-controller
app.kubernetes.io/version=<chart version>

Listenerpod

Die folgenden Bezeichnungen werden auf Listenerpods angewendet.

actions.github.com/enterprise= # Will be populated if githubConfigUrl is an enterprise URL
actions.github.com/organization= # Will be populated if githubConfigUrl is an organization URL
actions.github.com/repository= # Will be populated if githubConfigUrl is a repository URL
actions.github.com/scale-set-name= # Runners scale set name
actions.github.com/scale-set-namespace= # Runners namespace
app.kubernetes.io/component=runner-scale-set-listener
app.kubernetes.io/part-of=gha-runner-scale-set
app.kubernetes.io/version= # Chart version

Runner-Pod

Die folgenden Bezeichnungen werden auf Runner-Pods angewendet.

actions-ephemeral-runner= # True | False
actions.github.com/organization= # Will be populated if githubConfigUrl is an organization URL
actions.github.com/scale-set-name= # Runners scale set name
actions.github.com/scale-set-namespace= # Runners namespace
app.kubernetes.io/component=runner
app.kubernetes.io/part-of=gha-runner-scale-set
app.kubernetes.io/version= # Chart version

Überprüfen der Protokolle des Controllers und Runnersatzlisteners

Um die Protokolle des Controllerpods zu überprüfen, kannst du den folgenden Befehl verwenden.

Bash
kubectl logs -n <CONTROLLER_NAMESPACE> -l app.kubernetes.io/name=gha-runner-scale-set-controller

Um die Protokolle des Runnersatzlisteners zu überprüfen, kannst du den folgenden Befehl verwenden.

Bash
kubectl logs -n <CONTROLLER_NAMESPACE> -l auto-scaling-runner-set-namespace=arc-systems -l auto-scaling-runner-set-name=arc-runner-set

Verwenden der Diagramme aus dem master-Branch

Du solltest die Diagramme aus dem neuesten Release anstatt aus dem master-Branch verwenden. Der master-Branch ist sehr instabil, und wir können nicht garantieren, dass die Diagramme im master-Branch zu einem bestimmten Zeitpunkt funktionieren.

Problembehandlung beim Listenerpod

Wenn der Controllerpod ausgeführt wird, der Listenerpod jedoch nicht, überprüfe zuerst anhand der Protokolle des Controllers, ob Fehler vorliegen. Wenn keine Fehler vorliegen und der Listenerpod des Runnersatzes weiterhin nicht ausgeführt wird, stelle sicher, dass der Controllerpod Zugriff auf den Kubernetes-API-Server in deinem Cluster hat.

Wenn du einen Proxy konfiguriert hast oder einen Sidecar-Proxy wie Istioverwendest, der automatisch eingefügt wird, stelle sicher, dass er so konfiguriert ist, dass Datenverkehr vom Controllercontainer (Manager) an den Kubernetes-API-Server zugelassen wird.

Wenn du den Autoskalierungsrunnersatz installiert hast, der Listenerpod jedoch nicht erstellt wird, überprüfe, ob das von dir bereitgestellte githubConfigSecret korrekt ist, und die von dir bereitgestellte githubConfigUrl stimmt. Weitere Informationen findest du unter Authentifizieren bei der GitHub-API und Bereitstellen von Runner-Skalierungsgruppen mit Actions Runner Controller.

Runner-Pods werden nach einer abgebrochenen Workflowausführung neu erstellt.

Sobald eine Workflowausführung abgebrochen wurde, treten die folgenden Ereignisse ein.

  • Das Abbruchsignal wird direkt an die Runner gesendet.
  • Die Runneranwendung wird beendet, wodurch auch die Runner-Pods beendet werden.
  • Bei der nächsten Abfrage wird das Abbruchsignal vom Listener empfangen.

Zwischen dem Empfang des Signals durch die Runner und dem Empfang des Signals durch den Listener kann es zu einer geringfügigen Verzögerung kommen. Wenn Runner-Pods beginnen, herunterzufahren, versucht der Listener, neue Runner zu starten, um über die dem Zustand, in dem er sich befindet, entsprechende gewünschte Anzahl von Runnern zu verfügen. Wenn der Listener jedoch das Abbruchsignal empfängt, wird die Anzahl der Runner reduziert. Schließlich wird der Listener wieder auf die gewünschte Anzahl von Runnern skalieren. In der Zwischenzeit kannst du zusätzliche Runner bemerken.

Fehler: Name must have up to n characters

ARC verwendet die generierten Namen bestimmter Ressourcen als Bezeichnungen für andere Ressourcen. Aufgrund dieser Anforderung beschränkt ARC Ressourcennamen auf 63 Zeichen.

Da ein Teil des Ressourcennamens von dir definiert wird, legt ARC eine Beschränkung für die Anzahl der Zeichen fest, die du für den Installationsnamen und den Namespace verwenden kannst.

Error: INSTALLATION FAILED: execution error at (gha-runner-scale-set/templates/autoscalingrunnerset.yaml:5:5): Name must have up to 45 characters

Error: INSTALLATION FAILED: execution error at (gha-runner-scale-set/templates/autoscalingrunnerset.yaml:8:5): Namespace must have up to 63 characters

Fehler: Access to the path /home/runner/_work/_tool is denied

Dieser Fehler wird möglicherweise angezeigt, wenn du den Kubernetes-Modus mit persistenten Volumes verwendest. Dieser Fehler tritt auf, wenn der Runnercontainer mit einem Nicht-Root-Benutzer ausgeführt wird und einen Berechtigungskonflikt mit dem eingebundenen Volume verursacht.

Führe einen der folgenden Schritte aus, um das Problem zu beheben.

  • Verwende einen Volumetyp, der securityContext.fsGroup unterstützt. hostPath-Volumes unterstützen diese Eigenschaft nicht, während local-Volumes und andere Arten von Volumes sie unterstützen. Aktualisiere fsGroup deines Runnerpods der GID des Runners entsprechend. Hierzu kannst du die gha-runner-scale-set-Helm-Diagrammwerte aktualisieren, um Folgendes einzuschließen. Ersetze VERSION durch die Version des actions-runner-Containerimages, die du verwenden möchtest.

    YAML
    spec:
        securityContext:
            fsGroup: 123
        containers:
        - name: runner
        image: ghcr.io/actions/actions-runner:latest
        command: ["/home/runner/run.sh"]
    
  • Wenn das Aktualisieren des securityContext deines Runner-Pods keine praktikable Lösung ist, kannst du das Problem umgehen, indem du mit initContainers den Besitz des eingebundenen Volumes wie folgt änderst.

    YAML
    template:
    spec:
        initContainers:
        - name: kube-init
        image: ghcr.io/actions/actions-runner:latest
        command: ["sudo", "chown", "-R", "1001:123", "/home/runner/_work"]
        volumeMounts:
            - name: work
            mountPath: /home/runner/_work
        containers:
        - name: runner
        image: ghcr.io/actions/actions-runner:latest
        command: ["/home/runner/run.sh"]
    

Teile wurden von https://github.com/actions/actions-runner-controller/ unter der Apache-2.0-Lizenz übernommen:

Copyright 2019 Moto Ishizawa

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.