本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

self-hosted-k8s-runner 是一个在 Kubernetes 集群中部署自托管 GitHub Actions Runner 的解决方案,旨在提供灵活、可扩展的工作流执行环境。该方案通过容器化方式运行 GitHub Actions Runner,结合 Kubernetes 的编排能力,实现 runners 的动态管理、自动扩缩容及生命周期控制,适用于需要自定义执行环境或对资源、网络有特定要求的场景。
repo(仓库级)或 admin:org(组织级)权限,用于 runner 注册。添加 Helm 仓库
helm repo add self-hosted-k8s-runner [***] helm repo update
创建配置文件
创建 values.yaml 配置 runner 基本信息(示例内容见 4.4 节):
github: owner: "<your-github-org-or-username>" # 组织/用户名 repository: "<your-repo-name>" # 可选,指定仓库(不填则为组织级 runner) token: "<your-github-pat>" # GitHub PAT(通过 Secret 注入更安全,见 4.3 节) runner: labels: ["k8s-runner", "custom-label"] # 自定义标签 resources: requests: cpu: "1" memory: "2Gi" limits: cpu: "2" memory: "4Gi" autoscaling: enabled: true minReplicas: 1 maxReplicas: 5
部署 Helm Chart
helm install my-runner self-hosted-k8s-runner/self-hosted-k8s-runner -f values.yaml --namespace github-runner --create-namespace
创建 Secret 存储敏感信息
# github-secret.yaml apiVersion: v1 kind: Secret metadata: name: github-runner-secret namespace: github-runner type: Opaque data: GITHUB_TOKEN: <base64-encoded-pat> # 替换为 PAT 的 Base64 编码值
应用配置:
kubectl apply -f github-secret.yaml -n github-runner
部署 Runner Deployment
创建 runner-deployment.yaml(核心配置示例):
apiVersion: apps/v1 kind: Deployment metadata: name: github-runner namespace: github-runner spec: replicas: 2 # 初始 runner 数量 selector: matchLabels: app: github-runner template: metadata: labels: app: github-runner spec: containers: - name: runner image: machinelearningapps/self-hosted-k8s-runner:latest # 官方镜像 env: - name: GITHUB_OWNER value: "<your-github-org>" # 组织名或用户名 - name: GITHUB_REPOSITORY value: "<your-repo>" # 可选,指定仓库(不填则为组织级) - name: GITHUB_TOKEN valueFrom: secretKeyRef: name: github-runner-secret key: GITHUB_TOKEN - name: RUNNER_LABELS value: "k8s,linux,x64" # 自定义标签 resources: requests: cpu: "1" memory: "2Gi" limits: cpu: "2" memory: "4Gi"
应用部署:
kubectl apply -f runner-deployment.yaml -n github-runner
通过 Kubernetes HPA(Horizontal Pod Autoscaler)实现基于工作流队列的自动扩缩容:
# hpa.yaml apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: github-runner-hpa namespace: github-runner spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: github-runner minReplicas: 1 maxReplicas: 10 metrics: - type: External external: metric: name: github_actions_queue_length selector: matchLabels: owner: "<your-github-org>" repository: "<your-repo>" # 可选 target: type: Value value: 2 # 每个 runner 处理的队列长度阈值
应用 HPA 配置:
kubectl apply -f hpa.yaml -n github-runner
| 环境变量名 | 说明 | 必填 | 默认值 |
|---|---|---|---|
GITHUB_OWNER | GitHub 组织名或用户名(如 my-org 或 my-user) | 是 | - |
GITHUB_REPOSITORY | 目标仓库名(如 my-repo,仅仓库级 runner 需填) | 否 | - |
GITHUB_TOKEN | GitHub 个人访问令牌(需 repo 或 admin:org 权限) | 是 | - |
RUNNER_NAME | Runner 名称(支持模板,如 runner-${POD_NAME}) | 否 | runner-${RANDOM} |
RUNNER_LABELS | 逗号分隔的 runner 标签(如 k8s,linux) | 否 | self-hosted |
RUNNER_WORK_DIR | 工作目录路径 | 否 | /home/runner/_work |
RUNNER_EPHEMERAL | 是否为一次性 runner(完成任务后销毁,true/false) | 否 | false |
HTTP_PROXY/HTTPS_PROXY | 网络代理地址(如 [***]) | 否 | - |
通过 Helm 部署时,可通过 values.yaml 自定义以下关键参数:
# 基础配置 github: owner: "my-org" # 组织/用户名 repository: "my-repo" # 可选,仓库名 token: "" # 建议通过 --set-file 或 Secret 注入 # Runner 配置 runner: name: "runner-{{ .Release.Name }}-{{ .Pod.Name }}" # 名称模板 labels: "k8s,helm" # 标签 ephemeral: false # 一次性 runner workDir: "/home/runner/_work" # 工作目录 # 资源配置 resources: requests: cpu: "1" memory: "2Gi" limits: cpu: "2" memory: "4Gi" # 扩缩容配置 autoscaling: enabled: true # 启用 HPA minReplicas: 1 maxReplicas: 10 targetQueueLength: 2 # 队列长度阈值
helm install github-runner self-hosted-k8s-runner/self-hosted-k8s-runner \ --namespace github-runner --create-namespace \ --set github.owner=my-org \ --set github.token=$(cat ./github-pat.txt) \ # 从文件读取 PAT --set runner.labels=k8s,org-runner \ --set autoscaling.enabled=true
# 完整部署示例(仓库级 runner) apiVersion: v1 kind: Namespace metadata: name: github-runner --- apiVersion: v1 kind: Secret metadata: name: github-runner-secret namespace: github-runner type: Opaque data: GITHUB_TOKEN: <base64-encoded-pat> # 替换为实际 PAT 的 Base64 编码 --- apiVersion: apps/v1 kind: Deployment metadata: name: github-runner namespace: github-runner spec: replicas: 2 selector: matchLabels: app: github-runner template: metadata: labels: app: github-runner spec: containers: - name: runner image: machinelearningapps/self-hosted-k8s-runner:latest env: - name: GITHUB_OWNER value: "my-user" - name: GITHUB_REPOSITORY value: "my-repo" - name: GITHUB_TOKEN valueFrom: secretKeyRef: name: github-runner-secret key: GITHUB_TOKEN - name: RUNNER_LABELS value: "repo-runner,linux" - name: RUNNER_EPHEMERAL value: "true" resources: requests: cpu: "500m" memory: "1Gi" limits: cpu: "1" memory: "2Gi"
GITHUB_TOKEN 权限(需 repo 或 admin:org)、网络连通性(能否访问 api.github.com)。github_actions_queue_length 指标是否可用,调整 HPA 目标阈值。kubectl logs <pod-name>),检查工作流步骤与 runner 环境是否兼容。RUNNER_LABELS 匹配工作流标签,或自定义 runner 镜像预装依赖。免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429