鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

OpenStack支持机密虚拟机SRIOV设备直通

OpenStack仅支持对网卡设备使能SRIOV能力。

  1. 在计算节点配置网卡vf。
    1. 查看网卡支持的最大vf数,其中${device_name}为网卡名。
      cat /sys/class/net/${device_name}/device/sriov_totalvfs
    2. 输入vf数${vf_num},数值不得大于网卡支持的最大vf数。
      echo ${vf_num} > /sys/class/net/${device_name}/device/sriov_numvfs
  2. 在计算节点配置设备信息 。
    1. 修改配置文件“/etc/nova/nova.conf”,配置需要直通的网卡名${device_name},${network_name}可自定义配置。
      [pci]
      passthrough_whitelist = { "devname": "${device_name}", "physical_network": "${network_name}"}
    2. 完成配置后重启nova-compute服务。
      systemctl restart openstack-nova-compute
  3. 在计算节点安装配置neutron-sriov-agent。
    1. 安装neutron-sriov-agent并启动服务。
      yum install openstack-neutron-sriov-nic-agent -y
      systemctl enable neutron-sriov-nic-agent
      systemctl start neutron-sriov-nic-agent
    2. 修改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
    3. 重新启动neutron-sriov-nic-agent服务。
      systemctl restart neutron-sriov-nic-agent
    4. 查看neutron-sriov-nic-agent服务的状态,确保其正常运行。
      openstack network agent list --agent-type nic
  4. 配置控制节点nova-scheduler。
    1. 修改配置文件“/etc/nova/nova.conf”,追加PciPassthroughFilter过滤器。
      [filter_scheduler]
      enabled_filters = ...,PciPassthroughFilter
      available_filters = nova.scheduler.filters.all_filters
    2. 重启nova-scheduler服务。
      systemctl restart openstack-nova-scheduler.service
  5. 配置控制节点neutron-server。
    1. 编辑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}
    2. 重启neutron-server。
      systemctl restart neutron-server
  6. 创建网络和SRIOV直通机密虚拟机。
    1. 创建网络,指定物理网络${network_name}。
      openstack network create --provider-physical-network ${network_name} \
      --provider-network-type flat \
      sriov-net
    2. 创建地址池,指定IP地址前缀和前缀范围。
      openstack subnet pool create \
      --pool-prefix xxx.xxx.x.x/x \
      --default-prefix-length 24 \
      --share \
      shared-default-subnetpool-v4
    3. 在之前创建的网络sriov-net下创建子网。
      openstack subnet create --network sriov-net \
      --subnet-pool shared-default-subnetpool-v4 \
      sriov-subnet
    4. 获取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
    5. 获取端口ID。
      port_id=$(openstack port show sriov-port -c id -f value)
    6. 使用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
    7. 机密虚拟机部署成功后,登录控制台能够看到对应的网卡设备。
      ip a