Запуск gitlab-runner с несколькими демонами-докерами - PullRequest
2 голосов
/ 14 октября 2019

Я пытаюсь иметь несколько бегунов gitlab, использующих разные демоны докера на одном хосте

В настоящее время использую gitlab-runner 10.7.0 и докер 19.03.3. Цель состоит в том, чтобы максимально использовать ресурсы. Поскольку у меня есть два SSD-диска на машине, я хочу, чтобы бегуны использовали их оба. Единственный способ, как я обнаружил, что некоторые бегуны используют один диск, в то время как другие используют другой диск, это иметь два демона докера, по одному на каждом диске.

У меня есть один демон докера, работающий на 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 монтирует /var/run/docker_socket/ и работает на docker-1.sock. Я пытался иметь по одному демону для каждого докера, но затем два задания выполняются на одном и том же бегуне, хотя ограничение установлено на 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 --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

1 Ответ

0 голосов
/ 14 октября 2019

Другие люди пробовали это, по-видимому, с некоторым успехом:

Примечание: документация Docker гласит, что эта функция экспериментальная : https://docs.docker.com/engine/reference/commandline/dockerd/#run-multiple-daemons

...