Centos
cgroups v2:cgroup 控制器未委派給 CentOS Stream 上的非特權使用者 (8)
我目前正在嘗試配置我或多或少全新安裝的 CentOS Stream (8) 以將 cgroup 控制器委派給非特權使用者。但是,我在這方面失敗了,我已經在網上搜尋了兩天,但我找不到有相同或類似問題的人。
我想用 podman 執行無根容器。然而,我失敗了,因為非特權使用者需要有 cgroup controller
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/user@.service.d # cat > /etc/systemd/system/user@.service.d/delegate.conf << EOF [Service] Delegate=cpu cpuset io memory pids EOF # systemctl daemon-reload
最後,我重新啟動,但無濟於事。對於非特權使用者,仍然沒有任何 cgroup 控制器。
配置:CentOS Stream (8) 最新,Systemd v239
所以,我終於設法解決了這個問題。對我來說,這似乎與此處描述的問題和錯誤有些相關,但如果沒有額外的修改,那裡的解決方案對我不起作用。
在下文中,您可以找到我為使 cgroup 控制器的委派工作而採取的步驟。感謝Ryutaroh Matsumoto在上述問題上所做的工作和努力,以及他在 GitHub 上對 systemd 問題的深入研究。
- 使用以下內容
/etc/systemd/system/user-0.slice
以使用者身份創建文件:root
[Unit] Before=systemd-logind.service [Slice] Slice=user.slice [Install] WantedBy=multi-user.target
- 使用以下內容
/etc/systemd/system/user@.service.d/delegate.conf
以使用者身份創建文件:root
[Service] Delegate=cpu cpuset io memory pids EOF
- 使用以下內容
/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
使用者的委派控制器。