Skip to main content

Solución de errores de Actions Runner Controller

Obtén información sobre cómo solucionar errores de Actions Runner Controller.

Aviso legal

Registro

Los recursos de Actions Runner Controller (ARC), entre los que se incluyen el controlador, el cliente de escucha y los ejecutores, escriben registros en la salida estándar (stdout). Te recomendamos que implementes una solución de registro para recopilar y almacenar estos registros. El hecho de tener disponibles los registros puede facilitarte a ti o al soporte técnico de GitHub la solución de problemas y la depuración. Para obtener más información, consulta Arquitectura de registro en la documentación de Kubernetes.

Etiquetas de recursos

Se agregan etiquetas a los recursos que crea Actions Runner Controller, entre los que se incluyen el controlador, el cliente de escucha y los pods del ejecutor. Puedes usar estas etiquetas para filtrar los recursos y como ayuda para solucionar problemas.

Pod del controlador

Las etiquetas siguientes se aplican al pod del controlador.

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 del cliente de escucha

Las etiquetas siguientes se aplican a los pods del cliente de escucha.

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 del ejecutor

Las etiquetas siguientes se aplican a los pods del ejecutor.

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

Comprobación de los registros del controlador y del cliente de escucha del conjunto de ejecutores

Para comprobar los registros del pod del controlador, puedes usar el comando siguiente.

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

Para comprobar los registros del cliente de escucha del conjunto de ejecutores, puedes usar el comando siguiente.

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

Uso de los gráficos de la rama master

Te recomendamos que uses los gráficos de la versión más reciente en lugar de la rama master. La rama master es muy inestable y no podemos garantizar que los gráficos de la rama master funcionen en un momento dado.

Solución de problemas del pod del agente de escucha

Si el pod del controlador se está ejecutando, pero no el pod del cliente de escucha, inspecciona primero los registros del controlador y comprueba si hay errores. Si no hay errores y el pod del cliente de escucha del conjunto de ejecutores todavía no se está ejecutando, asegúrate de que el pod del controlador tenga acceso al servidor de la API de Kubernetes en el clúster.

Si tienes un proxy configurado o si usas un proxy sidecar que se inserta automáticamente, como Istio, asegúrate de que está configurado para permitir el tráfico desde el contenedor del controlador (administrador) al servidor de la API de Kubernetes.

Si has instalado el conjunto de ejecutores de escalado automático, pero no se ha creado el pod del cliente de escucha, comprueba que el valor de githubConfigSecret que has proporcionado es correcto, así como el valor de githubConfigUrl. Para obtener más información, consulta "Autenticación en la API de GitHub" y "Implementación de conjuntos de escalado de ejecutor con Actions Runner Controller".

Los pods del ejecutor se vuelven a crear tras una ejecución de flujo de trabajo cancelada

Cuando se cancela la ejecución de un flujo de trabajo, se producen los eventos siguientes.

  • La señal de cancelación se envía directamente a los ejecutores.
  • La aplicación del ejecutor finaliza, con lo que también finalizan los pods del ejecutor.
  • En el sondeo siguiente, el cliente de escucha recibe la señal de cancelación.

Puede haber un ligero retraso entre el momento en que los ejecutores reciben la señal y el momento en que el cliente de escucha la recibe. Cuando los pods del ejecutor empiezan a terminar, el cliente de escucha intenta abrir nuevos ejecutores para que coincidan con el número deseado de ejecutores según el estado en el que se encuentra. Pero cuando el cliente de escucha reciba la señal de cancelación, actuará para reducir el número de ejecutores. Finalmente, el cliente de escucha reducirá el número de ejecutores a la cantidad deseada. Mientras tanto, es posible que veas ejecutores adicionales.

Error: Name must have up to n characters

ARC usa los nombres generados de determinados recursos como etiquetas para otros recursos. Debido a este requisito, ARC limita los nombres de los recursos a 63 caracteres.

Dado que te corresponde definir una parte del nombre del recurso, ARC impone un límite en el número de caracteres que se pueden usar para el nombre de la instalación y el espacio de nombres.

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

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

Es posible que veas este error si usas el modo de Kubernetes con volúmenes persistentes. Este error se produce si el contenedor del ejecutor se ejecuta con un usuario no raíz y provoca una discrepancia de permisos con el volumen montado.

Para corregir esto, puedes realizar una de las acciones siguientes.

  • Usa un tipo de volumen que admita securityContext.fsGroup. Los volúmenes hostPath no admiten esta propiedad, mientras que los volúmenes local y otros tipos de volúmenes sí la admiten. Actualiza el valor fsGroup del pod del ejecutor para que coincida con el GID del ejecutor. Para ello, actualiza los valores del gráfico de Helm gha-runner-scale-set para incluir lo siguiente. Reemplaza VERSION por la versión de la imagen de contenedor actions-runner que quieres usar.

    YAML
    spec:
        securityContext:
            fsGroup: 123
        containers:
        - name: runner
        image: ghcr.io/actions/actions-runner:latest
        command: ["/home/runner/run.sh"]
    
  • Si la actualización de securityContext del pod del ejecutor no es una solución viable, puedes solucionar el problema mediante el uso de initContainers para cambiar la propiedad del volumen montado, como se indica a continuación.

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

Algunas partes se han adaptado a partir de https://github.com/actions/actions-runner-controller/ con licencia 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.