长期支持版本

    社区创新版本

      iSulad支持cgroup v2

      概述

      cgroup是linux中用于限制进程组资源的机制。cgroup目前包括两个版本,cgroup v1和cgroup v2。

      cgroup v2的目标是取代cgroup v1,cgroup v2相较于cgroup v1具有以下优势:

      • 统一层次结构:cgroup v2 引入了一个统一的层次结构,将不同的资源控制(如 CPU、内存等)合并到一个层次结构中。这消除了 cgroup v1 中的分离层次结构,使得资源配置更加直观和简化。
      • 细粒度资源控制:cgroup v2 提供了更细粒度的资源控制,允许用户对各个进程组进行更精细的资源限制和分配。它支持对 CPU、内存、IO、网络、设备等资源进行精确的控制和配额分配。
      • 改进的性能:cgroup v2 在性能方面进行了一些改进,包括减少锁竞争和提高资源分配的效率。这可能导致更好的性能和扩展性,特别是在大规模部署和高负载环境下。
      • cgroup v2 结合 eBPF 可以在运行时动态修改设备访问规则,而无需重新加载内核模块或重启容器。这使得容器的设备访问策略可以根据实际需求进行动态调整和更新,提高了容器环境的灵活性和可管理性。

      iSulad目前已支持 cgroup v2。

      配置iSulad支持cgroup v2

      要使用iSulad支持cgroup v2的功能,建议至少使用5.8以上的内核版本,可以使用uname -r命令查询内核的版本。

      iSulad会自动检测当前的cgroup版本,如果系统配置成了只支持cgroup v2并将cgroup v2挂载到/sys/fs/cgroup目录下(系统自动挂载),则iSulad会使用cgroup v2来限制容器的资源。

      系统配置cgroup v2方式:可以在系统的启动命令行参数中配置cgroup_no_v1=all参数表示禁用所有v1的cgroup,这样系统启动时就会只开启cgroup v2并默认将cgroup v2子系统挂载到/sys/fs/cgroup目录下。

      grubby --args="cgroup_no_v1=all" --update-kernel="/boot/vmlinuz-$(uname -r)"
      

      tips:修改启动参数配置需谨慎

      系统重启后,执行mount | grep cgroup命令,如果已经将cgroup2挂载到了/sys/fs/cgroup,则说明切换cgroup v2环境成功:

      # mount | grep cgroup
      cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
      

      iSulad使用cgroup v2限制资源

      无论是cgroup v1还是cgroup v2,iSulad提供给用户使用的接口都是一致的(在isula create/isula run/isula update有相应接口)。不过由于有部分cgroup v1支持的功能在cgroup v2中被去掉了或者实现方式有所变化,因此部分接口在cgroup v2中不可用或者含义发生变化。iSulad支持限制如下资源:

      资源功能和cgroup v1的差异
      devices限制对应的设备是否可以在容器中访问以及访问权限devcies子系统不再使用往cgroup文件里写值的方式进行限制,而是采用ebpf的方式进行限制,对于容器限制device而言无差异
      memory限制容器的内存资源不支持swappiness(--memory-swappiness),不支持kmem相关参数(--kernel-memory),不支持oom_control("--oom-kill-disable)
      cpu/cpuset限制容器的cpu资源不支持实时线程的限制(--cpu-rt-period与--cpu-rt-runtime)
      blkio/io限制容器的块设备io设置限制后,不仅限制块设备的IO,也能限制buffer IO
      hugetlb限制大页内存的使用无差异
      pids限制容器使用的pid无差异
      freeze暂停容器无差异

      例如:若在cgroup v2环境下v2使用不支持的选项(以--memory-swappiness为例),isula命令会有如下报错:

      [root@openEuler ~]# isula run -tid --memory-swappiness 90 busybox /bin/sh
      Error response from daemon: Your kernel does not support memory swappiness capabilities, memory swappiness discarded.
      

      使用限制

      1. iSulad只识别挂载在/sys/fs/cgroup目录下的cgroup。
      2. iSulad不支持cgroup v1与cgroup v2混用场景,仅根据/sys/fs/cgroup目录下的cgroup版本决定iSulad内部使用的cgroup版本。

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

      小问题,全程线上修改...

      一键搞定!

      问题类型
      规范和低错类

      ● 错别字或拼写错误;标点符号使用错误;

      ● 链接错误、空单元格、格式错误;

      ● 英文中包含中文字符;

      ● 界面和描述不一致,但不影响操作;

      ● 表述不通顺,但不影响理解;

      ● 版本号不匹配:如软件包名称、界面版本号;

      易用性

      ● 关键步骤错误或缺失,无法指导用户完成任务;

      ● 缺少必要的前提条件、注意事项等;

      ● 图形、表格、文字等晦涩难懂;

      ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

      正确性

      ● 技术原理、功能、规格等描述和软件不一致,存在错误;

      ● 原理图、架构图等存在错误;

      ● 命令、命令参数等错误;

      ● 代码片段错误;

      ● 命令无法完成对应功能;

      ● 界面错误,无法指导操作;

      风险提示

      ● 对重要数据或系统存在风险的操作,缺少安全提示;

      内容合规

      ● 违反法律法规,涉及政治、领土主权等敏感词;

      ● 内容侵权;

      您对文档的总体满意度

      非常不满意
      非常满意
      提交
      根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
      文档捉虫
      编组 3备份