跳至主要内容

Actions 运行器控制器错误故障排除

了解如何排查 Actions 运行器控制器的错误。

法律声明

日志记录

Actions 运行器控制器 (ARC) 资源(包括控制器、侦听器和运行器)将日志写入标准输出 (stdout)。我们建议您实现日志记录解决方案来收集和存储这些日志。拥有可用的日志可以帮助您或 GitHub 支持人员进行故障排除和调试。有关更多信息,请参阅 Kubernetes 文档中的日志记录架构

资源标签

标签会添加到 Actions 运行器控制器创建的资源中,其中包括控制器、侦听器和运行器 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 运行器控制器部署运行器规模集”。

取消工作流运行后重新创建运行器 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"]
    

部分内容已根据 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.