易捷行云EasyStack云社区
作者易捷行云EasyStack云社区·2023-04-03 14:55
软件实施顾问·易捷行云EasyStack

技术分享| Kata 支持 Mellanox Infiniband SR-IOV 虚拟网卡直通方案

字数 1752阅读 695评论 0赞 0

2023 年首场 Kata Containers Meetup 在成都举行,多位资深开发者和企业专家代表参与并讨论有关上游社区的开发路线、最新的开发进展、大型的用户案例和可行性方案研究等众多有价值的内容。易捷行云EasyStack研发工程师张彬彬发表主题演讲,分享了 Kata 支持 Mellanox Infiniband SR-IOV 虚拟网卡直通方案。

kata 社区近三年的成长并没有停止脚步,它优秀的隔离性以及社区高活跃度,受到越来越多的人追捧,成为容器运行时选择之一,甚至成为了云原生“一等公民”,并被应用到各行各业。根据 openinfra 基金会调查显示,截止2022年底,kata 社区贡献者达到了127人,18个公司及组织,从2020年起,保持了60%的用户关注增长。

随着应用案例的逐步增多,kata container 的需求也在日益增长,其中性能提升成为各领域极致追求,各类高性能卡、offload 设备应用也是遍及每一个角落,从 kata 社区的 issue 来看,SRIOV 网卡的直通方案一直备受大家关注,张彬彬就 kata container 支持 IB 卡的实现作了技术分享。

为了更好的让大家能直观的了解该方案,首先为 kata 做一个简要的介绍。

首先,kata 中的一个安全容器(为了与后面的概念区分,本文把这里的容器叫做安全容器)穿有三层外套,最外层叫 Host,Host 中有一个管家叫 runtime,中间层叫 guest,guest 里有一个管家叫 agent,最里层叫 内层容器(本质也是一层符合 OCI 标准的容器),内层容器里面是容器盛有的物品(最终的业务程序)。

其次,可以简单理解各层间相互隔离,各层能看到的设备等资源各不相同,内层容器层里无法看到 host 中存在的设备。

最后,IB 卡默认是存在最外层的 host 上,IB 卡直通就是打通 host 到 guest ,guest 到内层容器两层,让内层容器中的业务进程能无阻碍的使用 host 中的 IB 卡。

根据上述理论看,IB 直通方案需要做如下两项工作:

1.runtime 与 agent 需修改支持 IB 卡的管理与配置,让 guest 中能看到 host 里存在的 IB。

2.guest 镜像内置 IB 卡驱动,使其支持卡的识别。让内层容器里能正常使用 IB 卡

然而在实际实践过程也并不是如此的简单,种种意想不到的问题总是存在的,据张彬彬介绍,他遇到了如下三大难题:

首先,guest VM 不能识别 IB 卡,主要是 guest vm 缺少驱动,此外即使开启内核内置的 Infiniband 支持参数,依旧存在功能问题,需要安装 Nvidia 官方网卡驱动并提前预加载该驱动,最后还需将 guest 层的设备文件挂载到内层容器中。

其次,kata-agent 不识别 Infiniband 类型网卡接口,需要修改 agent 的代码,使其通过 GUID 识别接口对应的网卡类型,具体代码在此不做详细阐述。

最后,kata 网络配置无法配置物理网卡 IP、路由。需要配置网卡实际 IP 和路由信息。但 kubernetes 环境下,网卡的信息配置处于 Sandbox 准备阶段,物理网卡挂载处于 Container 准备阶段,导致无法在 Sandbox 阶段处理物理网卡网络信息。需要在 Container 准备阶段,物理设备挂载后,增加物理网卡配置逻辑。Kubernetes 环境下,网卡配置信息来源为 CNI 添加的 Pod 注解或者生成的 CNI Results 文件获取。

张彬彬也呼吁有更多的企业和个人参与到开源社区中,切实为各领域尽一份力,各位想了解细节的请关注 kata 社区。

关于Kata Containers 项目:Kata Containers 是 OpenInfra 基金会的一个开源基础设施项目,不仅可为用户提供容器的速度和性能,还可兼顾虚拟机的安全性。Kata Containers 的设计与体系架构无关,兼容 OCI 标准以及Kubernetes 容器运行时(CRI)接口。Kata Containers 项目遵循 Apache 2.0 协议,代码托管在GitHub 上。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

X社区推广