1 部署环境
- 操作系统:CentOs7.9
- 内核:4.18.0-3.0.el7.x86_64
- 网卡:Mellanox Technologies MT27710 Family [ConnectX-4 Lx]
- 网卡驱动版本:MLNX_OFED_LINUX-5.5-1.0.3.2-rhel7.9-x86_64
- F-STACK选择版本:v1.22
宿主机需要升级内核、安装内核开发库、Mellanox网卡的驱动。 安装过程详见另一篇文章: 《使用 Mellanox网卡部署F-STACK》
https://www.ctyun.cn/developer/article/419208028528709
2 Dockerfile编写
2.1 依赖库的安装
依赖于Centos基础镜像,在生成镜像过程中按提示调整即可。笔者安装的依赖库如下:
RUN yum -y install gcc make expat-devel gcc-c++ net-tools numactl &&\
yum -y install numactl numactl-devel numactl-libs pciutils wget xz &&\
yum -y install curl-devel expat-devel gettext-devel openssl openssl-devel zlib-devel perl-ExtUtils-MakeMaker iproute bc&&\
yum -y install meson python3 perl-ExtUtils-MakeMaker iproute bc &&
yum install createrepo gcc-gfortran fuse-libs tcsh tk libnl3 libnl3-devel -y &&\ yum install pciutils numactl-libs openssl-libs lsof expat ethtool libstdc++ systemd-libs python pkgconfig -y &&\ yum install make glib2 libnl3 libmnl tcl tk expect -y
另外可能还需要安装pkg-config,笔者是下载rpm包安装的。
2.2 安装内核和内核版本
RUN rpm -ivh --nodeps kernel-devel-4.18.0-3.0.el7.x86_64.rpm &&\
rpm -ivh --nodeps kernel-4.18.0-3.0.el7.x86_64.rpm
2.3 网卡驱动安装
驱动安装过程同《使用 Mellanox网卡部署F-STACK》。
差异点:
- 不升级固件
- 指定内核和linux版本
如下所示:
RUN ./mlnxofedinstall --kernel 4.18.0-3.0.el7.x86_64 --distro rhel7.9 --upstream-libs --dpdk --without-fw-update
2.4 dpdk和F-stack编译和安装
安装过程同《使用 Mellanox网卡部署F-STACK》
2.5 应用编译和安装
链接库选项除添加dpdk、f-stack库之外,还要添加俩选项:“-libverbs -lmlx5”
3 容器启动
容器启动脚本要对F-Stack运行环境进行初始化,初始化包括:
- 加载内核模块
- 初始化大页内存
/usr/local/bin/dpdk-hugepages.py --setup 2G
modprobe -a ib_uverbs mlx5_core mlx5_ibinsmod /root/sh/rte_kni.ko carrier=on
容器运行可携带网卡名,容器启动后启动脚本自动配置f-stack.conf中ifname参数。当然也可以容器运行后人工配置。
注意:网卡不能卸载到用户态。
4 总结
在Mellanox网卡生成F-STACK应用的镜像过程比较复杂,主要注意事项总结如下:
- 宿主机Mellanox网卡dpdk驱动环境要装好
- Dockerfile中安装网卡驱动时不需要升级固件,安装的目的是为了获得网卡所需的各种库文件
由于Mellanox网卡驱动文件较大(300M+),安装后更大了,所以镜像文件很大。后续会研究如何减小镜像文件。另外,研究如何在ARM64环境生成Mellanox网卡的f-stack应用的镜像。