cgroups v2: CentOS Stream(8) で権限のないユーザーに cgroup コントローラが委任されていません。

cgroups v2: CentOS Stream(8) で権限のないユーザーに cgroup コントローラが委任されていません。

現在許可されていないユーザーにcgroupコントローラを委任するためにCentOS Stream(8)を新しくインストールするように設定しようとしています。しかし、私はこれに失敗しました。 2日間オンラインで検索してみましたが、同じまたは類似の問題を抱えている人が見つかりませんでした。

Podmanを使用してルートレスコンテナを実行したいです。ただし、権限のないユーザーはcgroup制御が必要なため失敗しました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/etc/default/grubとを使用してcgroups v2を有効にしました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のシステム問題の詳細な分析です。 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

関連情報