如果我删掉了一些术语,请原谅我,因为整个 cgroup 事情对我来说都是新的......
背景故事是我想要得到的种类在具有无根 podman 的 Rocky Linux 8 和/或 9 中运行。我已经让两个操作系统版本都达到了主要使用 cgroup v2 的相同点,但无法弄清楚如何让它完全工作。
通过一些配置(在 Rocky 8 上更是如此),我启用了 cgroup 控制器委派,但它似乎在 cgroup 层次结构中途停止。
配置 systemd 的重要一点是
# /etc/systemd/system/[email protected]/delegate.conf
[Service]
Delegate=cpu cpuset io memory pids
验证所需的控制器现在可用:
$ cat /sys/fs/cgroup/user.slice/user-1000.slice/[email protected]/cgroup.controllers
cpuset cpu io memory pids
然而,用户服务的子树控制确实不是包括所有这些控制器:
$ cat /sys/fs/cgroup/user.slice/user-1000.slice/[email protected]/cgroup.subtree_control
memory pids
因为我与之交互的终端位于该用户服务下,所以它没有委派给它的 cpu 和 io 控制器:
$ cat /proc/self/cgroup
0::/user.slice/user-1000.slice/[email protected]/gnome-terminal-server.service
$ cat /sys/fs/cgroup/user.slice/user-1000.slice/[email protected]/gnome-terminal-server.service/cgrouop.controllers
memory pids
尝试kind create cluster
在此配置中运行会出错,因为未委派必要的控制器。
如果我手动将这些控制器添加到用户服务 subtree_control 中:
$ echo '+cpuset +cpu +io' > /sys/fs/cgroup/user.slice/user-1000.slice/[email protected]
一切都很好。
所以我的问题是 - 我缺少什么来自动完成最后的授权传递?我真的不想每次登录时都运行该 echo 命令。