現在許可されていないユーザーに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=1
in/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でテストされました。
/etc/systemd/system/user-0.slice
root
ユーザーは次の内容でファイルを生成します。
[Unit]
Before=systemd-logind.service
[Slice]
Slice=user.slice
[Install]
WantedBy=multi-user.target
- ユーザーは次の内容でファイルを生成します。
/etc/systemd/system/[email protected]/delegate.conf
root
[Service]
Delegate=cpu cpuset io memory pids
/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
。