动态加载内核模块

功能描述

容器内业务可能依赖某些内核模块,可通过设置环境变量的方式,在系统容器启动前动态加载容器中业务需要的内核模块到宿主机,此特性需要配合syscontainer-hooks一起使用,具体使用可参看”容器资源动态管理(syscontainer-tools)”章节。

参数说明

命令

参数

参数指定值说明

isula create/run

-e KERNEL_MODULES=module_name1,module_name

  • 字符串变量。
  • 支持配置多个模块,模块名以逗号分隔。

约束限制

  • 如果加载的内核模块是未经过验证的,或者跟宿主机已有模块冲突的场景,会导致宿主机出现不可预知问题,在做加载内核模块时需要谨慎操作。
  • 动态加载内核模块通过将需要加载的内核模块传递给容器,此功能是依靠syscontainer-tools捕获到容器启动的环境变量实现,依赖syscontainer-tools的正确安装部署。
  • 加载的内核模块需要手动进行删除。

使用示例

启动系统容器时,指定-e KERNEL_MODULES参数,待系统容器启动后,可以看到ip_vs模块被成功加载到内核中。

  1. [root@localhost ~]# lsmod | grep ip_vs
  2. [root@localhost ~]# isula run -tid -e KERNEL_MODULES=ip_vs,ip_vs_wrr --hook-spec /etc/syscontainer-tools/hookspec.json --system-container --external-rootfs /root/myrootfs none init
  3. ae18c4281d5755a1e153a7bff6b3b4881f36c8e528b9baba8a3278416a5d0980
  4. [root@localhost ~]# lsmod | grep ip_vs
  5. ip_vs_wrr 16384 0
  6. ip_vs 176128 2 ip_vs_wrr
  7. nf_conntrack 172032 7 xt_conntrack,nf_nat,nf_nat_ipv6,ipt_MASQUERADE,nf_nat_ipv4,nf_conntrack_netlink,ip_vs
  8. nf_defrag_ipv6 20480 2 nf_conntrack,ip_vs
  9. libcrc32c 16384 3 nf_conntrack,nf_nat,ip_vs

动态加载内核模块 - 图1 说明:

  • 宿主机需要安装syscontainer-tools。
  • 需要指定—hooks-spec为syscontainer hooks。