Skip to main content

Résolution des erreurs d’Actions Runner Controller

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

Mentions légales

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

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 l’écouteur

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

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.

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 journaux du pod du contrôleur, vous pouvez utiliser la commande suivante.

Bash
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
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, 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 auprès de l’API GitHub » et « Déploiement de groupes identiques d’exécuteurs avec 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 exécuteurs 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.

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 s’exécute avec un utilisateur non racine et provoque une incompatibilité des 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
    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
    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"]
    

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

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.