繁体   English   中英

使用多个 docker 守护进程运行 gitlab-runner

[英]Running gitlab-runner with multiple docker daemons

我试图让几个 gitlab 跑步者在同一主机上使用不同的 docker 守护进程

目前使用 gitlab-runner 10.7.0 和 docker 19.03.3。 目标是最大限度地利用资源。 由于我的机器上有两个 SSD 磁盘,我希望跑步者同时使用它们。 我发现让一些运行者使用一个磁盘而另一些运行者使用另一个磁盘的唯一方法是拥有两个 docker 守护程序,每个磁盘上运行一个。

我有一个 docker 守护程序在unix:///var/run/docker-1.sock上运行,一个在unix:///var/run/docker-2.sock上运行。 他们使用每个手动创建的专用网桥。 (systemd)启动命令行看起来像/usr/bin/dockerd --host unix:///var/run/docker_socket/docker-%i.sock --containerd=/run/containerd/containerd.sock --pidfile /var/run/docker-%i.pid --data-root /data/local%i/docker/ --exec-root /data/local%i/docker_run/ --bridge docker-%i --fixed-cidr 172.%i0.0.1/17

gitlab-runner docker 在 docker-1.sock 上运行。 我尝试让每个 docker 守护进程运行一个,但是尽管限制设置为 1,但随后两个作业在同一个运行器上运行(并且有时还会出现一些错误,例如ERROR: Job failed (system failure): Error: No such container: ... )

注册后 config.toml 看起来像:

concurrent = 20
check_interval = 0

[[runners]]
  name = "[...]-large"
  limit = 1
  output_limit = 32768
  url = "[...]"
  token = "[...]"
  executor = "docker"
  [runners.docker]
    host = "unix:///var/run/docker-1.sock"
    tls_verify = false
    image = "debian:jessie"
    memory = "24g"
    cpuset_cpus = "1-15"
    privileged = false
    security_opt = ["seccomp=unconfined"]
    disable_cache = false
    volumes = ["/var/run/docker-1.sock:/var/run/docker.sock"]
    shm_size = 0
  [runners.cache]


[[runners]]
  name = "[...]-medium-1"
  limit = 1
  output_limit = 32768
  url = "[...]"
  token = "[...]"
  executor = "docker"
  [runners.docker]
    host = "unix:///var/run/docker-2.sock"
    tls_verify = false
    image = "debian:jessie"
    memory = "12g"
    cpuset_cpus = "20-29"
    privileged = false
    security_opt = ["seccomp=unconfined"]
    disable_cache = false
    volumes = ["/var/run/docker-2.sock:/var/run/docker.sock"]
    shm_size = 0
  [runners.cache]

两个 docker 守护程序工作正常。 使用docker --host unix:///var/run/docker-<id>.sock ps

当前的解决方案似乎还不错,但是 gitlab_runner 日志中有随机错误: ERROR: Appending trace to coordinator... error couldn't execute PATCH against http://[...]/api/v4/jobs/223116/trace: Patch http://[...]/api/v4/jobs/223116/trace: read tcp [...] read: connection reset by peer runner=0ec8a845

其他人尝试了这个,显然取得了一些成功:

注意:Docker 文档说该功能是实验性的: https://docs.docker.com/engine/reference/commandline/dockerd/#run-multiple-multiple-

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM