开发者社区 > 云原生 > 容器服务 > 正文

为什么在kata容器中启用内核驱动程序模块时,它总是提示找不到该模块?

我通过yum在rhel8.4系统上安装了kata2.1.0版本,当我需要在kata内核中启用该模块时,总是找不到,

[root@jump-rhel kata-pod]# oc get pod NAME        READY   STATUS              RESTARTS   AGE test-kata   0/1     ContainerCreating   0          24m


Events:   Type     Reason                  Age   From     Message   ----     ------                  ----  ----     -------   Normal   AddedInterface          17s   multus   Add eth0 [10.131.0.243/23] from openshift-sdn   Warning  FailedCreatePodSandBox  0s    kubelet  Failed to create pod sandbox: rpc error: code = Unknown desc = CreateContainer failed: load_kernel_module return code: 1 stdout: stderr:modprobe: FATAL: Module mlx5_core not found in directory /lib/modules/4.18.0-372.16.1.el8_6.x86_64

test-kata.yaml

apiVersion: v1 kind: Pod metadata:   name: test-kata   annotations:     io.katacontainers.config.agent.kernel_modules: "mlx5_core" spec:   runtimeClassName: kata   terminationGracePeriodSeconds: 0   containers:   - name: test-kata     image: harbor.test.local/mirror/busybox:latest     command: ["/bin/sh", "-c", "sleep inf"]     securityContext:       runAsUser: 0     volumeMounts:     - name: modules       mountPath: /lib/modules   volumes:   - name: modules     hostPath:       path: /lib/modules       type: Directory

当我不使用注释时,在pod中手动modprobe mlx5core没有问题,模块可以加载到内核中。

提问2.png

我的环境是openshift4.9+rhel8.4(worker),我通过yum安装kata容器,默认版本是2.1.0-6,kata使用的内核版本与主机内核版本相同,所以我通过dockerfile将host/lib/module打包到kata容器中

kata-pod被调度到worker3节点,内核版本如下

[root@worker3 dockerfile]# uname -r 4.18.0-372.16.1.el8_6.x86_64

[root@jump-rhel ~]# oc exec -it test-kata sh -n test-kata / # uname -r 4.18.0-372.16.1.el8_6.x86_64

原提问者GitHub用户fu7100  如对项目有进一步反馈,请在 GitHub 提交 issue https://github.com/kata-containers/kata-containers/issues

展开
收起
码字王 2023-05-17 16:10:54 252 0
2 条回答
写回答
取消 提交回答
  • 值得去的地方都没有捷径

    这可能是因为在Kata容器中,模块依赖的内核版本与主机内核版本不同,因此您需要重新编译特定版本的模块,以便在Kata容器中使用。以下是解决此问题的可能方法:

    重新编译模块 您可以在Kata容器中安装相应的内核源代码,然后使用指定的内核版本重新编译模块。您可以使用公共存储库或私有存储库中的源代码。使用以下命令安装内核源代码: yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r) 然后使用以下命令重新编译模块:

    make -C /usr/src/kernels/$(uname -r) M=/path/to/module/directory modules 最后将生成的.ko文件复制到Kata容器中。

    更新内核版本 您也可以考虑更新Kata容器中的内核版本,以便与主机内核版本匹配。在Dockerfile中定义Kata容器时,您可以通过指定FROM语句来选择不同的基础映像。 例如,您可以使用以下命令选择不同的基础映像和内核版本:

    FROM katacontainers/kernel:5.10.0-rc2-x86_64 这将使用Kata容器的自定义内核版本,该版本可以与主机内核版本匹配,并且您不必重新编译相应的模块。

    请注意,更新内核版本可能会导致其他问题,请确保在更新内核版本之前进行全面测试。

    2023-05-18 18:42:38
    赞同 展开评论 打赏
  • Kata-guest操作系统使用的映像与容器映像不同。您可以通过本指南建立自己的形象。

    https://github.com/kata-containers/kata-containers/tree/main/tools/osbuilder

    原回答者GitHub用户liubin 如对项目有进一步反馈,请在 GitHub 提交 issue https://github.com/kata-containers/kata-containers/issues

    2023-05-17 16:24:54
    赞同 展开评论 打赏

国内唯一 Forrester 公共云容器平台领导者象限。

相关电子书

更多
阿里云文件存储 NAS 在容器场景的最佳实践 立即下载
何种数据存储才能助力容器计算 立即下载
《容器网络文件系统CNFS》 立即下载