Centos

cgroups v2:cgroup 控制器未委派給 CentOS Stream 上的非特權使用者 (8)

  • November 3, 2021

我目前正在嘗試配置我或多或少全新安裝的 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=1in啟用了 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 問題的深入研究。

  1. 使用以下內容/etc/systemd/system/user-0.slice以使用者身份創建文件:root
[Unit]
Before=systemd-logind.service
[Slice]
Slice=user.slice
[Install]
WantedBy=multi-user.target
  1. 使用以下內容/etc/systemd/system/user@.service.d/delegate.conf以使用者身份創建文件:root
[Service]
Delegate=cpu cpuset io memory pids
EOF
  1. 使用以下內容/etc/systemd/system/user-.slice.d/override.conf以使用者身份創建文件:root
[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使用者的委派控制器。

引用自:https://unix.stackexchange.com/questions/624428