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.
kubectl logs -n <CONTROLLER_NAMESPACE> -l app.kubernetes.io/name=gha-runner-scale-set-controller
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.
kubectl logs -n <CONTROLLER_NAMESPACE> -l auto-scaling-runner-set-namespace=arc-systems -l auto-scaling-runner-set-name=arc-runner-set
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úmeneshostPath
no admiten esta propiedad, mientras que los volúmeneslocal
y otros tipos de volúmenes sí la admiten. Actualiza el valorfsGroup
del pod del ejecutor para que coincida con el GID del ejecutor. Para ello, actualiza los valores del gráfico de Helmgha-runner-scale-set
para incluir lo siguiente. ReemplazaVERSION
por la versión de la imagen de contenedoractions-runner
que quieres usar.YAML spec: securityContext: fsGroup: 123 containers: - name: runner image: ghcr.io/actions/actions-runner:latest command: ["/home/runner/run.sh"]
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 deinitContainers
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"]
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"]
Aviso legal
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.