# Problembehandlung bei Actions Runner Controller-Fehlern

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

## 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. Wenn Protokolle verfügbar sind, kann das Ihnen oder dem GitHub-Support bei der Störungsbehebung und beim Debuggen helfen. Weitere Informationen findest du in der Kubernetes-Dokumentation unter [Protokollierungsarchitektur](https://kubernetes.io/docs/concepts/cluster-administration/logging/).

## Ressourcenetiketten

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 Labels werden auf den Controller-Pod angewendet.

```yaml
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 Listener-Pods angewendet:

```yaml
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
```

### Runnerpod

Die folgenden Bezeichnungen werden auf Runner-Pods angewendet.

```yaml
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 des Runner-Set-Listeners

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

```bash copy
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 copy
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 des Listenerpods

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 [Istio](https://istio.io/)verwendest, 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 von ARC für die GitHub-API](/de/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/authenticating-to-the-github-api) und [Bereitstellen von Runner-Skalierungssets mit Actions Runner Controller](/de/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/deploying-runner-scale-sets-with-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 Runner-Anwendung wird beendet, wodurch auch die Runner-Pods beendet werden.
* Bei der nächsten Abfrage empfängt der Listener das Abbruchsignal.

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 er Maßnahmen ergreifen, um die Anzahl der Läufer zu reduzieren. Schließlich wird der Listener wieder auf die gewünschte Anzahl von Runnern skalieren. In der Zwischenzeit können Sie zusätzliche Läufer 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.

```bash
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 das `fsGroup` deines Runnerpods, um der GID des Runners zu entsprechen. 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 copy
  template:
    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 copy
  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"]
  ```

## Fehler: `failed to get access token for GitHub App auth: 401 Unauthorized`

Ein `401 Unauthorized`-Fehler beim Versuch, ein Zugriffstoken für eine GitHub App abzurufen, kann zu einer NTP-Abweichung (Network Time Protocol) führen. Stelle sicher, dass dein Kubernetes-System mit einem NTP-Server genau synchronisiert wird und keine erhebliche Zeitabweichung vorliegt. Wenn Ihre Systemzeit hinter der von GitHub liegt, gibt es mehr Spielraum. Aber wenn die Umgebung um mehr als ein paar Sekunden voraus ist, treten beim Verwenden der GitHub App 401-Fehler auf.

## Grenzwerte für Runnergruppen

Du kannst maximal 10.000 selbstgehostete Runner in einer Runnergruppe haben. Wenn dieses Limit erreicht ist, ist das Hinzufügen eines neuen Runners nicht möglich.

## Runner-Updates

> \[!WARNING] Alle Updates, die für die Software veröffentlicht werden, einschließlich haupt-, Neben- oder Patchversionen, werden als verfügbares Update betrachtet. Wenn Sie innerhalb von 30 Tagen kein Softwareupdate durchführen, reiht der GitHub Actions-Dienst keine Aufträge in die Warteschlange Ihres Runners ein. Wenn ein kritisches Sicherheitsupdate durchgeführt werden muss, reiht der GitHub Actions-Dienst keine Aufträge in die Warteschlange deines Runners ein, bis dieser aktualisiert wurde.

Überprüfe, ob es sich bei der verwendeten Runnersoftwareversion und/oder den verwendeten benutzerdefinierten Runnerimages um die neueste Version handelt.

Weitere Informationen finden Sie unter [Referenzen zu selbstgehosteten Runnern](/de/actions/reference/runners/self-hosted-runners).

## Rechtliche Hinweise

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

```text
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.
```