我目前正在尝试配置或多或少全新安装的 CentOS Stream (8),以将 cgroup 控制器委托给非特权用户。然而,我在这方面失败了,我已经在网上搜索了两天,但找不到有相同或类似问题的人。
我想使用 podman 运行无根容器。然而,我失败了,因为非特权用户需要拥有 cgroup control pids
。然而,以下命令不会产生任何结果,表明没有可用的 cgroup 控制器:
$ cat /sys/fs/cgroup/user.slice/user-$(id -u).slice/user@$(id -u).service/cgroup.controllers
据我了解,此命令应该在默认配置中产生类似这样的结果(请参阅docker.com):
$ cat /sys/fs/cgroup/user.slice/user-$(id -u).slice/user@$(id -u).service/cgroup.controllers
memory pids
当然,我已经使用systemd.unified_cgroup_hierarchy=1
in启用了 cgroups v2/etc/default/grub
并使用grub2-mkconfig
.
所以,我尝试了以下描述的命令docker.com:
# mkdir -p /etc/systemd/system/[email protected]
# cat > /etc/systemd/system/[email protected]/delegate.conf << EOF
[Service]
Delegate=cpu cpuset io memory pids
EOF
# systemctl daemon-reload
最后,我重新启动,但没有效果。对于非特权用户来说,仍然没有 cgroup 控制器。
配置:CentOS Stream (8) 最新,Systemd v239
答案1
所以,我终于成功解决了这个问题。对我来说,这似乎与所描述的问题和错误有些相关这里,但是如果没有额外的修改,那里的解决方案对我不起作用。
在下文中,您可以找到我为使 cgroup 控制器的委派正常工作而采取的步骤。谢谢松本龙太郎为他的工作和努力上面提到的问题以及他在 GitHub 上对 systemd 问题的深入研究。在 Ubuntu 22.04 上测试。
/etc/systemd/system/user-0.slice
以root
用户身份创建包含以下内容的文件:
[Unit]
Before=systemd-logind.service
[Slice]
Slice=user.slice
[Install]
WantedBy=multi-user.target
- 以用户身份创建包含以下内容的文件:
/etc/systemd/system/[email protected]/delegate.conf
root
[Service]
Delegate=cpu cpuset io memory pids
/etc/systemd/system/user-.slice.d/override.conf
以root
用户身份创建包含以下内容的文件:
[Slice]
Slice=user.slice
CPUAccounting=yes
MemoryAccounting=yes
IOAccounting=yes
TasksAccounting=yes
运行
sudo systemctl daemon-reload
并重新启动机器。检查委派控制器的非特权用户通过运行命令
cat /sys/fs/cgroup/user.slice/user-$(id -u).slice/user@$(id -u).service/cgroup.controllers
。