Как применить родительскую группу в Docker Swarm?

Docker swarm не поддерживает cgroup_parent согласно документации: https://docs.docker.com/compose/compose-file/#cgroup_parent Мне нужно установить ограничения ресурсов для всего набора контейнеров докеров, работающих на определенном хосте (а не только на ограничения контейнера). Запуск ванильного Docker (не в режиме Swarm) позволяет иметь родительские группы cgroups:

docker run -it --rm --cgroup-parent=/climit-cgroup/ <<image-name>>

или если вы используете файл docker compose, используя cgroup_parent.

Но запуск docker-контейнеров в узле swarm не дает такой возможности. Каковы возможные решения этой проблемы в рамках Docker Swarm? Есть ли способ принудительно применить существующую контрольную группу на узле роя текущего хоста?


person Dmitry191    schedule 13.09.2019    source источник
comment
У меня такой же вопрос. Боюсь, что эта функция вообще недоступна для Docker Swarm.   -  person Robert Schwarz    schedule 14.05.2020


Ответы (1)


Я пытаюсь использовать cgroups на уровне демона с systemd

Файл: /etc/systemd/system/dockerdaemon.slice

[Unit]
Description=Slice with MemoryLimit=800M for docker
Before=slices.target

[Slice]
MemoryAccounting=true
MemoryLimit=800M

Измените /etc/docker/daemon.json и добавьте

"cgroup-parent": "dockerdaemon.slice"

потом

systemctl daemon-reload ; service docker restart

Затем /etc/systemd/system/docker.service.d/docker.conf

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
Slice=dockerdaemon.slice
MemoryMax=800M

sudo systemctl status docker
docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/docker.service.d
           └─docker.conf
   Active: active (running) since Thu 2020-08-20 08:58:45 UTC; 1h 32min ago
     Docs: https://docs.docker.com
 Main PID: 12718 (dockerd)
    Tasks: 17
   CGroup: /dockerdaemon.slice/docker.service
           └─12718 /usr/bin/dockerd

Я также проверяю

/sys/fs/cgroup/memory/dockerdaemon.slice/docker.service# cat memory.limit_in_bytes 
838860800

Таким образом, похоже, что демон захватывает контрольную группу, но когда я создаю контейнеры размером более 800 МБ, докер не предотвращает этого. Также информация о системе докеров по-прежнему видит всю память

Так что мне кажется, что это не работает или, может быть, я что-то не так

person javier Aladid    schedule 20.08.2020