一.网卡SRIOV及虚拟化配置
1. Mellanox 网卡SRIOV开启配置
网卡安装之后需要到官方网站去下载相关网卡的驱动,然后才能进行下面的配置,本次实验环境使用的是centos7.8,自带了Mellanox CX系列网卡的驱动。
所以网卡驱动安装的部分先不涉及,需要下载的可以到nvdia的官方网站去下载:
https://www.mellanox.com/products/ethernet-drivers/linux/mlnx_en
本次实验搭建采用的是浪潮服务器,开启SRIOV需要以下几个步骤:
1.1 BIOS 设置虚拟化支持
为了支持SRIOV首先要再BIOS中使能虚拟化相关的配置,在开启启动时候进行虚拟化支持的开关打开。
SRIOV支持开启,enable
打开intel-VT
1.2 IOMMU支持配置
开启操作系统支持IOMMU的功能,
修改/etc/default/grub 文件
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on iommu=pt"
GRUB_DISABLE_RECOVERY="true"
~
在GRUB_CMDLINE_LINUX 这一行的最后添加intel_iommu=on iommu=pt。
修改后保存,要将配置写入引导。
注意配置写入的时候一定要注意区分当前BIOS的引导是UEFI还是legacy模式。
UEFI模式:
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
Legacy模式:
grub2-mkconfig -o /boot/grub2/grub.cfg
模式不同如果选择的方式错误,会导致IOMMU开启失败。写入配置之后设备进行重启,重启之后执行如下命令查询配置是否生效。
[root@controller ml2]# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.10.0-1160.6.1.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on iommu=pt
[root@controller ml2]#
1.1 SRIOV的参数配置
先确定支持SRIOV配置的网卡,通过lspci命令查询到网卡
[root@controller ml2]# lspci | grep Eth
1a:00.0 Ethernet controller: Intel Corporation Ethernet Connection X722 for 1GbE (rev 09)
1a:00.1 Ethernet controller: Intel Corporation Ethernet Connection X722 for 1GbE (rev 09)
1a:00.2 Ethernet controller: Intel Corporation Ethernet Connection X722 for 1GbE (rev 09)
1a:00.3 Ethernet controller: Intel Corporation Ethernet Connection X722 for 1GbE (rev 09)
3b:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
3b:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
af:00.0 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5]
确定网卡的接口名称:
将配置写入网卡,本次只创建了一个VF,所以只写入1.如果需要创建多个VF需要写入对应的数字。
echo '1' > /sys/class/net/enp175s0/device/sriov_numvfs
写入之后执行如下命令查询写入的结果:
[root@controller ml2]#cat /sys/class/net/enp175s0/device/sriov_totalvfs
1
查询VF创建情况:
[root@controller ml2]# ip link show enp175s0
7: enp175s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 0c:42:a1:b3:2e:dc brd ff:ff:ff:ff:ff:ff
vf 0 MAC fa:11:3c:47:ad:d5, spoof checking off, link-state auto, trust off, query_rss off
二.Openstack私有云环境部署
1. Openstack Rocky版本安装
本次卸载实验基于Rocky版本,之前整理过一个ubutun环境下的openstack Queen的安装手册,由于基础环境不同,很多配置有差异。再整理一份centos的配置文件。
1.基础环境配置
本次卸载采用的是overlay的vxlan封装解封装,所以搭建的是overlay 租户网络类型是vxlan。
不需要外部网络访问,所以采用双网卡,一个作为openstack的管理通道,另一个作为host之间的数据通道。
openstack的安装过程如果纯手工安装,过程及其的繁琐,而且非常容易出错,考虑到安装的复杂性及繁琐易错,我把安装过程用shell脚本进行了编写,参考了官方的openstack devstack的部分代码,脚本实现了租户网络为vxlan网络的openstack的部署,会脚本中会根据系统进行自动检查安装对应的openstack官方版本。
具体的代码可以到我的gitee中去下载,具体的使用可以参考脚本的配置说明。
https://gitee.com/blueGitRepo/falcon.git
配置完控制节点和计算节点的相关参数后,在控制节点和计算节点先后执行install脚本,等待安装完成即可。
云平台部署完成之后,下面进行智能网卡相关配置,也是参考了openstack官方链接进行配置的。
三.智能网卡卸载配置
1. 网卡SRIOV及ovs卸载配置
此步骤与文章开始部分相同,如果前面配置过,此部分就不需要重复配置
1.1 SRIOV开启
在计算节点开启sriov,执行
echo 1 > /sys/class/net/enp175s0/device/sriov_numvfs
cat /sys/class/net/enp175s0/device/sriov_totalvfs
执行ip link show enp175s0
本次实验仅开启了一个vf。
1.2 VF设置及PF offload配置
配置网卡的模式为switchdev模式,并支持offload
解绑定VF
echo 0000:af:00.1 > /sys/bus/pci/drivers/mlx5_core/unbind
修改PF的eswitch模式
devlink dev eswitch set pci/0000:af:00.0 mode switchdev
ethtool -K enp175s0 hw-tc-offload on
echo 0000:af:00.1 > /sys/bus/pci/drivers/mlx5_core/bind
1.3 配置之后
devlink dev eswitch show pci/0000:af:00.0
[root@controller openvswitch-2.11.1]# devlink dev eswitch show pci/0000:af:00.0
pci/0000:af:00.0: mode switchdev inline-mode none encap enable
配置switchdev之后会在设备上生成对应的VF的representor接口
Eth0为对应的VF生成的vf-Rep接口。
ls -l /sys/class/net/
查看vf接口的对应关系
1.4 Openstack neutron支持SRIOV的Passthrough配置
本次搭建的openstack设置的租户网络类型为vxlan类型。所以对应的设置都和vxlan的配置相关。
4.修改/etc/nova/nova.conf on compute nodes
[pci]
passthrough_whitelist = {"address":":af:00.","physical_network":null}
配置完成之后在计算节点和控制节点分别重启以下服务
计算节点:
[root@computer1 ~]# systemctl restart openstack-nova-compute.service
控制节点:
[root@controller ~]# systemctl restart openstack-nova-scheduler.service
[root@controller ~]# systemctl restart neutron-server.service
注意:此处大坑
如果是centos7系列,请关闭networkManger的服务,该服务会导致ovs下发到VF_REP接口上的的tc qdisc规则被删除,导致卸载失败。在无人指导的情况下,在坑中爬了2 周,苦苦思索,看日志看到头昏,毫无头绪,官方论坛发帖请教,无人知晓,最后通过重编译linux内核代码,在tc的模块中加日志才找到原因。
配置ovs执行卸载
ovs-vsctl set Open_vSwitch . Other_config:hw-offload=true
1.5 网络及端口创建
- 创建一个network,端口安全先做关闭
- 创建subnet,此部分参考openstack的命令
- 创建端口,管理创建的网络 openstack port create --network smart --vnic-type=direct --binding-profile '{"capabilities": ["switchdev"]}' direct_port1
创建完成后在openstack dashborad中查询:
基于该port创建实例1
openstack server create --flavor m1.medium --image centos7 --nic port-id=direct_port1 --availability-zone nova vm1
创建另一个port
openstack port create --network smart --vnic-type=direct --binding-profile '{"capabilities": ["switchdev"]}' direct_port2
创建另一个实例:
openstack server create --flavor m1.medium --image centos7 --nic port-id=direct_port2 --availability-zone nova1 vm2
创建实例如果失败要注意查询下network agent是否离线,确认selinux和防火墙是否关闭,上述vm建立在两个不同的compute 节点上,vm之间通过vxlan网络互通。
4 验证
登录openstack dashboard 查询两个vm实例
两台vm的互ping测试,通过在VF-Representor接口进行抓包
Icmp已经卸载到网卡,在设备上抓不到报文。
查询ovs的流表卸载情况:
[root@controller site-packages]# ovs-dpctl show
2021-01-15T08:07:40Z|00001|dpif_netlink|INFO|The kernel module does not support meters.
system@ovs-system:
lookups: hit:42730 missed:5059 lost:0
flows: 0
masks: hit:103169 total:0 hit/pkt:2.16
port 0: ovs-system (internal)
port 1: br-tun (internal)
port 2: tapc5531a2d-f5 (internal)
port 3: br-int (internal)
port 4: tapbe3b80ef-de (internal)
port 5: enp175s0_0
port 6: vxlan_sys_4789 (vxlan: packet_type=ptap)
[root@controller site-packages]#
[root@controller site-packages]# ovs-dpctl dump-flows type=offloaded
2021-01-15T08:07:14Z|00001|dpif_netlink|INFO|The kernel module does not support meters.
tunnel(tun_id=0x5f,src=192.168.20.241,dst=192.168.20.242,tp_dst=4789,flags(+key)),in_port(6),eth(src=fa:16:3e:58:c7:02,dst=fa:16:3e:7e:72:26),eth_type(0x0800),ipv4(frag=no), packets:109, bytes:10682, used:0.720s, actions:5
tunnel(tun_id=0x5f,src=192.168.20.241,dst=192.168.20.242,tp_dst=4789,flags(+key)),in_port(6),eth(src=fa:16:3e:58:c7:02,dst=fa:16:3e:7e:72:26),eth_type(0x0806), packets:1, bytes:60, used:1.730s, actions:5
in_port(5),eth(src=fa:16:3e:7e:72:26,dst=fa:16:3e:58:c7:02),eth_type(0x0800),ipv4(tos=0/0x3,frag=no), packets:109, bytes:16132, used:0.720s, actions:set(tunnel(tun_id=0x5f,src=192.168.20.242,dst=192.168.20.241,tp_dst=4789,flags(key))),6
in_port(5),eth(src=fa:16:3e:7e:72:26,dst=fa:16:3e:58:c7:02),eth_type(0x0806), packets:1, bytes:110, used:1.730s, actions:set(tunnel(tun_id=0x5f,src=192.168.20.242,dst=192.168.20.241,tp_dst=4789,flags(key))),6
Ovs2.13 采用下面的命令:
ovs-appctl dpctl/dump-flows type=offloaded
[root@compute1 neutron]#
[root@compute1 neutron]# ovs-appctl dpctl/dump-flows type=offloaded
recirc_id(0),in_port(3),eth(src=fa:16:3e:e9:6a:ad,dst=fa:16:3e:03:f1:71),eth_type(0x0800),ipv4(tos=0/0x3,frag=no), packets:161, bytes:23828, used:0.070s, actions:set(tunnel(tun_id=0x1,src=192.168.20.241,dst=192.168.20.242,ttl=64,tp_dst=4789,flags(key))),4
recirc_id(0),in_port(3),eth(src=fa:16:3e:e9:6a:ad,dst=fa:16:3e:03:f1:71),eth_type(0x0806), packets:1, bytes:110, used:2.120s, actions:set(tunnel(tun_id=0x1,src=192.168.20.241,dst=192.168.20.242,ttl=64,tp_dst=4789,flags(key))),4
tunnel(tun_id=0x1,src=192.168.20.242,dst=192.168.20.241,tp_dst=4789,flags(+key)),recirc_id(0),in_port(4),eth(src=fa:16:3e:03:f1:71,dst=fa:16:3e:e9:6a:ad),eth_type(0x0800),ipv4(frag=no), packets:161, bytes:15778, used:0.070s, actions:3
tunnel(tun_id=0x1,src=192.168.20.242,dst=192.168.20.241,tp_dst=4789,flags(+key)),recirc_id(0),in_port(4),eth(src=fa:16:3e:03:f1:71,dst=fa:16:3e:e9:6a:ad),eth_type(0x0806), packets:1, bytes:60, used:2.120s, actions:3
[root@compute1 neutron]#
经过上述网卡的基本配置,修改openstack nova的passthrough,创建VF端口 进行openstack云主机 vm passthrough,实现了主机之间通信的流表offload到网卡。
标签:rocky,dst,智能网,controller,网卡,Cenots7.8,openstack,root,port From: https://www.cnblogs.com/netcores/p/17735937.html