第8章 PCI パススルーの設定
PCI パススルーを使用して、グラフィックカードまたはネットワークデバイス等の物理 PCI デバイスをインスタンスにアタッチすることができます。デバイスに PCI パススルーを使用する場合、インスタンスはタスクを実行するためにデバイスへの排他的アクセスを確保し、ホストはデバイスを利用することができません。
ルーティング対応プロバイダーネットワークでの PCI パススルーの使用
Compute サービスは、複数のプロバイダーネットワークにまたがる単一のネットワークをサポートしません。ネットワークに複数の物理ネットワークが含まれる場合、Compute サービスは最初の物理ネットワークだけを使用します。したがって、ルーティング対応プロバイダーネットワークを使用する場合は、すべてのコンピュートノードで同じ physical_network
名を使用する必要があります。
VLAN またはフラットネットワークのルーティング対応プロバイダーネットワークを使用する場合は、すべてのセグメントで同じ physical_network
名を使用する必要があります。その後、ネットワークに複数のセグメントを作成し、そのセグメントを適切なサブネットにマッピングします。
クラウドユーザーが PCI デバイスがアタッチされたインスタンスを作成できるようにするには、以下の手順を実施する必要があります。
- PCI パススルー用のコンピュートノードを指定する。
- 必要な PCI デバイスを持つ PCI パススルー用のコンピュートノードを設定する。
- オーバークラウドをデプロイする。
- PCI デバイスがアタッチされたインスタンスを起動するためのフレーバーを作成する。
前提条件
- 必要な PCI デバイスを持つコンピュートノード
8.1. PCI パススルー用コンピュートノードの指定
物理 PCI デバイスが接続されたインスタンスのコンピュートノードを指定するには、新しいロールファイルを作成して PCI パススルーロールを設定し、PCI パススルーのコンピュートノードにタグを付けるために使用する PCI パススルーリソースクラスを使用してベアメタルノードを設定する必要があります。
以下の手順は、まだプロビジョニングされていない新しいオーバークラウドノードに適用されます。すでにプロビジョニングされている既存のオーバークラウドノードにリソースクラスを割り当てるには、スケールダウン手順を使用してノードのプロビジョニングを解除してから、スケールアップ手順を使用して新しいリソースクラスの割り当てでノードを再プロビジョニングする必要があります。詳細は、オーバークラウドノードのスケーリング を参照してください。
手順
-
アンダークラウドに
stack
ユーザーとしてログインします。 stackrc
ファイルを取得します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow source ~/stackrc
[stack@director ~]$ source ~/stackrc
Controller
、Compute
、およびComputePCI
ロールを含む、roles_data_pci_passthrough.yaml
という名前の新しいロールデータファイルを、オーバークラウドに必要なその他のロールとともに生成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack overcloud roles \ generate -o /home/stack/templates/roles_data_pci_passthrough.yaml \ Compute:ComputePCI Compute Controller
(undercloud)$ openstack overcloud roles \ generate -o /home/stack/templates/roles_data_pci_passthrough.yaml \ Compute:ComputePCI Compute Controller
roles_data_pci_passthrough.yaml
を開き、以下のパラメーターおよびセクションを編集または追加します。セクション/パラメーター 現在の値 新しい値 ロールのコメント
Role: Compute
Role: ComputePCI
ロール名
Compute
name: ComputePCI
description
Basic Compute Node role
PCI パススルー用コンピュートノードロール
HostnameFormatDefault
%stackname%-novacompute-%index%
%stackname%-novacomputepci-%index%
deprecated_nic_config_name
compute.yaml
compute-pci-passthrough.yaml
-
オーバークラウドの PCI パススルー用コンピュートノードをノード定義のテンプレート
node.json
またはnode.yaml
に追加して、そのノードを登録します。詳細は、director を使用した Red Hat OpenStack Platform のインストールと管理 ガイドの オーバークラウドのノードの登録 を参照してください。 ノードのハードウェアを検査します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack overcloud node introspect \ --all-manageable --provide
(undercloud)$ openstack overcloud node introspect \ --all-manageable --provide
詳細は、director を使用した Red Hat OpenStack Platform のインストールと管理 ガイドの ベアメタルノードハードウェアのインベントリーの作成 を参照してください。
PCI パススルー用に指定する各ベアメタルノードに、カスタムの PCI パススルーリソースクラスをタグ付けします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal node set \ --resource-class baremetal.PCI-PASSTHROUGH <node>
(undercloud)$ openstack baremetal node set \ --resource-class baremetal.PCI-PASSTHROUGH <node>
<node>
をベアメタルノードの ID に置き換えてください。ノード定義ファイル
overcloud-baremetal-deploy.yaml
にComputePCI
ロールを追加し、予測ノード配置、リソースクラス、ネットワークトポロジー、またはノードに割り当てたいその他の属性を定義します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - name: Controller count: 3 - name: Compute count: 3 - name: ComputePCI count: 1 defaults: resource_class: baremetal.PCI-PASSTHROUGH network_config: template: /home/stack/templates/nic-config/myRoleTopology.j2
- name: Controller count: 3 - name: Compute count: 3 - name: ComputePCI count: 1 defaults: resource_class: baremetal.PCI-PASSTHROUGH network_config: template: /home/stack/templates/nic-config/myRoleTopology.j2
1 - 1 1
- 既存のネットワークトポロジーを再利用するか、ロール用の新しいカスタムネットワークインターフェイステンプレートを作成できます。詳細は、director を使用した Red Hat OpenStack Platform のインストールと管理 ガイドの カスタムネットワークインターフェイステンプレート を参照してください。
network_config
プロパティーを使用してネットワーク定義を定義しない場合、デフォルトのネットワーク定義が使用されます。
ノード定義ファイルでノード属性を設定するために使用できるプロパティーの詳細は、ベアメタルノードのプロビジョニング属性 を参照してください。ノード定義ファイルの例は、ノード定義ファイルの例 を参照してください。
プロビジョニングコマンドを実行して、ロールの新しいノードをプロビジョニングします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack overcloud node provision \ --stack <stack> \ [--network-config \]
(undercloud)$ openstack overcloud node provision \ --stack <stack> \ [--network-config \] --output /home/stack/templates/overcloud-baremetal-deployed.yaml \ /home/stack/templates/overcloud-baremetal-deploy.yaml
-
<stack>
を、ベアメタルノードがプロビジョニングされるスタックの名前に置き換えます。指定しない場合、デフォルトはovercloud
です。 -
--network-config
オプションの引数を含めて、cli-overcloud-node-network-config.yaml
Ansible Playbook にネットワーク定義を提供します。network_config
プロパティーを使用してネットワーク定義を定義しない場合、デフォルトのネットワーク定義が使用されます。
-
別のターミナルでプロビジョニングの進捗をモニタリングします。プロビジョニングが成功すると、ノードの状態が
available
からactive
に変わります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow watch openstack baremetal node list
(undercloud)$ watch openstack baremetal node list
--network-config
オプションを指定してプロビジョニングコマンドを実行しなかった場合は、network-environment.yaml
ファイルで<Role>NetworkConfigTemplate
パラメーターを設定して、NIC テンプレートファイルを指すようにします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaults: ComputeNetworkConfigTemplate: /home/stack/templates/nic-configs/compute.j2 ComputePCINetworkConfigTemplate: /home/stack/templates/nic-configs/<pci_passthrough_net_top>.j2 ControllerNetworkConfigTemplate: /home/stack/templates/nic-configs/controller.j2
parameter_defaults: ComputeNetworkConfigTemplate: /home/stack/templates/nic-configs/compute.j2 ComputePCINetworkConfigTemplate: /home/stack/templates/nic-configs/<pci_passthrough_net_top>.j2 ControllerNetworkConfigTemplate: /home/stack/templates/nic-configs/controller.j2
<pci_passthrough_net_top>
をComputePCI
ロールのネットワークトポロジーを含むファイルの名前に置き換えます。たとえば、デフォルトのネットワークトポロジーを使用するには、compute.yaml
のようにします。