Skip to main content

排查 Actions Runner Controller 的错误

了解如何排查 Actions Runner Controller 的错误。

法律通告

Logging

Actions Runner Controller (ARC) 资源(包括控制器、侦听器和运行器)将日志写入标准输出 (stdout)。 我们建议实施日志记录解决方案来收集和存储这些日志。 日志有助于你或 GitHub 支持进行故障排除和调试。 有关详细信息,请参阅 Kubernetes 文档中的日志记录体系结构

资源标签

Actions Runner Controller 创建的资源将添加标签,包括控制器、侦听器和运行器 Pod。 可以使用这些标签来筛选资源并帮助进行故障排除。

控制器 Pod

以下标签适用于控制器 Pod。

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

以下标签适用于侦听器 Pod。

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

以下标签适用于运行器 Pod。

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

查看控制器和运行器集侦听器的日志

若要查看控制器 Pod 的日志,可以使用以下命令。

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

若要查看运行器集侦听器的日志,可以使用以下命令。

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

使用 master 分支中的图表

建议使用最新版本而不是 master 分支中的图表。 master 分支是高度不稳定的,我们无法保证 master 分支中的图表在任何时候都能正常工作。

排查侦听器 Pod 的故障

如果控制器 Pod 正在运行,但侦听器 Pod 未运行,请先检查控制器的日志,看看是否存在任何错误。 如果没有错误,并且运行器集侦听器 Pod 仍未运行,请确保控制器 Pod 有权访问群集中的 Kubernetes API 服务器。

如果你配置了代理,或者使用的是自动注入的挎斗代理(如 Istio),请确保将它配置为允许流量从控制器容器(管理器)传输到 Kubernetes API 服务器。

如果已安装自动缩放运行器集,但未创建侦听器 Pod,请验证你提供的 githubConfigSecret 是否正确,以及提供的 githubConfigUrl 是否准确。 有关详细信息,请参阅“向 GitHub API 进行身份验证”和“使用 Actions Runner Controller 部署运行器规模集”。

取消工作流运行后,重新创建了运行器 Pod

取消工作流运行后,会发生以下事件。

  • 取消信号直接发送到运行器。
  • 运行器应用程序终止,这也将导致运行器 Pod 终止。
  • 在下次轮询中,侦听器会收到取消信号。

在运行器收到信号与侦听器收到信号之间可能会有一点延迟。 当运行器 Pod 开始终止时,侦听器会尝试启动新的运行器,根据它所处的状态来匹配所需的运行器数量。 但是,当侦听器收到取消信号时,它将采取行动,减少运行器的数量。 最终,侦听器将缩减到所需的运行器数量。 在此期间,你可能会看到额外的运行器。

错误:Name must have up to n characters

ARC 使用某些资源的生成名称作为其他资源的标签。 由于这一要求,ARC 将资源名称限制为 63 个字符。

由于资源名称的一部分是由你定义的,因此 ARC 对可用于安装名称和命名空间的字符数施加了限制。

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

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

如果将 Kubernetes 模式用于永久卷,可能会看到此错误。 如果运行器容器与非根用户一起运行,并且导致权限与装载的卷不匹配,就会发生此错误。

要解决此问题,可以执行以下操作之一。

  • 使用支持 securityContext.fsGroup 的卷类型。 hostPath 卷不支持此属性,而 local 卷和其他类型的卷支持此属性。 更新运行器 Pod 的 fsGroup 以匹配运行器的 GID。 为此,可以更新 gha-runner-scale-set helm 图表值来包含以下内容。 将 VERSION 替换为要使用的 actions-runner 容器映像的版本。

    YAML
    spec:
        securityContext:
            fsGroup: 123
        containers:
        - name: runner
        image: ghcr.io/actions/actions-runner:latest
        command: ["/home/runner/run.sh"]
    
  • 如果更新运行器 Pod 的 securityContext 不是可行的解决方案,可以使用 initContainers 更改已装载卷的所有权来解决此问题,如下所示。

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

部分内容改编自 Apache-2.0 许可证下的 https://github.com/actions/actions-runner-controller/

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.