10.4. 创建自定义 OVS-DPDK 计算服务
您必须在 OpenShift (RHOSO)环境中的 Red Hat OpenStack Services 中为 NFV 创建自定义 OVS-DPDK 计算服务。此服务是在数据平面上执行的 Ansible 服务。此自定义服务在 OVS-DPDK Compute 节点上应用各种参数,包括 CPU 固定参数、块迁移参数和 NUMA 感知 vswitch 功能,允许实例在连接到 OVS 网桥使用的 NIC 的 NUMA 节点上生成。
要创建 OVS-DPDK 自定义服务,您必须执行以下操作:
-
创建将配置映射到指定一组 OVS-DPDK Compute 节点的
ConfigMap。 -
创建实际 OVS-DPDK 自定义服务,它将在数据平面上实施
ConfigMap。
先决条件
-
在工作站上安装了
oc命令行工具。 -
以具有
cluster-admin权限的用户身份登录到可访问 RHOSO 控制平面的工作站。
流程
创建一个
ConfigMapCR,为参数定义配置,并将它保存到工作站上的 YAML 文件中,如dpdk-custom.yaml。根据您的环境更改值(以粗体粗体):
--- apiVersion: v1 kind: ConfigMap metadata: name: dpdk-custom-nova namespace: openstack data: 25-dpdk-custom-nova.conf: | [DEFAULT] reserved_host_memory_mb = 4096 [compute] cpu_shared_set = 0-3,24-27 cpu_dedicated_set = 8-23,32-47 [neutron] physnets = <network_name1>, <network_name2> [neutron_physnet_<network_name1>] numa_nodes = <ID list> [neutron_physnet_<network_name2>] numa_nodes = <ID list> [neutron_tunnel] numa_nodes = <ID list> [libvirt] live_migration_permit_post_copy=false ----
cpu_shared_set:输入用于提供 vCPU 清单的物理主机 CPU 数的逗号分隔列表或范围,确定未固定实例可以调度到的主机 CPU,并为使用共享仿真程序线程策略配置的实例仿真程序线程应卸载的主机 CPU。 -
cpu_dedicated_set:输入以逗号分隔的物理主机 CPU 数,或者可以调度用于固定实例 CPU 的进程的范围。例如:4-12,^8,15保留来自 4-12 和 15 的核心,不包括 8。 -
<network_name_n_> : 将 <network_name1> 和 <network_name2> 替换为网关所在的物理网络的名称,您需要为其配置 NUMA 关联性。(此网络在 neutron 网络provider:*name字段中设置。) <id list> : 将 <IDlist> 替换为与此 physnet 关联的 NUMA 节点的 ID 的逗号分隔列表。例如:0,1。例如:[neutron] physnets = foo,bar [neutron_physnet_foo] numa_nodes = 0 [neutron_physnet_bar] numa_nodes = 2, 3此配置可确保使用带有
provider:physical_network=foo'的一个或多个 L2-type 网络的实例必须调度到 NUMA 节点 0 的主机内核,而使用provider:physical_network=bar'的一个或多个网络的实例必须调度到 NUMA 节点 2 和 3 的主机内核中。对于后者的情况,需要使用hw:numa_nodes 额外的spec 将客户机分成两个或多个主机 NUMA 节点。-
live_migration_permit_post_copy=false: 对附加到 DPDK 的 Geneve 网络的实例实时迁移需要。
-
使用
ConfigMapCR 文件创建ConfigMap对象:- Example
$ oc create -f dpdk-custom.yaml -n openstack
创建一个定义 OVS-DPDK 自定义服务的
OpenStackDataPlaneServiceCR,并将它保存到工作站上的 YAML 文件中,如nova-custom-ovsdpdk.yaml:apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneService metadata: name: nova-custom-ovsdpdk namespace: openstack将
ConfigMapCR 添加到自定义服务中,并为运行此服务的节点集的单元指定SecretCR:apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneService metadata: name: nova-custom-ovsdpdk namespace: openstack spec: label: dataplane-deployment-nova-custom-ovsdpdk edpmServiceType: nova dataSources: - configMapRef: name: dpdk-custom-nova - secretRef: name: nova-cell1-compute-config - secretRef: name: nova-migration-ssh-key tlsCerts: default: contents: - dnsnames - ips networks: - ctlplane issuer: osp-rootca-issuer-internal caCerts: combined-ca-bundle通过引用 Ansible playbook 或将 Ansible play 包含在
playbookContents字段中来指定用于创建自定义服务的 Ansible 命令:apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneService metadata: name: nova-custom-ovsdpdk namespace: openstack spec: label: dataplane-deployment-nova-custom-ovsdpdk edpmServiceType: nova dataSources: - configMapRef: name: dpdk-custom-nova - secretRef: name: nova-cell1-compute-config - secretRef: name: nova-migration-ssh-key playbook: osp.edpm.nova tlsCerts: default: contents: - dnsnames - ips networks: - ctlplane issuer: osp-rootca-issuer-internal caCerts: combined-ca-bundlePlaybook: 标识可用于您的服务的默认 playbook。在本例中,它是 Compute 服务(nova)。要查看默认 playbook 列表,请参阅 https://openstack-k8s-operators.github.io/edpm-ansible/playbooks.html。
创建
nova-custom-ovsdpdk服务:$ oc apply -f nova-custom-ovsdpdk.yaml -n openstack验证是否已创建自定义服务:
$ oc get openstackdataplaneservice nova-custom-ovsdpdk -o yaml -n openstack