1. Runner 配置文件(runner-values.yaml)
# 针对独立安装 gitlab/gitlab-runner chart 的 values
gitlabUrl: https://gitlab.infraserviceonline.com
runnerToken: "glrt-bAS35dXTgETr8CzlCrwvgG86MQpwOjIKdDozCnU6MQ8.01.171d0vgfc"
rbac:
create: true
# 1. 控制器 Pod 的固定数量(通常设为 1 或 2 即可)
replicas: 1
# 2. 核心并发控制
concurrent: 50 # 整个 Runner 实例允许同时运行的 Job 总数
service:
enabled: true
type: ClusterIP
runners:
config: |
[[runners]]
[runners.kubernetes]
namespace = "gitlab"
image = "ubuntu:22.04"
privileged = true
# 即使你不开启 MinIO,也可以保留这个结构,方便以后加 S3 缓存
[runners.cache]
Type = "s3"
Path = "gitlab-runner"
Shared = true
[runners.cache.s3]
ServerAddress = "rook-ceph-rgw-s3-store.rook-ceph.svc"
BucketName = "ceph-bkt-aad0791f-76df-43d3-9313-cca489d46ead"
Insecure = true # 内部 RGW 如果没装证书请设为 true
# 对应你看到的官方 Annotation,用于监控
#podAnnotations:
# gitlab.com/prometheus_scrape: "true"
# gitlab.com/prometheus_port: "9252"
# 5. 如果你的节点有污点,补上容忍度
tolerations:
- key: "ceph-taint"
operator: "Equal"
value: "osd"
effect: "NoSchedule"
metrics:
enabled: true
port: 9252
serviceMonitor:
enabled: false # 我们手动建,因为 Helm 渲染逻辑可能有之前一样的“拦截”问题
2. 安装 GitLab Runner
helm install gitlab-runner gitlab/gitlab-runner -n gitlab -f runner-values.yaml
3. 创建 Project Runner 并获取 Token
操作步骤
- 进入 GitLab 项目 → Settings → CI/CD → Runners;
- 点击 “Create project runner” 按钮(Runners 标题栏右侧,三个点图标左边);
- 配置项:
- Platform: 选择 Linux;
- Tags: 填写标签(如 k8s-runner,按回车确认);
- 选项: 勾选 “Run untagged jobs”(允许无标签 Job 运行);
- 点击底部 “Create runner”;
- 复制页面显示的 glrt- 开头的 Token(Step 1 下方的注册命令里)。
注册 Runner(可选)
gitlab-runner register --url https://gitlab.infraserviceonline.com --token glrt-bAS35dXTgETr8CzlCrwvgG86MQpwOjIKdDozCnU6MQ8.01.171d0vgfc
4. 解决日志 “Long polling issues” 警告
在 runner-values.yaml 的 runners.config 里的 [[runners]] 段落添加:
[[runners]]
request_concurrency = 2 # 新增:提升请求并发数,解决性能提醒
[runners.kubernetes]
# 原有配置不变...
5. 测试 Pipeline(.gitlab-ci.yml)
基础测试(K8s 环境验证)
stages:
- test
hello-k8s:
stage: test
script:
- echo "Running in Kubernetes Pod!"
- uname -a
- sleep 10 # 留点时间让你在命令行看到动态生成的 Pod
观察点
- 网页端:项目 → Build → Pipelines,任务状态从 pending → running;
- 命令行:
kubectl -n gitlab get pods,能看到临时 Pod(名字类似 runner-xxxx-project-xxx-job-xxx); - 验证:任务返回
Job succeeded表示链路打通。
Podman 测试
podman-test:
image: quay.io/podman/stable # 只要指定这个镜像,环境就有了
script:
- podman --version
- echo "正在 Pod 内部拉取一个测试镜像..."
- podman pull alpine:latest
- podman images
- echo "Podman 运行成功,宿主机依然干干净净!"
存储驱动兼容(报错时修改)
podman-test:
image: quay.io/podman/stable
script:
- podman --storage-driver=vfs pull alpine:latest # 强制指定存储驱动
- podman images
6. 配置 Runner ServiceMonitor 监控
cat <<EOF | kubectl apply -f -
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: gitlab-runner-monitor
namespace: gitlab
labels:
# 必须匹配你 Prometheus 实例的 serviceMonitorSelector
release: prometheus-operator
spec:
# 精准匹配 Runner Service Labels
selector:
matchLabels:
app: gitlab-runner
release: gitlab-runner
namespaceSelector:
matchNames:
- gitlab
endpoints:
- port: metrics # 对应 Service 里的 name: metrics
path: /metrics
interval: 30s
honorLabels: true
EOF
进阶建议
如果后续需要在 CI 中打包 Docker 镜像,在 .gitlab-ci.yml 中添加 services: - docker:dind(已开启 privileged: true 支持)。