runc中文翻译系列三 cgroup v2

runc 自 v1.0.0-rc93 起完全支持 cgroup v2(统一模式)。
要使用 cgroup v2,可能需要更改主机 init 系统的配置。
以下发行版默认使用 cgroup v2:

  • Fedora(自 31 日起)
  • Arch Linux(自 2021 年 4 月起)
  • openSUSE Tumbleweed(约自 2021 年起)
  • Debian GNU/Linux(自 11 月起)
  • Ubuntu(自 21.10 起)
  • RHEL 和类 RHEL 发行版(自 9 版本起)
    在其他基于 systemd 的发行版中,可通过在内核 cmdline 中添加 systemd.unified_cgroup_hierarchy=1 来启用 cgroup v2。

我使用的是 cgroup v2 吗?

如果存在 /sys/fs/cgroup/cgroup.controllers,则是。

主机要求

内核
  • 推荐版本:5.2 或更高版本
  • 最低版本 4.15

由于缺乏freezer,不建议使用 5.2 以下的内核。

值得注意的是,切勿使用早于 4.15 的内核(除非使用用户命名空间运行容器),因为它不支持控制设备权限。

Systemd

在 cgroup v2 主机上,强烈建议使用 systemd cgroup 驱动程序运行 runc(“runc --systemd-cgroup”),但并非必须。

建议使用 244 或更高版本的 systemd。旧版 systemd 不支持委托 cpuset 控制器。

请确保您还安装了 dbus-user-session (Debian/Ubuntu) 或 dbus-daemon (CentOS/Fedora) 软件包,且 dbus 正在运行。在 Debian 风格的发行版上,可以这样做

$ sudo apt install -y dbus-user-session
$ systemctl --user start dbus

rootless

在 cgroup v2 主机上,rootless运行程序可与 systemd 通信,获取 cgroup 权限授权。

$ runc spec --rootless
$ jq '.linux.cgroupsPath="user.slice:runc:foo"' config.json | sponge config.json
$ runc --systemd-cgroup run foo

容器进程在 cgroup 中执行,如 /user.slice/user-$(id-u).slice/user@$(id-u).service/user.slice/runc-foo.scope

配置委托

通常情况下,默认情况下只有 memorypids 控制器委托给非 root 用户。

$ cat /sys/fs/cgroup/user.slice/user-$(id -u).slice/user@$(id -u).service/cgroup.controllers
memory pids

要允许委托其他控制器,需要更改 systemd 配置如下:

# 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值