9.2. 为 NFV 工作负载启用 RT-KVM
为了协助安装和配置 Red Hat Enterprise Linux 8.2 Real Time KVM (RT-KVM),Red Hat OpenStack Platform 提供了以下功能:
- 为实时置备 Red Hat Enterprise Linux 的实时 Compute 节点角色。
- 额外的 RT-KVM 内核模块。
- 自动配置 Compute 节点。
9.2.1. 规划您的 RT-KVM Compute 节点
您必须使用 Red Hat 认证的服务器作为 RT-KVM Compute 节点。如需更多信息,请参阅: Red Hat Enterprise Linux for Real Time 7 认证的服务器。
有关如何为 RT-KVM 启用 rhel-8-server-nfv-rpms
存储库的详细信息,并确保您的系统是最新的,请参阅: 注册和更新 undercloud。
您需要单独订阅 Red Hat OpenStack Platform for Real Time
SKU,才能访问此软件仓库。
构建实时镜像
在 undercloud 上安装 libguestfs-tools 软件包以获取 virt-customize 工具:
(undercloud) [stack@undercloud-0 ~]$ sudo dnf install libguestfs-tools
重要如果在 undercloud 上安装
libguestfs-tools
软件包,请禁用iscsid.socket
以避免与 undercloud 上的tripleo_iscsid
服务冲突:$ sudo systemctl disable --now iscsid.socket
提取镜像:
(undercloud) [stack@undercloud-0 ~]$ tar -xf /usr/share/rhosp-director-images/overcloud-full.tar (undercloud) [stack@undercloud-0 ~]$ tar -xf /usr/share/rhosp-director-images/ironic-python-agent.tar
复制默认镜像:
(undercloud) [stack@undercloud-0 ~]$ cp overcloud-full.qcow2 overcloud-realtime-compute.qcow2
注册您的镜像,以启用与您的自定义相关的红帽软件仓库。在以下示例中,用有效的凭证替换
[username]
和[password]
。virt-customize -a overcloud-realtime-compute.qcow2 --run-command \ 'subscription-manager register --username=[username] --password=[password]' \ subscription-manager release --set 8.2
注意为安全起见,您可以在命令提示符上使用凭据时从历史记录文件中删除凭据。您可以使用
history -d
命令(后跟行号)删除历史记录中的个别行。从您的帐户的订阅中查找池 ID 列表,并将适当的池 ID 附加到您的镜像。
sudo subscription-manager list --all --available | less ... virt-customize -a overcloud-realtime-compute.qcow2 --run-command \ 'subscription-manager attach --pool [pool-ID]'
使用 NFV 添加 Red Hat OpenStack Platform 所需的存储库。
virt-customize -a overcloud-realtime-compute.qcow2 --run-command \ 'sudo subscription-manager repos --enable=rhel-8-for-x86_64-baseos-eus-rpms \ --enable=rhel-8-for-x86_64-appstream-eus-rpms \ --enable=rhel-8-for-x86_64-highavailability-eus-rpms \ --enable=ansible-2.9-for-rhel-8-x86_64-rpms \ --enable=openstack-16.1-for-rhel-8-x86_64-rpms \ --enable=rhel-8-for-x86_64-nfv-rpms \ --enable=advanced-virt-for-rhel-8-x86_64-rpms \ --enable=fast-datapath-for-rhel-8-x86_64-rpms'
创建一个脚本,以在镜像上配置实时功能。
(undercloud) [stack@undercloud-0 ~]$ cat <<'EOF' > rt.sh #!/bin/bash set -eux dnf -v -y --setopt=protected_packages= erase kernel.$(uname -m) dnf -v -y install kernel-rt kernel-rt-kvm tuned-profiles-nfv-host grubby --set-default /boot/vmlinuz*rt* EOF
运行脚本以配置实时镜像:
(undercloud) [stack@undercloud-0 ~]$ virt-customize -a overcloud-realtime-compute.qcow2 -v --run rt.sh 2>&1 | tee virt-customize.log
注意如果您在
rt.sh
脚本输出中看到以下行,"grubby fatal 错误:无法找到合适的模板"
,您可以忽略此错误。检查导致上一命令导致的
virt-customize.log
文件,以检查通过rt.sh
脚本正确安装的软件包。(undercloud) [stack@undercloud-0 ~]$ cat virt-customize.log | grep Verifying Verifying : kernel-3.10.0-957.el7.x86_64 1/1 Verifying : 10:qemu-kvm-tools-rhev-2.12.0-18.el7_6.1.x86_64 1/8 Verifying : tuned-profiles-realtime-2.10.0-6.el7_6.3.noarch 2/8 Verifying : linux-firmware-20180911-69.git85c5d90.el7.noarch 3/8 Verifying : tuned-profiles-nfv-host-2.10.0-6.el7_6.3.noarch 4/8 Verifying : kernel-rt-kvm-3.10.0-957.10.1.rt56.921.el7.x86_64 5/8 Verifying : tuna-0.13-6.el7.noarch 6/8 Verifying : kernel-rt-3.10.0-957.10.1.rt56.921.el7.x86_64 7/8 Verifying : rt-setup-2.0-6.el7.x86_64 8/8
重新标记 SELinux:
(undercloud) [stack@undercloud-0 ~]$ virt-customize -a overcloud-realtime-compute.qcow2 --selinux-relabel
提取 vmlinuz 和 initrd:
(undercloud) [stack@undercloud-0 ~]$ mkdir image (undercloud) [stack@undercloud-0 ~]$ guestmount -a overcloud-realtime-compute.qcow2 -i --ro image (undercloud) [stack@undercloud-0 ~]$ cp image/boot/vmlinuz-3.10.0-862.rt56.804.el7.x86_64 ./overcloud-realtime-compute.vmlinuz (undercloud) [stack@undercloud-0 ~]$ cp image/boot/initramfs-3.10.0-862.rt56.804.el7.x86_64.img ./overcloud-realtime-compute.initrd (undercloud) [stack@undercloud-0 ~]$ guestunmount image
注意vmlinuz
和initramfs
文件名中的软件版本因内核版本而异。上传镜像:
(undercloud) [stack@undercloud-0 ~]$ openstack overcloud image upload --update-existing --os-image-name overcloud-realtime-compute.qcow2
现在,您可以在所选 Compute 节点上与 ComputeOvsDpdkRT
可组合角色一起使用的实时镜像。
修改 RT-KVM Compute 节点上的 BIOS 设置
要减少 RT-KVM Compute 节点上的延迟,请在 Compute 节点 BIOS 设置中禁用以下参数所有选项:
- 电源管理
- 超线程
- CPU 睡眠状态
- 逻辑处理器
有关这些设置的描述以及禁用它们的影响,请参阅设置 BIOS 参数。有关如何更改 BIOS 设置的详情,请查看您的硬件厂商文档。
9.2.2. 使用 RT-KVM 配置 OVS-DPDK
您必须确定 network-environment.yaml
文件中设置的 OVS-DPDK 参数的最佳值,以优化 OVS-DPDK 的 OpenStack 网络。如需了解更多详细信息,请参阅 第 8.1 节 “使用工作流推断 DPDK 参数”。
9.2.2.1. 生成 ComputeOvsDpdk 可组合角色
使用 ComputeOvsDpdkRT
角色为实时计算镜像指定 Compute 节点。
为 ComputeOvsDpdkRT
角色生成 roles_data.yaml
。
# (undercloud) [stack@undercloud-0 ~]$ openstack overcloud roles generate -o roles_data.yaml Controller ComputeOvsDpdkRT
9.2.2.2. 配置 OVS-DPDK 参数
确定 network-environment.yaml
文件中的 OVS-DPDK 参数的最佳值,以优化您的部署。更多信息请参阅 第 8.1 节 “使用工作流推断 DPDK 参数”。
为您在
resource_registry
下使用的 OVS-DPDK 角色添加 NIC 配置:resource_registry: # Specify the relative/absolute path to the config files you want to use for override the default. OS::TripleO::ComputeOvsDpdkRT::Net::SoftwareConfig: nic-configs/compute-ovs-dpdk.yaml OS::TripleO::Controller::Net::SoftwareConfig: nic-configs/controller.yaml
在
parameter_defaults
下,设置 OVS-DPDK 和 RT-KVM 参数:# DPDK compute node. ComputeOvsDpdkRTParameters: KernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=32 iommu=pt intel_iommu=on isolcpus=1-7,17-23,9-15,25-31" TunedProfileName: "realtime-virtual-host" IsolCpusList: "1,2,3,4,5,6,7,9,10,17,18,19,20,21,22,23,11,12,13,14,15,25,26,27,28,29,30,31" NovaComputeCpuDedicatedSet: ['2,3,4,5,6,7,18,19,20,21,22,23,10,11,12,13,14,15,26,27,28,29,30,31'] NovaReservedHostMemory: 4096 OvsDpdkSocketMemory: "1024,1024" OvsDpdkMemoryChannels: "4" OvsPmdCoreList: "1,17,9,25" VhostuserSocketGroup: "hugetlbfs" ComputeOvsDpdkRTImage: "overcloud-realtime-compute"
9.2.2.3. 部署 overcloud
为 ML2-OVS 部署 overcloud:
(undercloud) [stack@undercloud-0 ~]$ openstack overcloud deploy \ --templates \ -r /home/stack/ospd-16-vlan-dpdk-ctlplane-bonding-rt/roles_data.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs-dpdk.yaml \ -e /home/stack/ospd-16-vxlan-dpdk-data-bonding-rt-hybrid/containers-prepare-parameter.yaml \ -e /home/stack/ospd-16-vxlan-dpdk-data-bonding-rt-hybrid/network-environment.yaml
9.2.3. 启动 RT-KVM 实例
执行以下步骤在启用了实时 Compute 节点上启动 RT-KVM 实例:
在 overcloud 上创建 RT-KVM 类别:
# openstack flavor create r1.small 99 4096 20 4 # openstack flavor set --property hw:cpu_policy=dedicated 99 # openstack flavor set --property hw:cpu_realtime=yes 99 # openstack flavor set --property hw:mem_page_size=1GB 99 # openstack flavor set --property hw:cpu_realtime_mask="^0-1" 99 # openstack flavor set --property hw:cpu_emulator_threads=isolate 99
启动 RT-KVM 实例:
# openstack server create --image <rhel> --flavor r1.small --nic net-id=<dpdk-net> test-rt
要验证实例是否使用分配的仿真程序线程,请运行以下命令:
# virsh dumpxml <instance-id> | grep vcpu -A1 <vcpu placement='static'>4</vcpu> <cputune> <vcpupin vcpu='0' cpuset='1'/> <vcpupin vcpu='1' cpuset='3'/> <vcpupin vcpu='2' cpuset='5'/> <vcpupin vcpu='3' cpuset='7'/> <emulatorpin cpuset='0-1'/> <vcpusched vcpus='2-3' scheduler='fifo' priority='1'/> </cputune>