跳至正文

GitLab Runner部署与配置手册(K8s + S3 缓存 + 监控)

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

操作步骤

  1. 进入 GitLab 项目 → Settings → CI/CD → Runners;
  2. 点击 “Create project runner” 按钮(Runners 标题栏右侧,三个点图标左边);
  3. 配置项:
    • Platform: 选择 Linux;
    • Tags: 填写标签(如 k8s-runner,按回车确认);
    • 选项: 勾选 “Run untagged jobs”(允许无标签 Job 运行);
  4. 点击底部 “Create runner”;
  5. 复制页面显示的 glrt- 开头的 Token(Step 1 下方的注册命令里)。

注册 Runner(可选)

gitlab-runner register  --url https://gitlab.infraserviceonline.com  --token glrt-bAS35dXTgETr8CzlCrwvgG86MQpwOjIKdDozCnU6MQ8.01.171d0vgfc

4. 解决日志 “Long polling issues” 警告

runner-values.yamlrunners.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 支持)。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注