跳至主要内容

排查 Actions Runner Controller 错误

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

法律声明

日志记录

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 服务器。

如果您配置了代理,或者使用自动注入的 sidecar 代理(例如 Istio),请确保它已配置为允许来自控制器容器(管理器)到 Kubernetes API 服务器的流量。

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

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

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

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

运行器收到信号和监听器收到信号之间可能会有轻微的延迟。当运行器 Pod 开始终止时,监听器会尝试启动新的运行器以匹配其状态中所需的运行器数量。但是,当监听器收到取消信号时,它将采取措施减少运行器数量。最终,监听器将缩减到所需的运行器数量。在此期间,您可能会看到额外的运行器。

错误:名称必须最多包含 n 个字符

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

错误:拒绝访问路径 /home/runner/_work/_tool

如果您使用的是带有持久卷的 Kubernetes 模式,则可能会看到此错误。如果运行器容器以非 root 用户身份运行,并且导致与挂载的卷发生权限不匹配,则会发生此错误。

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

  • 使用支持 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"]
    

部分内容已从 https://github.com/actions/actions-runner-controller/ 移植,并根据 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.