# 动态加载内核模块<a name="ZH-CN_TOPIC_0184808023"></a>

## 功能描述<a name="zh-cn_topic_0182200838_section12374522153810"></a>

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

## 参数说明<a name="zh-cn_topic_0182200838_section20744834163815"></a>

<a name="zh-cn_topic_0182200838_table1869210387418"></a>
<table><thead align="left"><tr id="zh-cn_topic_0182200838_row1569373816419"><th class="cellrowborder" valign="top" width="20.22%" id="mcps1.1.4.1.1"><p id="zh-cn_topic_0182200838_p106936387415"><a name="zh-cn_topic_0182200838_p106936387415"></a><a name="zh-cn_topic_0182200838_p106936387415"></a>命令</p>
</th>
<th class="cellrowborder" valign="top" width="51.910000000000004%" id="mcps1.1.4.1.2"><p id="zh-cn_topic_0182200838_p15693173814112"><a name="zh-cn_topic_0182200838_p15693173814112"></a><a name="zh-cn_topic_0182200838_p15693173814112"></a>参数</p>
</th>
<th class="cellrowborder" valign="top" width="27.87%" id="mcps1.1.4.1.3"><p id="zh-cn_topic_0182200838_p867912565112"><a name="zh-cn_topic_0182200838_p867912565112"></a><a name="zh-cn_topic_0182200838_p867912565112"></a>参数指定值说明</p>
</th>
</tr>
</thead>
<tbody><tr id="zh-cn_topic_0182200838_row12693163810415"><td class="cellrowborder" valign="top" width="20.22%" headers="mcps1.1.4.1.1 "><p id="zh-cn_topic_0182200838_p66931838134110"><a name="zh-cn_topic_0182200838_p66931838134110"></a><a name="zh-cn_topic_0182200838_p66931838134110"></a>lcrc create/run</p>
</td>
<td class="cellrowborder" valign="top" width="51.910000000000004%" headers="mcps1.1.4.1.2 "><p id="zh-cn_topic_0182200838_p20308121310422"><a name="zh-cn_topic_0182200838_p20308121310422"></a><a name="zh-cn_topic_0182200838_p20308121310422"></a>-e KERNEL_MODULES=module_name1,module_name</p>
</td>
<td class="cellrowborder" valign="top" width="27.87%" headers="mcps1.1.4.1.3 "><a name="zh-cn_topic_0182200838_ul10878831151214"></a><a name="zh-cn_topic_0182200838_ul10878831151214"></a><ul id="zh-cn_topic_0182200838_ul10878831151214"><li>字符串变量。</li><li>支持配置多个模块，模块名以逗号分隔。</li></ul>
</td>
</tr>
</tbody>
</table>

## 约束限制<a name="zh-cn_topic_0182200838_section17200718133916"></a>

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

## 使用示例<a name="zh-cn_topic_0182200838_section13614433911"></a>

启动系统容器时，指定-e KERNEL\_MODULES参数，待系统容器启动后，可以看到ip\_vs模块被成功加载到内核中。

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

>![](public_sys-resources/icon-note.gif) **说明：**   
>-   宿主机需要安装isulad-tools。  
>-   需要指定--hooks-spec为isulad hooks。  

