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》
//www.daliqc.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應用的鏡像。