解決:Error: OCI runtime error: the requested cgroup controller `cpu` is not available
我發生這個問題Error: OCI runtime error: the requested cgroup controller `cpu` is not available
是在Ubuntu 22.04.1上使用podman指定-cpu參數時出現的問題。
podman使用cgroup來限制單個process或多個process使用資源的機制。這個問題是podman它找不到cpu控制節點,也就表示這方面沒設定好。
確認現狀
我們可以先用指令確認podman目前採用的cgroup版本
podman info --debug | grep cgroup
cgroupControllers:
cgroupManager: systemd
cgroupVersion: v2
從上面指令輸出可以看到已採用cgroup v2
解決方式
/sys/fs/cgroup/cgroup.controllers這是cgroup v2才能存取的節點,我在Ubuntu 22.04可以存取, 所以不用像有些解決方法需要改開機核心參數。
cat一下可以得到cpuset cpu io memory hugetlb pids rdma misc,表示cpu可以操作
在解法資料的這個"Enabling CPU, CPUSET, and I/O delegation"小節,提到non-root user預設只能存取memory和pids控制節點, 要控制cpu, cpuset和io的話需要調整systemd的設定
1. 使用指令建立delegate.conf設定擋
sudo mkdir -p /etc/systemd/system/user@.service.d
cat <<EOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf
[Service]
Delegate=cpu cpuset io memory pids
EOF
2. 重啟服務
sudo systemctl daemon-reload
3. 再重新建立你包含-cpu的container指令
成功
解法資料:在rootless container中看到cgroup v2的設定
https://rootlesscontaine.rs/getting-started/common/cgroup2/
留言