10.4. カスタムの OVS-DPDK Compute サービスの作成
Red Hat OpenStack Services on OpenShift (RHOSO) 環境では、NFV 用のカスタムの OVS-DPDK Compute サービスを作成する必要があります。このサービスは、データプレーン上で実行される Ansible サービスです。このカスタムサービスは、CPU ピニングパラメーター、ブロック移行パラメーター、OVS ブリッジが使用する NIC に接続された NUMA ノードでのインスタンス生成を可能にする NUMA 対応 vswitch 機能などの各種パラメーターを、OVS-DPDK コンピュートノードに適用します。
OVS-DPDK カスタムサービスを作成するには、以下のアクションを実行する必要があります。
-
指定された OVS-DPDK コンピュートノードのセットに設定をマッピングする
ConfigMapを作成します。 -
データプレーンに
ConfigMapを実装する実際の OVS-DPDK カスタムサービスを作成します。
前提条件
-
ワークステーションに
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は、8 を除く 4 - 12 および 15 のコアを予約します。 -
<network_name_n_>:<network_name1>と<network_name2>を、NUMA アフィニティーを設定する必要があるゲートウェイが配置されている物理ネットワークの名前に置き換えます。(このネットワークは、neutron ネットワークprovider:*nameフィールドで設定します。) <ID list>:<ID list>を、この物理ネットワークに関連付けられている 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`で 1 つ以上の L2 タイプのネットワークを使用するインスタンスは NUMA ノード 0 のホストコアでスケジュールされる必要があり、provider:physical_network=bar`で 1 つ以上のネットワークを使用するインスタンスは NUMA ノード 2 と 3 の両方のホストコアでスケジュールされる必要があります。後者の場合、hw:numa_nodes extra`仕様を使用して、ゲストを 2 つ以上のホスト NUMA ノードに分割する必要があります。-
live_migration_permit_post_copy=false: DPDK を使用する Geneve ネットワークに接続されたインスタンスのブロックライブマイグレーションを正常に実行するために必要です。
-
ConfigMapCR ファイルを使用して、ConfigMapオブジェクトを作成します。- 例
$ 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: openstackConfigMapCR をカスタムサービスに追加し、このサービスを実行するノードセットの接続先セルの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-bundleAnsible Playbook を参照するか、
playbookContentsフィールドに Ansible プレイを含めることで、カスタムサービスを作成するための 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