OpenStack支持机密虚拟机SRIOV设备直通
OpenStack仅支持对网卡设备使能SRIOV能力。
- 在计算节点配置网卡vf。
- 查看网卡支持的最大vf数,其中${device_name}为网卡名。
cat /sys/class/net/${device_name}/device/sriov_totalvfs
- 输入vf数${vf_num},数值不得大于网卡支持的最大vf数。
echo ${vf_num} > /sys/class/net/${device_name}/device/sriov_numvfs
- 查看网卡支持的最大vf数,其中${device_name}为网卡名。
- 在计算节点配置设备信息 。
- 修改配置文件“/etc/nova/nova.conf”,配置需要直通的网卡名${device_name},${network_name}可自定义配置。
[pci] passthrough_whitelist = { "devname": "${device_name}", "physical_network": "${network_name}"}
- 完成配置后重启nova-compute服务。
systemctl restart openstack-nova-compute
- 修改配置文件“/etc/nova/nova.conf”,配置需要直通的网卡名${device_name},${network_name}可自定义配置。
- 在计算节点安装配置neutron-sriov-agent。
- 安装neutron-sriov-agent并启动服务。
yum install openstack-neutron-sriov-nic-agent -y systemctl enable neutron-sriov-nic-agent systemctl start neutron-sriov-nic-agent
- 修改sriov agent配置文件“/etc/neutron/plugins/ml2/sriov_agent.ini”。
[DEFAULT] log_dir = /var/log/neutron [sriov_nic] physical_device_mappings = ${network_name}:${device_name} [securitygroup] firewall_driver = neutron.agent.firewall.NoopFirewallDriver
- 重新启动neutron-sriov-nic-agent服务。
systemctl restart neutron-sriov-nic-agent
- 查看neutron-sriov-nic-agent服务的状态,确保其正常运行。
openstack network agent list --agent-type nic
- 安装neutron-sriov-agent并启动服务。
- 配置控制节点nova-scheduler。
- 修改配置文件“/etc/nova/nova.conf”,追加PciPassthroughFilter过滤器。
[filter_scheduler] enabled_filters = ...,PciPassthroughFilter available_filters = nova.scheduler.filters.all_filters
- 重启nova-scheduler服务。
systemctl restart openstack-nova-scheduler.service
- 修改配置文件“/etc/nova/nova.conf”,追加PciPassthroughFilter过滤器。
- 配置控制节点neutron-server。
- 编辑neutron-server的配置文件“/etc/neutron/plugins/ml2/ml2_conf.ini”,添加驱动sriovnicswitch,将flat范围设置为${network_name},该名称与上文计算节点配置保持一致。
[ml2] mechanism_drivers = openvswitch,sriovnicswitch [ml2_type_flat] flat_networks = ${network_name}
- 重启neutron-server。
systemctl restart neutron-server
- 编辑neutron-server的配置文件“/etc/neutron/plugins/ml2/ml2_conf.ini”,添加驱动sriovnicswitch,将flat范围设置为${network_name},该名称与上文计算节点配置保持一致。
- 创建网络和SRIOV直通机密虚拟机。
- 创建网络,指定物理网络${network_name}。
openstack network create --provider-physical-network ${network_name} \ --provider-network-type flat \ sriov-net
- 创建地址池,指定IP地址前缀和前缀范围。
openstack subnet pool create \ --pool-prefix xxx.xxx.x.x/x \ --default-prefix-length 24 \ --share \ shared-default-subnetpool-v4
- 在之前创建的网络sriov-net下创建子网。
openstack subnet create --network sriov-net \ --subnet-pool shared-default-subnetpool-v4 \ sriov-subnet
- 获取net_id,创建SRIOV网络端口。
net_id=$(openstack network show sriov-net -c id -f value) openstack port create --network ${net_id} --vnic-type direct sriov-port
- 获取端口ID。
port_id=$(openstack port show sriov-port -c id -f value)
- 使用6.e创建的端口创建机密虚拟机。
openstack server create --flavor cca-flavor --image openEuler-image \ --nic port-id=$port_id \ sriov_server
若需要直通多个vf,则可以再次创建port,并在创建机密虚拟机时指定多个port即可。
openstack port create --network ${net_id} --vnic-type direct sriov-port1 openstack port create --network ${net_id} --vnic-type direct sriov-port2 port_id1=$(openstack port show sriov-port1 -c id -f value) port_id2=$(openstack port show sriov-port2 -c id -f value) openstack server create --flavor cca-flavor --image openEuler-image \ --nic port-id=$port_id1 \ --nic port-id=$port_id2 \ sriov_server
- 机密虚拟机部署成功后,登录控制台能够看到对应的网卡设备。
ip a
- 创建网络,指定物理网络${network_name}。
父主题: 配置OpenStack支持机密虚拟机