SystemdDoctor
мешает работе docker cgroup

Docker и kubelet: несовпадение драйвера cgroup

Docker может управлять контрольными группами двумя способами: через собственный драйвер или через systemd. Если драйвер не совпадает с тем, что использует система, ограничения ресурсов применяются непоследовательно, а kubelet отказывается работать.

Что это значит

Рекомендация простая: на системах с systemd драйвер тоже должен быть systemd. Тогда всё дерево контрольных групп управляется одним хозяином, и ограничения не расходятся.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. В daemon.json не задан драйвер systemd

    По умолчанию Docker использует собственный драйвер. На системе с systemd это приводит к двум хозяевам дерева групп.

  2. Смешанная иерархия контрольных групп

    На системе, где часть контроллеров работает по первой версии, поведение ограничений неполное независимо от драйвера.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Текущий драйвер и версия иерархии.

docker info | grep -i -E "cgroup (driver|version)"

Тип файловой системы контрольных групп: cgroup2fs означает вторую версию.

stat -fc %T /sys/fs/cgroup

Предупреждения демона о драйвере.

journalctl -u docker -n 30 --no-pager | grep -i cgroup

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. В daemon.json не задан драйвер systemd
Почему происходит
По умолчанию Docker использует собственный драйвер. На системе с systemd это приводит к двум хозяевам дерева групп.
Как проверить
Посмотрите текущий драйвер.
docker info 2>/dev/null | grep -i "cgroup driver"
Как исправить
Укажите драйвер systemd в daemon.json и перезапустите демон.
# /etc/docker/daemon.json
# {"exec-opts": ["native.cgroupdriver=systemd"]}
sudo systemctl restart docker
2. Смешанная иерархия контрольных групп
Почему происходит
На системе, где часть контроллеров работает по первой версии, поведение ограничений неполное независимо от драйвера.
Как проверить
Определите версию иерархии.
stat -fc %T /sys/fs/cgroup
docker info 2>/dev/null | grep -i "cgroup version"
Как исправить
Переведите систему на единую иерархию второй версии параметром ядра и перезагрузитесь.

Пример вывода

Docker использует собственный драйвер на системе с systemd. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

$ docker info | grep -i cgroup
 Cgroup Driver: cgroupfs
 Cgroup Version: 2

kubelet[2100]: misconfiguration: kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs"

Связанные ошибки

Где встречается чаще всего

Источники

  • Документация Docker: драйверы контрольных групп документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Проверено на Ubuntu 24.04: по умолчанию используется cgroupfs.
    собственная проверка, systemd 255
    сверено 15 сентября 2026