cgroups v2:cgroup 控制器未委托给 CentOS Stream 上的非特权用户 (8)

cgroups v2:cgroup 控制器未委托给 CentOS Stream 上的非特权用户 (8)

我目前正在尝试配置或多或少全新安装的 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=1in启用了 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 上测试。

  1. /etc/systemd/system/user-0.sliceroot用户身份创建包含以下内容的文件:
[Unit]
Before=systemd-logind.service
[Slice]
Slice=user.slice
[Install]
WantedBy=multi-user.target
  1. 以用户身份创建包含以下内容的文件:/etc/systemd/system/[email protected]/delegate.confroot
[Service]
Delegate=cpu cpuset io memory pids
  1. /etc/systemd/system/user-.slice.d/override.confroot用户身份创建包含以下内容的文件:
[Slice]
Slice=user.slice

CPUAccounting=yes
MemoryAccounting=yes
IOAccounting=yes
TasksAccounting=yes
  1. 运行sudo systemctl daemon-reload并重新启动机器。

  2. 检查委派控制器的非特权用户通过运行命令cat /sys/fs/cgroup/user.slice/user-$(id -u).slice/user@$(id -u).service/cgroup.controllers

相关内容