解決: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/


留言