# Résolution des erreurs d’Actions Runner Controller

Découvrez comment résoudre les erreurs liées à Actions Runner Controller.

## Journalisation

Les ressources Actions Runner Controller (ARC), qui incluent le contrôleur, l’écouteur et les exécuteurs, écrivent des journaux dans la sortie standard (`stdout`). Nous vous recommandons d’implémenter une solution de journalisation pour collecter et stocker ces journaux. La disponibilité des journaux peut vous aider ou aider le support GitHub à résoudre les problèmes et à effectuer le débogage. Pour plus d’informations, consultez [Architecture de journalisation](https://kubernetes.io/docs/concepts/cluster-administration/logging/) dans la documentation de Kubernetes.

## Étiquettes de ressources

Les étiquettes sont ajoutées aux ressources créées par Actions Runner Controller, qui incluent les pods du contrôleur, de l’écouteur et de l’exécuteur. Vous pouvez utiliser ces étiquettes pour filtrer les ressources et faciliter la résolution des problèmes.

### Pod du contrôleur

Les étiquettes suivantes sont appliquées au pod du contrôleur.

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

### Pod de réception

Les étiquettes suivantes sont appliquées au pod de l’écouteur.

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

### Pod de l’exécuteur

Les étiquettes suivantes sont appliquées au pod de l’exécuteur.

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

## Vérification des journaux du contrôleur et de l’écouteur du jeu d’exécuteurs

Pour vérifier les logs du pod du contrôleur, vous pouvez utiliser la commande suivante.

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

Pour vérifier les journaux de l’écouteur du jeu d’exécuteurs, vous pouvez utiliser la commande suivante.

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

## Utilisation des graphiques de la branche `master`

Nous vous recommandons d’utiliser les graphiques de la dernière version au lieu de ceux de la branche `master`. La branche `master` est hautement instable et nous ne pouvons pas garantir le bon fonctionnement des graphiques de la branche `master`.

## Résolution des problèmes liés au pod de l’écouteur

Si le pod du contrôleur est en cours d’exécution, mais que le pod de l’écouteur ne l’est pas, examinez d’abord les journaux du contrôleur pour voir s’il y a des erreurs. S’il n’y a aucune erreur et que le pod de l’écouteur du jeu d’exécuteurs n’est toujours pas en cours d’exécution, vérifiez que le pod du contrôleur a accès au serveur d’API Kubernetes dans votre cluster.

Si vous avez configuré un proxy ou si vous utilisez un proxy side-car qui est automatiquement injecté, comme [Istio](https://istio.io/), vérifiez qu’il est configuré pour autoriser le trafic à partir du conteneur du contrôleur (gestionnaire) vers le serveur d’API Kubernetes.

Si vous avez installé le jeu d’exécuteurs de mise à l’échelle automatique, mais que le pod de l’écouteur n’est pas créé, vérifiez que le `githubConfigSecret` que vous avez fourni est correct et que la valeur `githubConfigUrl` que vous avez fournie est exacte. Pour plus d’informations, consultez « [Authentification d'ARC pour l'API GitHub](/fr/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/authenticating-to-the-github-api) » et « [Déploiement de groupes identiques d’exécuteurs avec Actions Runner Controller](/fr/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/deploying-runner-scale-sets-with-actions-runner-controller) ».

## Les pods de l’exécuteur sont recréés après une exécution de flux de travail annulée

Une fois l’exécution d’un flux de travail annulée, les événements suivants se produisent.

* Le signal d’annulation est envoyé directement aux exécuteurs.
* L’application de l’exécuteur s’arrête, ce qui arrête également les pods de l’exécuteur.
* Lors du prochain sondage, le signal d’annulation est reçu par l’écouteur.

Il peut y avoir un léger décalage entre le moment où les coureurs reçoivent le signal et le moment où l'écouteur reçoit le signal. Lorsque les pods de l’exécuteur commencent à s’arrêter, l’écouteur tente de connecter d’autres exécuteurs pour respecter le nombre souhaité d’exécuteurs en fonction de l’état dans lequel il se trouve. Toutefois, lorsque l’écouteur reçoit le signal d’annulation, il agit pour réduire le nombre d’exécuteurs. Finalement, l’écouteur effectue un scale-down jusqu’à atteindre le nombre souhaité d’exécuteurs. Dans l’intervalle, des exécuteurs supplémentaires peuvent apparaître.

## Erreur : `Name must have up to n characters`

ARC utilise les noms générés de certaines ressources comme étiquettes pour d’autres ressources. En raison de cette exigence, ARC limite les noms de ressources à 63 caractères.

Étant donné que vous définissez une partie du nom de la ressource, ARC impose une limite au nombre de caractères que vous pouvez utiliser pour le nom et l’espace de noms de l’installation.

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

## Erreur : `Access to the path /home/runner/_work/_tool is denied`

Cette erreur peut s’afficher si vous utilisez le mode Kubernetes avec des volumes persistants. Cette erreur se produit si le conteneur de l’exécuteur fonctionne avec un utilisateur non root, provoquant un conflit d'autorisations avec le volume monté.

Pour résoudre ce problème, effectuez l’une des opérations suivantes.

* Utilisez un type de volume qui prend en charge `securityContext.fsGroup`. Les volumes `hostPath` ne prennent pas en charge cette propriété, tandis que les volumes `local` et d’autres types de volumes la prennent en charge. Mettez à jour le `fsGroup` du pod de votre exécuteur pour qu’il corresponde au GID de l’exécuteur. Pour ce faire, mettez à jour les valeurs du graphique Helm `gha-runner-scale-set` pour inclure les éléments suivants. Remplacez `VERSION` par la version de l’image conteneur `actions-runner` que vous souhaitez utiliser.

  ```yaml copy
  template:
    spec:
      securityContext:
        fsGroup: 123
      containers:
        - name: runner
          image: ghcr.io/actions/actions-runner:latest
          command: ["/home/runner/run.sh"]
  ```

* Si la mise à jour de `securityContext` du pod de votre exécuteur n’est pas une solution viable, vous pouvez contourner le problème en utilisant `initContainers` pour modifier la propriété du volume monté, comme suit.

  ```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"]
  ```

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

Une erreur `401 Unauthorized` lors de la tentative d’obtention d’un jeton d’accès pour un GitHub App pourrait être le résultat d’une dérive du protocole NTP (Network Time Protocol). Assurez-vous que votre système Kubernetes se synchronise correctement avec un serveur NTP et qu’aucune dérive temporelle significative ne se produit. La marge de manœuvre est plus grande si l’heure de votre système est en retard par rapport à celle de GitHub, mais si l’environnement est en avance de plus de quelques secondes, des erreurs 401 se produiront lors de l’utilisation de GitHub App.

## Limites du groupe d’exécuteurs

Vous pouvez avoir un maximum de 10 000 exécuteurs auto-hébergés dans un groupe d’exécuteurs. Si cette limite est atteinte, l’ajout d’un nouvel exécuteur n’est pas possible.

## Mises à jour du runner

> \[!WARNING] Toutes les mises à jour publiées pour le logiciel, y compris les versions majeures, mineures ou correctives, sont considérées comme une mise à jour disponible. Si vous n’effectuez pas de mise à jour de logiciel dans les 30 jours, le service GitHub Actions ne met pas en file d’attente les travaux pour votre exécuteur. En outre, si une mise à jour de sécurité critique est requise, le service GitHub Actions ne met pas en file d’attente les travaux pour votre exécuteur tant qu’il n’a pas été mis à jour.

Vérifiez que votre version logicielle de l’exécuteur et/ou les images d’exécuteur personnalisées en cours d’utilisation exécutent la dernière version.

Pour plus d’informations, consultez « [Documentation de référence relative aux runners auto-hébergés](/fr/actions/reference/runners/self-hosted-runners) ».

## Mentions légales

Certaines parties ont été adaptées à partir de <https://github.com/actions/actions-runner-controller/> sous la licence Apache-2.0 :

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