设备管理

功能描述

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

命令格式

  1. isulad-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…)且目录层级不存在,则isulad-tools会自动在容器内创建对应目录;当删除时,不会将创建的父目录删除。如果用户下一次add-device到该父目录,则会提示已经存在无法添加成功。
  • add-device添加磁盘、更新磁盘参数时,配置磁盘Qos;当配置磁盘Qos的read/write bps、read/write IOPS值时,不建议配置值过小,当设置过小时,会造成磁盘表现为不可读(实际原因是速度过慢),最终影响业务功能。
  • 使用—blkio-weight-device来限制指定块设备的权重,如果当前块设备仅支持BFQ模式,可能会报错,提示用户检查当前OS环境是否支持BFQ块设备权重值设置。

使用示例

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

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

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

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

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