diff --git "a/docs/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" "b/docs/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" index d62a945e48387b5569c24ad9015d6257aa771c2a..12e20a2e80698bea1b36932affbf70ec74524a4d 100644 --- "a/docs/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" +++ "b/docs/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" @@ -2,15 +2,15 @@ - [容器资源管理](#容器资源管理) - - [描述](#描述) - - [资源共享](#资源共享) - - [限制运行时的CPU资源](#限制运行时的CPU资源) - - [限制运行时的内存](#限制运行时的内存) - - [限制运行时的IO资源](#限制运行时的io资源) - - [限制容器rootfs存储空间](#限制容器rootfs存储空间) - - [限制容器内文件句柄数](#限制容器内文件句柄数) - - [限制容器内可以创建的进程/线程数](#限制容器内可以创建的进程-线程数) - - [配置容器内的ulimit值](#配置容器内的ulimit值) + - [描述](#描述) + - [资源共享](#资源共享) + - [限制运行时的CPU资源](#限制运行时的CPU资源) + - [限制运行时的内存](#限制运行时的内存) + - [限制运行时的IO资源](#限制运行时的io资源) + - [限制容器rootfs存储空间](#限制容器rootfs存储空间) + - [限制容器内文件句柄数](#限制容器内文件句柄数) + - [限制容器内可以创建的进程/线程数](#限制容器内可以创建的进程-线程数) + - [配置容器内的ulimit值](#配置容器内的ulimit值) ## 描述 @@ -26,7 +26,7 @@ cgroup v2来进行资源管理。无论是cgroup v1还是使用cgroup v2对容 容器间或者容器与host之间可以共享namespace信息,包括pid, net, ipc, uts。 ->![](./public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >当使用与主机共享namespace信息时,即缺少了对应的namespace隔离机制,在容器中可以查询、操作主机上的信息,存在安全 隐患。比如使用--pid=host共享主机pid namespace时,即可以看到主机上其他进程信息,造成信息泄露,甚至直接kill杀死主机 进程。请在确保安全的场景下,谨慎使用共享主机host namespace功能。 @@ -197,7 +197,7 @@ create/run时可以指定下列参数。 isula run -tid --cpuset-cpus 0,2-3 busybox sh ``` ->![](./public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >是否设置成功,请参见“查询单个容器信息”章节。 ## 限制运行时的内存 @@ -333,32 +333,30 @@ isula run -tid read-bps /dev/sda:1mb busybox sh ### 用法 -1. 环境准备 +1. 环境准备 文件系统支持Project ID和Project Quota属性,4.19版本内核已经支持,外围包e2fsprogs版本不低于1.43.4-2。 -2. 在容器挂载overlayfs之前,需要对不同容器的upper目录和work目录设置不同的project id,同时设置继承选项,在容器挂载overlayfs之后不允许再修改project id和继承属性。 -3. 配额的设置需要在容器外以特权用户进行。 -4. daemon中增加如下配置 +2. 在容器挂载overlayfs之前,需要对不同容器的upper目录和work目录设置不同的project id,同时设置继承选项,在容器挂载overlayfs之后不允许再修改project id和继承属性。 +3. 配额的设置需要在容器外以特权用户进行。 +4. daemon中增加如下配置 ``` -s overlay2 --storage-opt overlay2.override_kernel_check=true ``` -5. daemon支持以下选项,用于为容器设置默认的限制, +5. daemon支持以下选项,用于为容器设置默认的限制, - --storage-opt overlay2.basesize=128M 指定默认限制的大小,若isula run时也指定 了--storage-opt size选项,则以run时指定来生效,若daemon跟isula run时都不指定大小,则表示不限制。 + --storage-opt overlay2.basesize=128M 指定默认限制的大小,若isula run时也指定了--storage-opt size选项,则以run时指定来生效,若daemon跟isula run时都不指定大小,则表示不限制。 -6. 需要开启文件系统Project ID和Project Quota属性。 - - 新格式化文件系统并mount +6. 需要开启文件系统Project ID和Project Quota属性。 + - 新格式化文件系统并mount ``` # mkfs.ext4 -O quota,project /dev/sdb # mount -o prjquota /dev/sdb /var/lib/isulad ``` - - ### 参数 create/run时指定--storage-opt参数。 @@ -427,11 +425,11 @@ overlay 10.0M 10.0M 0 100% / ### 约束 -1. 限额只针对rw层。 +1. 限额只针对rw层。 overlay2的限额是针对容器的rw层的,镜像的大小不计算在内。 -2. 内核支持并使能。 +2. 内核支持并使能。 内核必须支持ext4的project quota功能,并在mkfs的时候要加上-O quota,project,挂载的时候要加上-o prjquota。任何一个不满足,在使用--storage-opt size=时都将报错。 @@ -442,14 +440,14 @@ overlay 10.0M 10.0M 0 100% / xfs or ext4 with 'pquota' mount option" ``` -3. 限制额度的说明。 - 1. 限制的额度大于isulad的root所在分区的size时,在容器内用df看到的文件系统的额度是isulad的root所在分区的size,而不是设置的限额。 - 2. --storage-opt size=0代表不限制,且设置值不能小于4096。size的精度为1个字节,如果指定精度含小数个字节,小数部分被忽略,如指定size=0.1实际等同于size=0不限制。(受计算机存储浮点数精度的限制,即0.999999999999999999999999999与1是等价的,具体的9的个数不同计算机可能存在差异,故设置4095.999999999999999999999999999与4096等价,其他情况类似),注意isula inspect显示原始命令行指定形式,如果含小数字节,需自行忽略小数部分。 - 3. 限制的额度过小时,比如--storage-opt size=4k,可能会导致容器无法启动,因为启动容器本身需要创建一些文件。 - 4. 上一次启动isulad时,isulad的root所在分区挂载时加了-o prjquota选项,这次启动时不加,那么上一次启动中创建的带quota的容器的设置值不生效。 - 5. daemon端配额--storage-opt overlay2.basesize,其取值范围与--storage-opt size相同。 +3. 限制额度的说明。 + 1. 限制的额度大于isulad的root所在分区的size时,在容器内用df看到的文件系统的额度是isulad的root所在分区的size,而不是设置的限额。 + 2. --storage-opt size=0代表不限制,且设置值不能小于4096。size的精度为1个字节,如果指定精度含小数个字节,小数部分被忽略,如指定size=0.1实际等同于size=0不限制。(受计算机存储浮点数精度的限制,即0.999999999999999999999999999与1是等价的,具体的9的个数不同计算机可能存在差异,故设置4095.999999999999999999999999999与4096等价,其他情况类似),注意isula inspect显示原始命令行指定形式,如果含小数字节,需自行忽略小数部分。 + 3. 限制的额度过小时,比如--storage-opt size=4k,可能会导致容器无法启动,因为启动容器本身需要创建一些文件。 + 4. 上一次启动isulad时,isulad的root所在分区挂载时加了-o prjquota选项,这次启动时不加,那么上一次启动中创建的带quota的容器的设置值不生效。 + 5. daemon端配额--storage-opt overlay2.basesize,其取值范围与--storage-opt size相同。 -4. 指定storage-opt为4k时,轻量级容器启动与docker有差异 +4. 指定storage-opt为4k时,轻量级容器启动与docker有差异 使用选项 storage-opt size=4k 和镜像 rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest 运行容器。 @@ -484,14 +482,13 @@ overlay 10.0M 10.0M 0 100% / please check the config file." ``` -5. 其他说明。 +5. 其他说明。 使用限额功能的isulad切换数据盘时,需要保证被切换的数据盘使用\`prjquota\`选项挂载,且/var/lib/isulad/storage/overlay2目录的挂载方式与/var/lib/isulad相同。 - >![](./public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >切换数据盘时需要保证/var/lib/isulad/storage/overlay2的挂载点被卸载。 - ## 限制容器内文件句柄数 ### 描述 @@ -540,7 +537,7 @@ isula run -ti --files-limit 1024 busybox bash ### 约束 -1. 使用--files-limit参数传入一个很小的值,如1,可能导致容器启动失败。 +1. 使用--files-limit参数传入一个很小的值,如1,可能导致容器启动失败。 ``` # isula run -itd --files-limit 1 rnd-dockerhub.huawei.com/official/busybox-aarch64 @@ -559,7 +556,6 @@ isula run -ti --files-limit 1024 busybox bash 根因是lxc和runc启动过程的原理不一样,lxc创建cgroup子组后先设置files.limit值,再将容器进程的PID写入该子组的cgroup.procs文件,此时该进程已经打开超过1个句柄,因而写入报错导致启动失败。runc创建cgroup子组后先将容器进程的PID写入该子组的cgroup.procs文件,再设置files.limit值,此时由于该子组内的进程已经打开超过1个句柄,因而写入files.limit不会生效,内核也不会报错,容器启动成功。 - ## 限制容器内可以创建的进程/线程数 ### 描述 @@ -623,7 +619,7 @@ isula run -ti --pids-limit 1024 busybox bash 通过两种方法配置ulimit -1. isula create/run时使用--ulimit =\[:\]来控制shell执行程序的资源。 +1. isula create/run时使用--ulimit =\[:\]来控制shell执行程序的资源。

参数项

@@ -648,7 +644,7 @@ isula run -ti --pids-limit 1024 busybox bash
-2. 通过daemon端参数或配置文件 +2. 通过daemon端参数或配置文件 详见"(命令行参数说明"与"部署方式"的--default-ulimits相关选项。 @@ -745,7 +741,6 @@ isula run -ti --pids-limit 1024 busybox bash - ### 示例 在容器的创建或者运行时,加上--ulimit =\[:\]即可,如: @@ -757,4 +752,3 @@ isula create/run -tid --ulimit nofile=1024:2048 busybox sh ### 约束 不能在daemon.json和/etc/sysconfig/iSulad文件(或isulad命令行)中同时配置ulimit限制,否则isulad启动会报错。 -