长期支持版本

    社区创新版本

      容器资源动态管理

      普通容器无法支持对容器内的资源进行管理,例如添加一个块设备到容器、插入一块物理/虚拟网卡到容器。系统容器场景下,通过syscontainer-tools工具可以实现动态为容器挂载/卸载块设备,网络设备,路由和卷等资源。

      要使用此功能,需要安装syscontainer-tools工具:

      [root@localhost ~]# yum install syscontainer-tools
      

      设备管理

      功能描述

      syscontainer-tools支持将宿主机上的块设备(比如磁盘、LVM)或字符设备(比如GPU、binner、fuse)添加到容器中。在容器中使用该设备,例如可以对磁盘进行fdisk格式化,写入fs等操作。在容器不需要设备时,syscontainer-tools可以将设备从容器中删除,归还宿主机。

      命令格式

      syscontainer-tools [COMMADN][OPTIONS] <container_id> [ARG...]
      

      其中:

      COMMAND:设备管理相关的命令。

      OPTIONS:设备管理命令支持的选项。

      container_id:容器id。

      ARG:命令对应的参数。

      参数说明

      命令

      功能说明

      选项说明

      参数说明

      add-device

      将宿主机块设备/字符设备添加到容器中。

      支持的选项如下:

      • --blkio-weight-device:设置块设备IO权重(相对权重,10-100之间)。
      • --device-read-bps:设置块设备读取速率限制(byte/秒)。
      • --device-read-iops:设置块设备读取速率限制(IO/秒)。
      • --device-write-bps:设置块设备写入速率限制(byte/秒)。
      • --device-write-iops:设置块设备写入速率限制(IO/秒)。
      • --follow-partition:如果块设备是基础块设备(主SCSI块磁盘),加入此参数可以添加主磁盘下的所有分区。
      • --force:如果容器中已有块设备/字符设备,使用此参数覆盖旧的块设备/字符设备文件。
      • --update-config-only:只更新配置文件不实际做添加磁盘动作。

      参数格式为:hostdevice[:containerdevice][:permission] [hostdevice[:containerdevice][:permission] ...]

      其中:

      hostdevice:设备在主机上的路径。

      containerdevice:设备在容器中的路径。

      permission:容器内对设备的操作权限。

      remove-device

      将块设备/字符设备从容器中删除,还原至宿主机。

      支持的选项如下:

      --follow-partition:如果块设备是基础块设备(主SCSI块磁盘),加入此参数可以删除容器中主磁盘下的所有分区,还原至宿主机。

      参数格式为:hostdevice[:containerdevice] [hostdevice[:containerdevice] ...]

      其中:

      hostdevice:设备在主机上的路径。

      containerdevice:设备在容器中的路径。

      list-device

      列出容器中所有的块设备/字符设备。

      支持的选项如下:

      • --pretty:按照json格式输出。
      • --sub-partition:如果某磁盘为主磁盘,加入此flag,在显示主磁盘的同时,也显示主磁盘的子分区。

      update-device

      更新磁盘Qos。

      支持的选项如下:

      • --device-read-bps:设置块设备读取速率限制(byte/秒),建议设置值大于等于1024。
      • --device-read-iops:设置块设备读取速率限制(IO/秒)。
      • --device-write-bps:设置块设备写入速率限制(byte/秒),建议设置值大于等于1024。
      • --device-write-iops:设置块设备写入速率限制(IO/秒)。

      约束限制

      • 添加/删除设备的时机可以是容器实例非运行状态,完成操作后启动容器,容器内会有体现;也可以在容器运行时(running)动态添加。
      • 不能在容器内和host上并发进行fdisk对磁盘的格式化写入,会影响容器磁盘使用。
      • add-device将磁盘添加到容器的特定目录时,如果容器内的父目录为多级目录(比如/dev/a/b/c/d/e...)且目录层级不存在,则syscontainer-tools会自动在容器内创建对应目录;当删除时,不会将创建的父目录删除。如果用户下一次add-device到该父目录,则会提示已经存在无法添加成功。
      • add-device添加磁盘、更新磁盘参数时,配置磁盘Qos;当配置磁盘Qos的read/write bps、read/write IOPS值时,不建议配置值过小,当设置过小时,会造成磁盘表现为不可读(实际原因是速度过慢),最终影响业务功能。
      • 使用--blkio-weight-device来限制指定块设备的权重,如果当前块设备仅支持BFQ模式,可能会报错,提示用户检查当前OS环境是否支持BFQ块设备权重值设置。

      使用示例

      • 启动一个系统容器,指定hook spec为syscontainer hook执行配置脚本

        [root@localhost ~]# isula run -tid --hook-spec /etc/syscontainer-tools/hookspec.json --system-container --external-rootfs /root/root-fs none init
        eed1096c8c7a0eca6d92b1b3bc3dd59a2a2adf4ce44f18f5372408ced88f8350
        
      • 添加一个块设备到容器

        [root@localhost ~]# syscontainer-tools add-device ee /dev/sdb:/dev/sdb123
        Add device (/dev/sdb) to container(ee,/dev/sdb123) done.
        [root@localhost ~]# isula exec ee fdisk -l /dev/sdb123
        Disk /dev/sdb123: 50 GiB, 53687091200 bytes, 104857600 sectors
        Units: sectors of 1 * 512 = 512 bytes
        Sector size (logical/physical): 512 bytes / 512 bytes
        I/O size (minimum/optimal): 512 bytes / 512 bytes
        Disklabel type: dos
        Disk identifier: 0xda58a448
        
        Device        Boot Start       End   Sectors Size Id Type
        /dev/sdb123p1       2048 104857599 104855552  50G  5 Extended
        /dev/sdb123p5       4096 104857599 104853504  50G 83 Linux
        
      • 更新设备信息

        [root@localhost ~]# syscontainer-tools update-device --device-read-bps /dev/sdb:10m ee
        Update read bps for device (/dev/sdb,10485760) done.
        
      • 删除设备

        [root@localhost ~]# syscontainer-tools remove-device ee /dev/sdb:/dev/sdb123
        Remove device (/dev/sdb) from container(ee,/dev/sdb123) done.
        Remove read bps for device (/dev/sdb) done.
        

      网卡管理

      功能描述

      syscontainer-tools支持将宿主机上的物理网卡或虚拟网卡插入到容器,在不使用网卡的时候从容器中删除归还给宿主机,并且可以动态修改网卡配置。插入物理网卡即把宿主机上一块网卡直接添加到容器中,插入虚拟网卡则需要先创建一对veth pair,之后将一端插入到容器中。

      命令格式

      syscontainer-tools [COMMADN][OPTIONS] <container_id>
      

      其中:

      COMMAND:网卡管理相关的命令。

      OPTIONS:网卡管理命令支持的选项。

      container_id:容器id。

      参数说明

      命令

      功能说明

      选项说明

      add-nic

      给容器创建一个网卡。

      支持的选项如下:

      • --type:设置网卡类型,当前只支持eth/veth。
      • --name:设置网卡名称,格式为[host:]<container>,host不写是随机名字。
      • --ip:设置网卡IP地址。
      • --mac:设置网卡mac地址。
      • --bridge:设置网卡绑定的网桥。
      • --mtu:设置网卡的mtu值,缺省值为1500。
      • --update-config-only:如果此flag设置了,只更新配置文件,不会实际做添加网卡的动作。
      • --qlen:配置qlen值,缺省值为1000。

      remove-nic

      从容器中将网卡删除,还原至宿主机。

      支持的选项如下:

      • --type:设置网卡的类型。
      • --name:设置网卡的名称,格式为[host:]<container>。

      list-nic

      列出容器中所有的网卡。

      支持的选项如下:

      • --pretty:按照json格式输出。
      • --filter:按照过滤格式输出,比如--filter '{"ip":"192.168.3.4/24", "Mtu":1500}'。

      update-nic

      更改容器内指定网卡的配置参数。

      支持的选项如下:

      • --name:容器内网卡名(必须项)。
      • --ip:设置网卡IP地址。
      • --mac:设置网卡mac地址。
      • --bridge:设置网卡绑定的网桥。
      • --mtu:设置网卡的mtu值。
      • --update-config-only:如果此flag设置了,只更新配置文件,不会实际做更新网卡的动作。
      • --qlen:配置qlen值。

      约束限制

      • 支持添加物理网卡(eth)和虚拟网卡(veth)两种类型。
      • 在添加网卡时可以同时对网卡进行配置,参数包括--ip/--mac/--bridge/--mtu/--qlen。
      • 支持最多添加8个物理网卡到容器。
      • 使用syscontainer-tools add-nic向容器添加eth网卡后,如果不加hook,在容器退出前必须手工将nic删除,否则在host上的eth网卡的名字会被更改成容器内的名字。
      • 对于物理网卡(1822 vf网卡除外),add-nic必须使用原mac地址,update-nic禁止修改mac地址,容器内也不允许修改mac地址。
      • 使用syscontainer-tools add-nic时,设置mtu值,设置范围跟具体的网卡型号有关。
      • 使用syscontainer-tools向容器添加网卡和路由时,建议先执行add-nic添加网卡,然后执行add-route添加路由;使用syscontainer-tools从容器删除网卡和路由时,建议先执行remove-route删除路由,然后执行remove-nic删除网卡。
      • 使用syscontainer-tools添加网卡时,一块网卡只能添加到一个容器中。

      使用示例

      • 启动一个系统容器,指定hook spec为syscontainer hook执行配置脚本:

        [root@localhost ~]# isula run -tid --hook-spec /etc/syscontainer-tools/hookspec.json --system-container --external-rootfs /root/root-fs none init
        2aaca5c1af7c872798dac1a468528a2ccbaf20b39b73fc0201636936a3c32aa8
        
      • 添加一个虚拟网卡到容器

        [root@localhost ~]# syscontainer-tools add-nic --type "veth" --name abc2:bcd2 --ip 172.17.28.5/24 --mac 00:ff:48:13:xx:xx --bridge docker0 2aaca5c1af7c
        Add network interface to container 2aaca5c1af7c (bcd2,abc2) done  
        
      • 添加一个物理网卡到容器

        [root@localhost ~]# syscontainer-tools add-nic --type "eth" --name eth3:eth1 --ip 172.17.28.6/24  --mtu 1300  --qlen 2100 2aaca5c1af7c
        Add network interface to container 2aaca5c1af7c (eth3,eth1) done
        

        说明: 添加虚拟网卡或物理网卡时,请确保网卡处于空闲状态,添加正在使用的网卡会导致系统网络断开。

      路由管理

      功能描述

      syscontainer-tools工具可以对系统容器进行动态添加/删除路由表。

      命令格式

      syscontainer-tools [COMMADN][OPTIONS] <container_id> [ARG...]
      

      其中:

      COMMAND:路由管理相关的命令。

      OPTIONS:路由管理命令支持的选项。

      container_id:容器id。

      ARG:命令对应的参数。

      接口说明

      命令

      功能说明

      选项说明

      参数说明

      add-route

      将网络路由规则添加到容器中。

      支持的选项如下:

      --update-config-only:添加此参数,只更新配置文件,不做实际的更新路由表的动作。

      参数格式:[{rule1},{rule2}]

      rule样例:

      '[{"dest":"default", "gw":"192.168.10.1"},{"dest":"192.168.0.0/16","dev":"eth0","src":"192.168.1.2"}]'

      • dest:目标网络,如果为空则是默认网关。
      • src:路由源IP。
      • gw:路由网关。
      • dev:网络设备。

      remove-route

      从容器中删除路由。

      支持的选项如下:

      --update-config-only:设置此参数,只更新配置文件,不做实际从容器中删除路由的动作。

      参数格式:[{rule1},{rule2}]

      rule样例:

      '[{"dest":"default", "gw":"192.168.10.1"},{"dest":"192.168.0.0/16","dev":"eth0","src":"192.168.1.2"}]'

      • dest:目标网络,如果为空则是默认网关。
      • src:路由源IP。
      • gw:路由网关。
      • dev:网络设备。

      list-route

      列出容器中所有的路由规则。

      支持的选项如下:

      • --pretty:按照json格式输出。
      • --filter:按照过滤格式输出,比如--filter '{"ip":"192.168.3.4/24", "Mtu":1500}'。

      约束限制

      • 使用syscontainer-tools向容器添加网卡和路由时,建议先执行add-nic添加网卡,然后执行add-route添加路由;使用syscontainer-tools从容器删除网卡和路由时,建议先执行remove-route删除路由,然后执行remove-nic删除网卡。
      • 向容器内添加路由规则时,需确保所添加的路由规则与容器内现有的路由规则不会产生冲突。

      使用示例

      • 启动一个系统容器,指定hook spec为syscontainer hook执行配置脚本:

        [root@localhost ~]# isula run -tid --hook-spec /etc/syscontainer-tools/hookspec.json --system-container --external-rootfs /root/root-fs none init
        0d2d68b45aa0c1b8eaf890c06ab2d008eb8c5d91e78b1f8fe4d37b86fd2c190b
        
      • syscontainer-tools向系统容器添加一块物理网卡:

        [root@localhost ~]# syscontainer-tools add-nic --type "eth" --name enp4s0:eth123 --ip 172.17.28.6/24  --mtu 1300  --qlen 2100 0d2d68b45aa0
        Add network interface (enp4s0) to container (0d2d68b45aa0,eth123) done
        
      • syscontainer-tools添加一条路由规则到系统容器,注意格式需按照'[{"dest":"default", "gw":"192.168.10.1"},{"dest":"192.168.0.0/16","dev":"eth0","src":"192.168.1.2"}]'来配置。如果dest为空会自动填成default。

        [root@localhost ~]# syscontainer-tools add-route 0d2d68b45aa0 '[{"dest":"172.17.28.0/32", "gw":"172.17.28.5","dev":"eth123"}]'
        Add route to container 0d2d68b45aa0, route: {dest:172.17.28.0/32,src:,gw:172.17.28.5,dev:eth123} done
        
      • 查看容器内是否新增一条路由规则:

        [root@localhost ~]# isula exec -it 0d2d68b45aa0 route
        Kernel IP routing table
        Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
        172.17.28.0     172.17.28.5     255.255.255.255 UGH   0      0        0 eth123
        172.17.28.0     0.0.0.0         255.255.255.0   U     0      0        0 eth123
        

      挂卷管理

      功能描述

      普通容器仅支持在创建时指定--volume参数将宿主机的目录/卷挂载到容器实现资源共享,但是无法在容器运行时将挂载到容器中的目录/卷卸载掉,也不支持将宿主机的目录/卷挂载到容器。系统容器可以通过syscontainer-tools工具实现动态将宿主机的目录/卷挂载到容器,以及将容器中的目录/卷进行卸载。

      命令格式

      syscontainer-tools [COMMADN][OPTIONS] <container_id> [ARG...]
      

      其中:

      COMMAND:路由管理相关的命令。

      OPTIONS:路由管理命令支持的选项。

      container_id:容器id。

      ARG:命令对应的参数。

      接口说明

      命令

      功能说明

      选项说明

      参数说明

      add-path

      将宿主机文件/目录添加到容器中。

      参数格式为:

      hostpath:containerpath:permission [hostpath:containerpath:permission ...]

      其中:

      hostdevice:卷在主机上的路径。

      containerdevice:卷在容器中的路径。

      permission:容器内对挂载路径的操作权限。

      remove-path

      将容器中的目录/文件删除,还原到宿主机中。

      参数格式为:hostpath:containerpath [hostpath:containerpath ...]

      其中:

      hostdevice:卷在主机上的路径。

      containerdevice:卷在容器中的路径。

      list-path

      列出容器中所有的path目录。

      支持的选项如下:

      --pretty:按照json格式输出。

      约束限制

      • 挂载目录(add-path)的时候必须要指定绝对路径。
      • 挂载目录(add-path)会在主机上生成/.sharedpath挂载点。
      • 最多可以向单个容器中添加128个volume,超过128后无法添加成功。
      • add-path不能将主机目录覆盖容器中的根目录(/),否则会造成功能影响。

      使用示例

      • 启动一个系统容器,指定hook spec为syscontainer hook执行配置脚本:

        [root@localhost ~]# isula run -tid --hook-spec /etc/syscontainer-tools/hookspec.json --system-container --external-rootfs /root/root-fs none init
        e45970a522d1ea0e9cfe382c2b868d92e7b6a55be1dd239947dda1ee55f3c7f7
        
      • syscontainer-tools将宿主机某个目录挂载到容器,实现资源共享:

        [root@localhost ~]# syscontainer-tools add-path e45970a522d1 /home/test123:/home/test123
        Add path (/home/test123) to container(e45970a522d1,/home/test123) done.
        
      • 宿主机目录/home/test123创建一个文件,然后在容器内查看文件是否可以访问:

        [root@localhost ~]# echo "hello world" > /home/test123/helloworld
        [root@localhost ~]# isula exec e45970a522d1 bash
        [root@localhost /]# cat /home/test123/helloworld
        hello world
        
      • syscontainer-tools将挂载目录从容器内删除:

        [root@localhost ~]# syscontainer-tools remove-path e45970a522d1 /home/test123:/home/test123
        Remove path (/home/test123) from container(e45970a522d1,/home/test123) done
        [root@localhost ~]# isula exec e45970a522d1 bash
        [root@localhost /]# ls /home/test123/helloworld
        ls: cannot access '/home/test123/helloworld': No such file or directory
        

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

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

      一键搞定!

      问题类型
      规范和低错类

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

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

      ● 英文中包含中文字符;

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

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

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

      易用性

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

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

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

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

      正确性

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

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

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

      ● 代码片段错误;

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

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

      风险提示

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

      内容合规

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

      ● 内容侵权;

      您对文档的总体满意度

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