Gitlab 管道、kubernetes 运行器 - 如何配置

问题描述 投票:0回答:3

我在 kubernetes 运行器中运行 docker 时遇到问题。 我已经安装了带有 helm 的 kubernetes runner 并将特权模式设置为 true

runners:
  config: |
    [[runners]]
      [runners.kubernetes]
        namespace = "{{.Release.Namespace}}"
        image = "ubuntu:20.04"
        privileged = true
        allow_privilege_escalation = true 

我创建了简单的

.gitlab-ci.yaml
用于测试

stages:
  - docker_test

services:
  - docker:dind

docker_test:
  stage: docker_test
  image: docker:latest
  variables:
      DOCKER_HOST: "tcp://docker:2375"
  script:
  - docker version

但是当我启动这个管道时,我遇到了错误

Running with gitlab-runner 14.6.0 (5316d4ac)
  on gitlab-runner-gitlab-runner-5cc654bdf7-gjfvm augRojS5
Preparing the "kubernetes" executor
00:00
Using Kubernetes namespace: gitlab-runner
Using Kubernetes executor with image docker:latest ...
Using attach strategy to execute scripts...
Preparing environment
00:06
Waiting for pod gitlab-runner/runner-augrojs5-project-30333904-concurrent-0k66kk to be running, status is Pending
Waiting for pod gitlab-runner/runner-augrojs5-project-30333904-concurrent-0k66kk to be running, status is Pending
    ContainersNotReady: "containers with unready status: [build helper svc-0]"
    ContainersNotReady: "containers with unready status: [build helper svc-0]"
Running on runner-augrojs5-project-30333904-concurrent-0k66kk via gitlab-runner-gitlab-runner-5cc654bdf7-gjfvm...
Getting source from Git repository
00:03
Fetching changes with git depth set to 50...
Initialized empty Git repository in /builds/gurita/gurita-core/.git/
Created fresh repository.
Checking out fe720f2f as main...
Skipping Git submodules setup
Executing "step_script" stage of the job script
00:00
$ docker version
Client:
 Version:           20.10.12
 API version:       1.41
 Go version:        go1.16.12
 Git commit:        e91ed57
 Built:             Mon Dec 13 11:40:57 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true
Cannot connect to the Docker daemon at tcp://docker:2375. Is the docker daemon running?
Cleaning up project directory and file based variables
00:01
ERROR: Job failed: command terminated with exit code 1

我尝试设置不带变量,但在这种情况下没有 /var/run/docker.sock。

docker kubernetes gitlab-ci-runner
3个回答
1
投票

感谢您关于安装 docker.sock 的提示。

这对我有用

runners:
  config: |
    [[runners]]
      [runners.kubernetes]
        image = "ubuntu:20.04"
        privileged = true
      [[runners.kubernetes.volumes.empty_dir]]
        name = "docker-emptydir"
        mount_path = "/var/run"
        medium = "Memory"

再次感谢


1
投票

需要挂载主机的docker socket:

[runners.kubernetes]
  image = "ubuntu:18.04"
  privileged=true
  [[runners.kubernetes.volumes.host_path]]
    name = "docker-socket"
    mount_path = "/var/run/docker.sock"
    read_only = false
    host_path = "/var/run/docker.sock"

(注意:这是我旧的 gitlab 安装之一,我还没有针对最新版本对此进行测试)

这是我完整的跑步者块。您可以将我的配置替换为您的配置(首先备份旧配置)并查看它是否有效。显然,根据需要进行更改 - 例如,我使用特定的节点池,因此有

node_selector
node_tolerations
部分

## Installation & configuration of gitlab/gitlab-runner
## See requirements.yaml for current version
gitlab-runner:
  install: true
  rbac:
    create: true
  runners:
    locked: false
    privileged: true
    cache:
      secretName: google-application-credentials
    config: |
      [[runners]]
        [runners.feature_flags]
          FF_GITLAB_REGISTRY_HELPER_IMAGE = true
          FF_SKIP_DOCKER_MACHINE_PROVISION_ON_CREATION_FAILURE = true
        [runners.kubernetes]
          image = "ubuntu:18.04"
          privileged=true
          [[runners.kubernetes.volumes.host_path]]
            name = "docker-socket"
            mount_path = "/var/run/docker.sock"
            read_only = false
            host_path = "/var/run/docker.sock"
          [runners.kubernetes.node_selector]
            "cloud.google.com/gke-nodepool" = "gitlab-runners"
          [runners.kubernetes.node_tolerations]
            "appName=gitlab" = "NoExecute"
        {{- if .Values.global.minio.enabled }}
        [runners.cache]
          Type = "gcs"
          Path = "gitlab-runner"
          Shared = true
          [runners.cache.gcs]
            BucketName = "runner-cache"
        {{ end }}
  podAnnotations:
    gitlab.com/prometheus_scrape: "true"
    gitlab.com/prometheus_port: 9252


0
投票

谢谢你。

[runners.kubernetes]
  image = "ubuntu:18.04"
  privileged=true
  [[runners.kubernetes.volumes.host_path]]
    name = "docker-socket"
    mount_path = "/var/run/docker.sock"
    read_only = false
    host_path = "/var/run/docker.sock"

这对我也有用。

© www.soinside.com 2019 - 2024. All rights reserved.