Я пытаюсь иметь несколько бегунов 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