インスタンス作成のための Compute サービスの設定
インスタンスを作成するための Compute サービス (nova) の設定と管理
概要
Red Hat ドキュメントへのフィードバック (英語のみ) リンクのコピーリンクがクリップボードにコピーされました!
Red Hat ドキュメントに対するご意見をお聞かせください。ドキュメントの改善点があればお知らせください。
問題の作成 フォームを使用して、Red Hat OpenStack Services on OpenShift (RHOSO) または Red Hat OpenStack Platform (RHOSP) の以前のリリースのドキュメントに関するフィードバックを提供します。RHOSO または RHOSP ドキュメントの問題を作成すると、その問題は RHOSO Jira プロジェクトに記録され、フィードバックの進行状況を追跡できるようになります。
問題の作成 フォームを完了するには、Jira にログインしていることを確認してください。Red Hat Jira アカウントをお持ちでない場合は、https://issues.redhat.com でアカウントを作成できます。
- 次のリンクをクリックして、問題の作成 ページを開きます (問題の作成)。
- Summary フィールドと Description フィールドに入力します。Description フィールドに、ドキュメントの URL、章またはセクション番号、および問題の詳しい説明を入力します。フォーム内の他のフィールドは変更しないでください。
- Create をクリックします。
第1章 Compute サービス (nova) の機能 リンクのコピーリンクがクリップボードにコピーされました!
Compute (nova) サービスを使用して、Red Hat OpenStack Services on OpenShift (RHOSO) 環境で仮想マシンインスタンスとベアメタルサーバーを作成、プロビジョニング、管理します。Compute サービスは、ベースとなるホストプラットフォームの詳細を公開するのではなく、Compute サービスを実行しているベースとなるハードウェアを抽象化します。たとえば、ホスト上で動作中の CPU の種別およびトポロジーを公開するのではなく、Compute サービスは多数の仮想 CPU (vCPU) を公開し、これらの仮想 CPU のオーバーコミットに対応します。
Compute サービスは、KVM ハイパーバイザーを使用して Compute サービスのワークロードを実行します。libvirt ドライバーは QEMU と協調して KVM との相互のやり取りをすべて処理し、仮想マシンインスタンスの作成を可能にします。インスタンスを作成およびプロビジョニングするために、Compute サービスは以下の RHOSO サービスと対話します。
- 認証のための Identity (keystone) サービス
- リソースインベントリーをトラッキングおよび選択するための Placement サービス
- ディスクおよびインスタンスイメージのための Image サービス (glance)
- インスタンスがブート時に接続する仮想ネットワークまたは物理ネットワークをプロビジョニングするための Networking (neutron) サービス
Compute サービスは、nova-* という名前のデーモンプロセスおよびサービスで構成されます。コアの Compute サービスを以下に示します。
- Compute サービス (
nova-compute) - このサービスは、KVM または QEMU ハイパーバイザー API の libvirt を使用してインスタンスを作成、管理、および削除し、インスタンスの状態でデータベースを更新します。
- Compute コンダクター (
nova-conductor) -
このサービスは、Compute サービスとデータベースの協調を仲介します。これにより、コンピュートノードをデータベースへの直接アクセスから隔離します。このサービスを
nova-computeサービスが実行されているノードにデプロイしないでください。 - Compute スケジューラー (
nova-scheduler) - このサービスはキューからインスタンスの要求を受け取り、インスタンスをホストするコンピュートノードを決定します。
- Compute API (
nova-api) - このサービスは、ユーザーに外部 REST API を提供します。
- API データベース
- このデータベースはインスタンスの場所の情報をトラッキングします。また、ビルドされているがスケジュールされていないインスタンスの一時的な場所を提供します。マルチセルのデプロイメントでは、このデータベースには各セルのデータベース接続を指定するセルのマッピングも含まれます。
- セルデータベース
- このデータベースには、インスタンスに関するほとんどの情報が含まれます。API データベース、コンダクター、および Compute サービスによって使用されます。
- メッセージキュー
- このメッセージングサービスは、セル内の各サービス間の通信およびグローバルなサービスとの通信のために、すべてのサービスによって使用されます。
- Compute メタデータ
-
このサービスは、インスタンス固有のデータを保管します。インスタンスは、http://169.254.169.254 または IPv6 を通じてリンクローカルアドレス 80::a9fe:a9fe から、メタデータサービスにアクセスします。Networking (neutron) サービスは、要求をメタデータ API サーバーに転送するロールを持ちます。
NeutronMetadataProxySharedSecretパラメーターを使用して、Networking サービスと Compute サービス両方の設定でシークレットキーワードを設定する必要があります。これにより、これらのサービスが通信を行うことができます。Compute メタデータサービスは、Compute API の一部としてグローバルに実行することや、それぞれのセルで実行することができます。
複数のコンピュートノードをデプロイすることができます。インスタンスを操作するハイパーバイザーは、それぞれのコンピュートノードで実行されます。それぞれのコンピュートノードには、少なくとも 2 つのネットワークインターフェイスが必要です。コンピュートノードでは、インスタンスを仮想ネットワークに接続し、セキュリティーグループを介してインスタンスにファイアウォールサービスを提供する Networking サービスエージェントも実行されます。
第2章 Compute サービス (nova) の設定 リンクのコピーリンクがクリップボードにコピーされました!
特定の機能またはワークロードのノードセットをすべて指定して設定するために、Compute サービス (nova) は nova-extra-config というデフォルトの ConfigMap CR を提供します。この CR に、デフォルトの nova サービスを使用するすべてのノードセットに適用される汎用設定を追加できます。このデフォルトの nova-extra-config ConfigMap を使用して、すべてのノードセットに適用される汎用設定を追加する場合、カスタムサービスを作成する必要はありません。
機能の汎用設定例:
apiVersion: v1
kind: ConfigMap
metadata:
name: nova-extra-config
namespace: openstack
data:
<integer>-<service>-<feature>.conf: |
[<section>]
<config_option>=<value>
-
<integer>を、サービスのデプロイ時に <service> コンテナー内の etc/<service>/<service>.conf.d/ に適用される一連の設定ファイルで設定を適用するタイミングを示す整数に置き換えます。25 未満の番号は、OpenStack サービスと Ansible 設定ファイル用に予約されています。 -
<service>を、サービスの名前に置き換えます。 -
<feature>を、機能を識別する文字列に置き換えます。 -
<section>を、設定の追加先となるセクションに置き換えます。
ノードセット全体のみ設定できます。ノードセット内のノードのサブセットを再設定することはサポートされていません。ノードセット内のノードのサブセットを再設定する必要がある場合は、現在のノードセットをスケーリングしてノードセットを分割し、スケーリングされたノードをノードセットから削除して新しいノードセットに追加する必要があります。
デプロイメントに複数のノードセットがある場合、ノードセットと DataPlaneServices がどのように設定されているかにより、nova-extra-config ConfigMap への変更が複数のノードセットに直接影響する可能性があります。
Compute サービスを設定するには、次のタスクを実行します。
-
nova-extra-configという名前のデフォルトConfigMapCR を作成または更新します。 -
データプレーンノード上のサービスを設定するために、新しい
OpenStackDataPlaneDeploymentCR を作成します。 -
デプロイするすべての
OpenStackDataPlaneNodeSetCR を含めるようにnodeSetsを指定します。 - データプレーンをデプロイします。
関連情報
- Red Hat OpenStack Services on OpenShift デプロイメントのカスタマイズ の データプレーンのカスタマイズ
第3章 インスタンス起動用のフレーバーの作成 リンクのコピーリンクがクリップボードにコピーされました!
インスタンスのフレーバーは、インスタンス用の仮想ハードウェアプロファイルを指定するリソースのテンプレートです。クラウドユーザーは、インスタンスを起動する際にフレーバーを指定する必要があります。
フレーバーにより、Compute サービスがインスタンスに割り当てる必要のある以下のリソースの量を指定することができます。
- 仮想 CPU の数
- RAM (MB 単位)
- ルートディスク (GB 単位)
- セカンダリー一時ストレージおよびスワップディスクを含む仮想ストレージ
フレーバーを全プロジェクトに公開したり、特定のプロジェクトまたはドメインを対象にプライベートに設定したりすることで、フレーバーを使用できるユーザーを指定することができます。
Red Hat OpenStack Services on OpenShift (RHOSO) にデフォルトのフレーバーはありません。フレーバーを作成するには、openstack flavor create コマンドを使用する必要があります。以下はその例です。
openstack --os-compute-api=2.86 flavor create --ram 128 --disk 1 --vcpus 1 m1.nano
このコマンドは、128 MB の RAM と 1 GB のディスクサイズを持つ m1.nano というパブリックフレーバーを作成します。API マイクロバージョンでは、フレーバーの追加仕様の検証が可能になります。フレーバーの追加仕様の検証により、フレーバーを定義するときによくあるタイプミスや同様のエラーを防止できます。マイクロバージョンは、--os-compute-api=2.86 を使用して指定します。
openstack --os-compute-api=2.86 flavor create --ram 196 --disk 1 --vcpus 1 m1.micro
このコマンドは、196 MB の RAM と 1 GB のディスクサイズを持つ m1.micro というパブリックフレーバーを作成します。
フレーバーでは、メタデータ ("追加スペック" とも呼ばれる) を使用して、インスタンス用ハードウェアのサポートおよびクォータを指定することができます。フレーバーのメタデータは、インスタンスの配置、リソースの使用上限、およびパフォーマンスに影響を及ぼします。利用可能なメタデータ属性の完全なリストは、Flavor metadata を参照してください。
フレーバーメタデータキーを使用することで、ホストアグリゲートで設定した extra_specs メタデータを照合して、インスタンスをホストするのに適したホストアグリゲートを探すこともできます。ホストアグリゲートでインスタンスをスケジュールするには、extra_specs キーに aggregate_instance_extra_specs: namespace の接頭辞を指定して、フレーバーのメタデータのスコープを定義する必要があります。詳細は、Creating and managing host aggregates を参照してください。
フレーバープロパティーを使用して設定された動作は、イメージを使用して設定された動作をオーバーライドします。クラウドユーザーがインスタンスを起動する際、指定したフレーバーの属性がイメージの属性よりも優先されます。
3.1. フレーバーの作成 リンクのコピーリンクがクリップボードにコピーされました!
特定の機能や動作のために特化したフレーバーを作成および管理することができます。以下に例を示します。
- 基になるハードウェアの要件に応じて、デフォルトのメモリーと容量を変更する
- インスタンスに特定の I/O レートを強制するためのメタデータ、またはホストアグリゲートと一致させるためのメターデータを追加する
手順
インスタンスが利用可能な基本的なリソースを指定するフレーバーを作成します。
$ openstack --os-compute-api=2.86 flavor create --ram <size_mb> \ --disk <size_gb> --vcpus <no_vcpus> \ [--private --project <project_id>] <flavor_name>-
<size_mb>を、このフレーバーで作成するインスタンスに割り当てる RAM の容量に置き換えます。 -
<size_gb>を、このフレーバーで作成するインスタンスに割り当てるルートディスクのサイズに置き換えます。 -
<no_vcpus>を、このフレーバーで作成するインスタンスに確保する仮想 CPU の数に置き換えます。 (オプション)
--privateおよび--projectオプションを指定して、特定のプロジェクトまたはユーザーグループだけがフレーバーにアクセスできるようにします。<project_id>を、このフレーバーを使用してインスタンスを作成できるプロジェクトの ID に置き換えます。アクセシビリティーを指定しない場合は、フレーバーはデフォルトで public に設定されます。つまり、すべてのプロジェクトで使用可能になります。注記パブリックフレーバーの作成後は、そのフレーバーをプライベートにすることはできません。
<flavor_name>を、一意のフレーバー名に置き換えます。フレーバーの引数の詳細は、Flavor arguments を参照してください。
-
(オプション) フレーバーのメタデータを指定するには、キー/値のペアを使用して必要な属性を設定します。
$ openstack --os-compute-api=2.86 flavor set \ --property <key=value> --property <key=value> ... <flavor_name>-
<key>を、このフレーバーで作成するインスタンスに割り当てる属性のメタデータキーに置き換えます。利用可能なメタデータキーのリストは、Flavor metadata を参照してください。 -
<value>を、このフレーバーで作成するインスタンスに割り当てるメタデータキーの値に置き換えます。 <flavor_name>を、フレーバーの名前に置き換えます。たとえば、以下のフレーバーを使用して起動されるインスタンスはに 2 つの CPU ソケットがあり、それぞれに 2 つの CPU が割り当てられます。
$ openstack --os-compute-api=2.86 flavor set \ --property hw:cpu_sockets=2 \ --property hw:cpu_cores=2 processor_topology_flavor
-
3.2. フレーバーの引数 リンクのコピーリンクがクリップボードにコピーされました!
openstack flavor create コマンドには、新しいフレーバーの名前を指定する 1 つの位置引数 <flavor_name> を使用することができます。
以下の表には、新規フレーバーを作成する際に必要に応じて指定することのできる、オプションの引数の詳細をまとめています。
| オプションの引数 | 説明 |
|---|---|
|
|
一意のフレーバー ID。デフォルト値は |
|
| (必須) インスタンスが利用可能なメモリーの容量 (MB 単位) デフォルト: 256 MB |
|
| (必須) ルート (/) パーティションに使用するディスク容量 (GB 単位)。ルートディスクは、ベースイメージがコピーされる一時ディスクです。インスタンスが永続ボリュームからブートする場合、ルートディスクは使用されません。 注記
デフォルト: 0 GB |
|
| 一時ディスクに使用するディスク容量 (GB 単位)デフォルト値は 0 GB で、セカンダリー一時ディスクは作成されません。一時ディスクは、インスタンスのライフサイクルにリンクしたマシンのローカルディスクストレージを提供します。一時ディスクは、いずれのスナップショットにも含まれません。インスタンスが削除されると、このディスクは破棄されすべてのデータが失われます。 デフォルト: 0 GB |
|
|
スワップディスクのサイズ (MB 単位)Compute サービスのバックエンドストレージがローカルストレージでない場合は、フレーバーに デフォルト: 0 GB |
|
| (必須) インスタンス用の仮想 CPU の数 デフォルト: 1 |
|
| フレーバーは、すべてのプロジェクトで利用可能です。デフォルトでは、フレーバーはパブリックですべてのプロジェクトで利用することができます。 |
|
|
フレーバーは、 |
|
| 以下の形式のキー/値のペアで指定されるメタデータまたは "追加スペック"
複数の属性を設定するには、このオプションを繰り返します。 |
|
|
プライベートのフレーバーを使用することができるプロジェクトを指定します。この引数は、 複数のプロジェクトにアクセスを許可するには、このオプションを繰り返します。 |
|
|
プライベートのフレーバーを使用することができるプロジェクトドメインを指定します。この引数は、 複数のプロジェクトドメインにアクセスを許可するには、このオプションを繰り返します。 |
|
| フレーバーの説明。長さは 65535 文字に制限されます。使用できるのは印刷可能文字だけです。 |
3.3. フレーバーのメタデータ リンクのコピーリンクがクリップボードにコピーされました!
フレーバーを作成する際に、--property オプションを使用してフレーバーのメタデータを指定します。フレーバーのメタデータは 追加スペック とも呼ばれます。フレーバーのメタデータで指定するインスタンス用ハードウェアのサポートおよびクォータは、インスタンスの配置、インスタンスの制限、およびパフォーマンスに影響を及ぼします。
- インスタンスによるリソースの使用
以下の表に示す属性キーを使用して、インスタンスによる CPU、メモリー、およびディスク I/O の使用に制限を設定します。
注記インスタンスの CPU リソース使用量を制限するための追加の仕様は、libvirt に直接渡されるホスト固有の調整可能なプロパティーであり、libvirt は制限をホスト OS に渡します。したがって、サポートされるインスタンスの CPU リソース制限の設定は、基盤となるホスト OS によって異なります。
RHOSO デプロイメントでコンピュートノードのインスタンス CPU リソース使用を設定する方法の詳細は、RHEL 9 ドキュメントの cgroup について および Libvirt ドキュメントの CPU チューニング を参照してください。
Expand 表3.2 リソースの使用を制限するためのフレーバーメタデータ キー 説明 quota:cpu_sharesドメイン内の CPU 時間の配分に使用する重みを指定します。デフォルトは OS が提供するデフォルト値です。Compute スケジューラーは、この属性の設定と同じドメイン内にある他のインスタンスの設定を比較して、相対的な重み付けを行います。たとえば、設定が
quota:cpu_shares=2048のインスタンスには、設定がquota:cpu_shares=1024のインスタンスの 2 倍の CPU 時間が割り当てられます。quota:cpu_periodcpu_quotaを適用する期間を指定します (マイクロ秒単位)。このcpu_periodの期間、各仮想 CPU はcpu_quotaを超えるランタイムを使用することはできません。1000 - 1000000 の範囲で値を設定します。無効にするには0に設定します。quota:cpu_quota各
cpu_periodにおける仮想 CPU の最大許容帯域幅を指定します (マイクロ秒単位)。- 1000 - 18446744073709551 の範囲で値を設定します。
-
無効にするには
0に設定します。 - 帯域幅に制限を設けない場合は、負の値に設定します。
cpu_quotaおよびcpu_periodを使用して、全仮想 CPU が同じ速度で実行されるようにすることができます。たとえば、以下のフレーバーを使用して、物理 CPU の処理能力の最大 50% しか消費できないインスタンスを起動することができます。$ openstack flavor set cpu_limits_flavor \ --property quota:cpu_quota=10000 \ --property quota:cpu_period=20000- インスタンスディスクのチューニング
以下の表に示す属性キーを使用して、インスタンスのディスクのパフォーマンスをチューニングします。
注記Compute サービスは、以下の QoS 設定を、Compute サービスがプロビジョニングしたストレージ (一時ストレージなど) に適用します。Block Storage (cinder) ボリュームのパフォーマンスを調整するには、ボリュームタイプのサービス品質 (QoS) 仕様を設定して関連付ける必要もあります。
Expand 表3.3 ディスクチューニング用のフレーバーメタデータ キー 説明 quota:disk_read_bytes_secインスタンスが利用可能な最大ディスク読み取りを指定します (バイト毎秒単位)。
quota:disk_read_iops_secインスタンスが利用可能な最大ディスク読み取りを指定します (IOPS 単位)。
quota:disk_write_bytes_secインスタンスが利用可能な最大ディスク書き込みを指定します (バイト毎秒単位)。
quota:disk_write_iops_secインスタンスが利用可能な最大ディスク書き込みを指定します (IOPS 単位)。
quota:disk_total_bytes_secインスタンスが利用可能な最大 I/O 操作を指定します (バイト毎秒単位)。
quota:disk_total_iops_secインスタンスが利用可能な最大 I/O 操作を指定します (IOPS 単位)。
- インスタンスのネットワークトラフィックの帯域幅
以下の表に示す属性キーを使用して、VIF I/O オプションの設定により、インスタンスのネットワークトラフィックの帯域幅上限を設定します。
注記quota:vif_*属性は非推奨になりました。代わりに、Networking (neutron) サービスの Quality of Service (QoS) ポリシーを使用します。QoS ポリシーの詳細は、ネットワークサービスの設定 ガイドの Quality of Service (QoS) ポリシーを使用したデータトラフィックの管理 を参照してください。quota:vif_*プロパティーは、NeutronOVSFirewallDriverがiptables_hybridに設定されている ML2/OVS メカニズムドライバーを使用する場合にのみサポートされます。Expand 表3.4 帯域幅を制限するためのフレーバーメタデータ キー 説明 quota:vif_inbound_average(非推奨) インスタンスに送付されるトラフィックに要求される平均ビットレートを指定します (kbps 単位)。
quota:vif_inbound_burst(非推奨) ピークの速度でバースト処理することができる受信トラフィックの最大量を指定します (KB 単位)。
quota:vif_inbound_peak(非推奨) インスタンスが受信することのできるトラフィックの最大レートを指定します (kbps 単位)。
quota:vif_outbound_average(非推奨) インスタンスから送信されるトラフィックに要求される平均ビットレートを指定します (kbps 単位)。
quota:vif_outbound_burst(非推奨) ピークの速度でバースト処理することができる送信トラフィックの最大量を指定します (KB 単位)。
quota:vif_outbound_peak(非推奨) インスタンスが送信することのできるトラフィックの最大レートを指定します (kbps 単位)。
- ハードウェアビデオ RAM
以下の表に示す属性キーを使用して、ビデオデバイスに使用するインスタンス RAM の上限を設定します。
Expand 表3.5 ビデオデバイス用のフレーバーメタデータ キー 説明 hw_video:ram_max_mbビデオデバイスに使用する最大 RAM を指定します (MB 単位)。
hw_video_ramイメージ属性で使用します。hw_video_ramはhw_video:ram_max_mb以下でなければなりません。- ウォッチドッグの動作
以下の表に示す属性キーを使用して、インスタンスで仮想ハードウェアのウォッチドッグデバイスを有効にします。
Expand 表3.6 ウォッチドッグの動作を設定するためのフレーバーメタデータ キー 説明 hw:watchdog_action仮想ハードウェアのウォッチドッグデバイスを有効にするかどうかを指定し、その動作を設定します。インスタンスがハングアップまたはエラーが発生した場合に、ウォッチドッグデバイスは設定されたアクションを実行します。ウォッチドッグは i6300esb デバイスを使用し、PCI Intel 6300ESB をエミュレートします。
hw:watchdog_actionが指定されていない場合には、ウォッチドッグは無効になります。+ 以下の有効な値のいずれかに設定します。
-
disabled: (デフォルト) デバイスは接続されません。 -
reset: インスタンスを強制的にリセットします。 -
poweroff: インスタンスを強制的にシャットダウンします。 -
pause: インスタンスを一時停止します。 none: ウォッチドッグを有効にしますが、インスタンスがハングアップまたはエラーが発生しても何も実行しません。注記特定のイメージの属性を使用して設定するウォッチドッグの動作は、フレーバーを使用して設定する動作よりも優先されます。
-
- 乱数ジェネレーター (RNG)
以下の表に示す属性キーを使用して、インスタンスで RNG デバイスを有効にします。
Expand 表3.7 RNG 用のフレーバーメタデータ キー 説明 hw_rng:allowedイメージ属性によりインスタンスに追加された RNG デバイスを無効にするには、
Falseに設定します。デフォルト:
Truehw_rng:rate_bytes期間中、インスタンスがホストのエントロピーから読み取ることのできる最大バイト数を指定します。
hw_rng:rate_period読み取り期間を指定します (ミリ秒単位)。
- 仮想パフォーマンス監視ユニット (vPMU)
以下の表に示す属性キーを使用して、インスタンスの仮想 PMU を有効にします。
Expand 表3.8 仮想 PMU 用のフレーバーメタデータ キー 説明 hw:pmuインスタンスの仮想 PMU を有効にするには、
Trueに設定します。perf等のツールは、インスタンスの仮想 PMU を使用して、インスタンスのパフォーマンスをプロファイリングおよびモニタリングするためのより正確な情報を提供します。リアルタイム負荷のケースでは、仮想 PMU のエミュレーションにより、望ましくないレイテンシーが付加される場合があります。テレメトリーの提供が不要な場合は、hw:pmu=Falseに設定します。- Virtual Trusted Platform Module (vTPM) デバイス
次の表のプロパティーキーを使用して、インスタンスの vTPM デバイスを有効にします。
Expand 表3.9 仮想 PMU 用のフレーバーメタデータ キー 説明 hw:tpm_version使用する TPM のバージョンを設定します。TPM バージョン
2.0が唯一サポートされているバージョンです。hw:tpm_model使用する TPM デバイスのモデルに設定します。
hw:tpm_versionが設定されていない場合は無視されます。以下の有効な値のいずれかに設定します。-
tpm-tis: (デフォルト) TPM インターフェイス仕様。 -
tpm-crb: コマンド応答バッファー。TPM バージョン 2.0 とのみ互換性があります。
-
- インスタンスの CPU トポロジー
以下の表に示す属性キーを使用して、インスタンス内のプロセッサーのトポロジーを定義します。
Expand 表3.10 CPU トポロジー用のフレーバーメタデータ キー 説明 hw:cpu_socketsインスタンスの推奨ソケット数を指定します。
デフォルト: 要求される仮想 CPU の数
hw:cpu_coresインスタンスの 1 ソケットあたりの推奨コア数を指定します。
デフォルト:
1hw:cpu_threadsインスタンスの 1 コアあたりの推奨スレッド数を指定します。
デフォルト:
1hw:cpu_max_socketsイメージ属性を使用してユーザーがインスタンスに選択できる最大ソケット数を指定します。
例:
hw:cpu_max_sockets=2hw:cpu_max_coresイメージ属性を使用してユーザーがインスタンスに選択できる、1 ソケットあたりの最大コア数を指定します。
hw:cpu_max_threadsイメージ属性を使用してユーザーがインスタンスに選択できる、1 コアあたりの最大スレッド数を指定します。
- シリアルポート
以下の表に示す属性キーを使用して、1 インスタンスあたりのシリアルポートの数を設定します。
Expand 表3.11 シリアルポート用のフレーバーメタデータ キー 説明 hw:serial_port_count1 インスタンスあたりの最大シリアルポート数
- CPU ピニングポリシー
デフォルトでは、インスタンスの仮想 CPU (vCPU) は 1 コア 1 スレッドのソケットです。属性を使用して、インスタンスの仮想 CPU をホストの物理 CPU コア (pCPU) に固定するフレーバーを作成することができます。1 つまたは複数のコアがスレッドシブリングを持つ同時マルチスレッド (SMT) アーキテクチャーで、ハードウェア CPU スレッドの動作を設定することもできます。
以下の表に示す属性キーを使用して、インスタンスの CPU ピニングポリシーを定義します。
Expand 表3.12 CPU ピニング用のフレーバーメタデータ キー 説明 hw:cpu_policy使用する CPU ポリシーを指定します。以下の有効な値のいずれかに設定します。
-
shared: (デフォルト) インスタンスの仮想 CPU は、ホストの物理 CPU 全体で共有されます。 -
dedicated: インスタンスの仮想 CPU をホストの物理 CPU のセットに固定します。これにより、インスタンスが固定される CPU のトポロジーに一致するインスタンス CPU のトポロジーが作成されます。このオプションの場合、必然的にオーバーコミット比は 1.0 になります。 -
mixed: インスタンス仮想 CPU は、専用 (ピニングされた) ホスト pCPU と共有 (ピニングされていない) ホスト pCPU を組み合わせて使用します。
hw:cpu_thread_policy設定が
hw:cpu_policy=dedicatedの場合に使用する CPU スレッドポリシーを指定します。以下の有効な値のいずれかに設定します。-
prefer: (デフォルト) ホストは SMT アーキテクチャーを持つ場合と持たない場合があります。SMT アーキテクチャーが存在する場合、Compute スケジューラーはスレッドシブリングを優先します。 isolate: ホストは SMT アーキテクチャーを持たないか、あるいは SMT 以外のアーキテクチャーをエミュレートする必要があります。このポリシーにより、Compute スケジューラーはHW_CPU_HYPERTHREADING特性が設定されていないホストを要求して、SMT を持たないホストにインスタンスを配置するようになります。以下の属性を使用して、この特性を明示的に要求することもできます。--property trait:HW_CPU_HYPERTHREADING=forbiddenホストが SMT アーキテクチャーを持たない場合、Compute サービスはそれぞれの仮想 CPU を想定どおりに異なるコアに配置します。ホストが SMT アーキテクチャーを持つ場合は、動作は
[workarounds]/disable_fallback_pcpu_queryパラメーターの設定により決定されます。-
True: SMT アーキテクチャーを持つホストは使用されず、スケジューリングに失敗します。 -
False: Compute サービスはそれぞれの仮想 CPU を異なる物理コアに配置します。Compute サービスは、別のインスタンスからの仮想 CPU を同じコア上に配置しません。したがって、使用される各コアのスレッドシブリングは、1 つを除きすべて使用できなくなります。
-
require: ホストは SMT アーキテクチャーを持つ必要があります。このポリシーにより、Compute スケジューラーはHW_CPU_HYPERTHREADING特性が設定されたホストを要求して、SMT を持つホストにインスタンスを配置するようになります。以下の属性を使用して、この特性を明示的に要求することもできます。--property trait:HW_CPU_HYPERTHREADING=requiredCompute サービスは、それぞれの仮想 CPU をスレッドシブリングに割り当てます。ホストが SMT アーキテクチャーを持たない場合、そのホストは使用されません。ホストは SMT アーキテクチャーを持つが、スレッドシブリングが使用されていないコアが十分にない場合、スケジューリングに失敗します。
hw:cpu_dedicated_maskどの CPU が専用 (ピニングされた) CPU か共有 (ピニングされていない/フローティング) CPU かを指定します。
-
専用 CPU を指定するには、CPU 番号または CPU 範囲を指定します。たとえば、CPU 2 と 3 を専用に指定し、残りのすべての CPU を共有に指定するには、プロパティーを
2-3に設定します。 -
共有 CPU を指定するには、CPU 番号または CPU 範囲の前にキャレット (^) を付けます。たとえば、CPU 0 と 1 を共有に指定し、残りのすべての CPU を専用に指定するには、プロパティーを
^0-1に設定します。
-
- インスタンス PCI NUMA アフィニティーポリシー
以下の表に示す属性キーを使用して、PCI パススルーデバイスおよび SR-IOV インターフェイスの NUMA アフィニティーポリシーを指定するフレーバーを作成します。
Expand 表3.13 PCI NUMA アフィニティーポリシー用のフレーバーメタデータ キー 説明 hw:pci_numa_affinity_policyPCI パススルーデバイスおよび SR-IOV インターフェイスの NUMA アフィニティーポリシーを指定します。以下の有効な値のいずれかに設定します。
-
required: インスタンスの NUMA ノードの少なくとも 1 つが PCI デバイスとのアフィニティーを持つ場合に限り、Compute サービスは PCI デバイスを要求するインスタンスを作成します。このオプションは、最高のパフォーマンスを提供します。 -
preferred: Compute サービスは、NUMA アフィニティーに基づきベストエフォートで PCI デバイスの選択を試みます。これができない場合には、Compute サービスは PCI デバイスとのアフィニティーを持たない NUMA ノード上でインスタンスをスケジュールします。 legacy: (デフォルト) 以下のどちらかのケースで、Compute サービスは PCI デバイスを要求するインスタンスを作成します。- PCI デバイスが少なくとも 1 つの NUMA ノードとのアフィニティーを持つ。
- PCI デバイスが NUMA アフィニティーに関する情報を提供しない。
socket: インスタンス NUMA ノード少なくとも 1 つが PCI デバイスと同じホストソケット内の NUMA ノードとのアフィニティーを持つ場合に限り、Compute サービスは PCI デバイスを要求するインスタンスを作成します。たとえば、次のホストアーキテクチャーには 2 つのソケットがあります。各ソケットには 2 つの NUMA ノードがあり、PCI デバイスはソケットの 1 つのノードの 1 つに接続されています。
Compute サービスは、2 つの NUMA ノードと
socketPCI NUMA アフィニティーポリシーを持つインスタンスを次のホストノードの組み合わせにのみピニングできます。これは、すべてのホストノードに、PCI デバイスのソケットにピニングされているインスタンス NUMA ノードが少なくとも 1 つあるためです。- ノード 0 とノード 1
- ノード 0 とノード 2
- ノード 0 とノード 3
- ノード 1 とノード 2
- ノード 1 とノード 3
インスタンスをピニングできないホストノードの唯一の組み合わせはノード 2 とノード 3 です。これらのノードはいずれも PCI デバイスと同じソケット上にないためです。他のノードが他のインスタンスによって使用されており、ノード 2 と 3 のみが使用可能な場合、インスタンスは起動しません。
-
- インスタンスの NUMA トポロジー
属性を使用して、インスタンスの仮想 CPU スレッドのホスト NUMA 配置、ならびにホスト NUMA ノードからのインスタンスの仮想 CPU およびメモリーの割り当てを定義するフレーバーを作成することができます。
メモリーおよび仮想 CPU の割り当てがコンピュートホスト内の NUMA ノードのサイズよりも大きいフレーバーの場合、インスタンスの NUMA トポロジーを定義するとインスタンス OS のパフォーマンスが向上します。
Compute スケジューラーは、これらの属性を使用してインスタンスに適したホストを決定します。たとえば、クラウドユーザーは以下のフレーバーを使用してインスタンスを起動します。
$ openstack flavor set numa_top_flavor \ --property hw:numa_nodes=2 \ --property hw:numa_cpus.0=0,1,2,3,4,5 \ --property hw:numa_cpus.1=6,7 \ --property hw:numa_mem.0=3072 \ --property hw:numa_mem.1=1024Compute スケジューラーは、2 つの NUMA ノード (1 つは 3 GB の RAM を持ち 6 つの CPU を実行できるノード、もう 1 つは 1 GB の RAM を持ち 2 つの CPU を実行できるノード) を持つホストを探します。4 GB の RAM を持ち 8 つの CPU を実行できる 1 つの NUMA ノードを持つホストの場合、Compute スケジューラーは有効な一致とは見なしません。
注記フレーバーで定義された NUMA トポロジーは、イメージで定義された NUMA トポロジーでオーバーライドされることはありません。イメージの NUMA トポロジーがフレーバーの NUMA トポロジーと競合する場合、Compute サービスは
ImageNUMATopologyForbiddenエラーを報告します。Importantこの機能を使用して、インスタンスを特定のホスト CPU または NUMA ノードに制限することはできません。包括的なテストおよびパフォーマンス計測が完了した後にのみ、この機能を使用してください。代わりに
hw:pci_numa_affinity_policyプロパティーを使用することができます。以下の表に示す属性キーを使用して、インスタンスの NUMA トポロジーを定義します。
Expand 表3.14 NUMA トポロジー用のフレーバーメタデータ キー 説明 hw:numa_nodesインスタンスの仮想 CPU スレッドの実行先として制限するホスト NUMA ノードの数を指定します。指定しない場合は、利用可能な任意の数のホスト NUMA ノード上で仮想 CPU スレッドを実行することができます。
hw:numa_cpus.Nインスタンスの NUMA ノード N にマッピングするインスタンスの仮想 CPU のコンマ区切りリスト。このキーを指定しない場合、仮想 CPU は利用可能な NUMA ノード間で均等に配分されます。
N は 0 から始まります。*.N 値を使用する場合には注意が必要です。NUMA ノードが少なくとも 2 つある場合に限り使用してください。
この属性は
hw:numa_nodesを設定している場合にのみ有効で、インスタンスの NUMA ノードに CPU および RAM が対称的に割り当てられていない場合 (一部の NFV 負荷で重要) にのみ必要です。hw:numa_mem.Nインスタンスの NUMA ノード N にマッピングするインスタンスのメモリー容量 (MB 単位)。このキーを指定しない場合、メモリーは利用可能な NUMA ノード間で均等に配分されます。
N は 0 から始まります。*.N 値を使用する場合には注意が必要です。NUMA ノードが少なくとも 2 つある場合に限り使用してください。
この属性は
hw:numa_nodesを設定している場合にのみ有効で、インスタンスの NUMA ノードに CPU および RAM が対称的に割り当てられていない場合 (一部の NFV 負荷で重要) にのみ必要です。警告hw:numa_cpus.Nで指定する仮想 CPU の総数またはhw:numa_mem.Nで指定するメモリー容量が、それぞれ利用可能な CPU の数またはメモリー容量よりも大きい場合、Compute サービスは例外を発生させます。
- CPU リアルタイムポリシー
以下の表に示す属性キーを使用して、インスタンス内のプロセッサーのリアルタイムポリシーを定義します。
注記- インスタンスのほとんどの仮想 CPU は、リアルタイムポリシーを設定して実行することができますが、非リアルタイムのゲストプロセスとエミュレーターのオーバーヘッドプロセスの両方に使用するために、少なくとも 1 つの仮想 CPU を非リアルタイムと識別する必要があります。
- この追加スペックを使用するには、ピニングされた CPU を有効にする必要があります。
Expand 表3.15 CPU リアルタイムポリシー用のフレーバーメタデータ キー 説明 hw:cpu_realtimeリアルタイムポリシーをインスタンスの仮想 CPU に割り当てるフレーバーを作成するには、
yesに設定します。デフォルト:
nohw:cpu_realtime_maskリアルタイムポリシーを割り当てない仮想 CPU を指定します。マスクする値の前にキャレット記号 (^) を追加する必要があります。仮想 CPU 0 および 1 を除くすべての仮想 CPU にリアルタイムポリシーを設定する場合の例を以下に示します。
$ openstack flavor set <flavor> \ --property hw:cpu_realtime="yes" \ --property hw:cpu_realtime_mask=^0-1注記hw_cpu_realtime_mask属性がイメージで設定されている場合、フレーバーで設定したhw:cpu_realtime_mask属性よりも優先されます。
- エミュレータースレッドポリシー
物理 CPU をインスタンスに割り当てて、エミュレータースレッドに使用することができます。エミュレータースレッドとは、インスタンスと直接関係しないエミュレータープロセスを指します。リアルタイム負荷には、専用のエミュレータースレッド用物理 CPU が必要です。エミュレータースレッドポリシーを使用するには、以下の属性を設定してピニングされた CPU を有効にする必要があります。
--property hw:cpu_policy=dedicated以下の表に示す属性キーを使用して、インスタンスのエミュレータースレッドポリシーを定義します。
Expand 表3.16 エミュレータースレッドポリシー用のフレーバーメタデータ キー 説明 hw:emulator_threads_policyインスタンスに使用するエミュレータースレッドポリシーを指定します。以下の有効な値のいずれかに設定します。
-
share: エミュレータースレッドは、NovaComputeCpuSharedSetheat パラメーターで定義される物理 CPU 全体で共有されます。NovaComputeCpuSharedSetが設定されていない場合、エミュレータースレッドはインスタンスに関連付けられたピニングされた CPU 全体で共有されます。 -
isolate: エミュレータースレッド用に、インスタンスごとに専用の物理 CPU をさらに確保します。このポリシーは過度にリソースを消費するので、使用には注意が必要です。 - unset: (デフォルト) エミュレータースレッドポリシーは有効ではなく、エミュレータースレッドはインスタンスに関連付けられたピニングされた CPU 全体で共有されます。
-
- インスタンスのメモリーページサイズ
以下の表に示す属性キーを使用して、明示的なメモリーページサイズでインスタンスを作成します。
Expand 表3.17 メモリーページサイズ用のフレーバーメタデータ キー 説明 hw:mem_page_sizeインスタンスをサポートするのに使用するラージページのサイズを指定します。このオプションを使用すると、
hw:numa_nodesで特に指定しない限り、1 NUMA ノードの暗黙的な NUMA トポロジーが作成されます。以下の有効な値のいずれかに設定します。-
large: ホストでサポートされる最小のページサイズより大きいページサイズを選択します。x86_64 システムでは 2 MB または 1 GB です。 -
small: ホストでサポートされる最小のページサイズを選択します。X86_64 システムでは、4 kB (通常のページ) です。 -
any: libvirt ドライバーで決定される、利用可能な最大の huge page サイズを選択します。 -
<pagesize>: (文字列) ワークロードに具体的な要件がある場合、ページサイズを明示的に設定します。ページサイズには整数値を使用し、KB またはその他の標準単位で指定します。(例:4KB、2MB、2048、1GB)。 - unset: (デフォルト) インスタンスをサポートするのにラージページは使用されず、暗黙的な NUMA トポロジーは生成されません。
-
- PCI パススルー
以下の表に示す属性キーを使用して、グラフィックカードやネットワークデバイス等の物理 PCI デバイスをインスタンスにアタッチします。
Expand 表3.18 PCI パススルー用のフレーバーメタデータ キー 説明 pci_passthrough:alias以下の形式を使用して、インスタンスに割り当てる PCI デバイスを指定します。
<alias>:<count>-
<alias>を、特定の PCI デバイスクラスに対応するエイリアスに置き換えます。 -
<count>を、インスタンスに割り当てる種別<alias>の PCI デバイスの数に置き換えます。
-
- ハイパーバイザーの署名
以下の表に示す属性キーを使用して、ハイパーバイザーの署名をインスタンスからは非表示にします。
Expand 表3.19 ハイパーバイザーの署名を非表示にするためのフレーバーメタデータ キー 説明 hide_hypervisor_idハイパーバイザーの署名をインスタンスからは非表示にするには、
Trueに設定します。これにより、すべてのドライバーがインスタンスで読み込みおよび操作を行うことができます。
- UEFI セキュアブート
次の表のプロパティーキーを使用して、UEFI セキュアブートで保護されたインスタンスを作成します。
注記UEFI セキュアブートを使用するインスタンスは、UEFI および GUID パーティションテーブル (GPT) 標準をサポートし、EFI システムパーティションを含める必要があります。
Expand 表3.20 UEFI セキュアブートのフレーバーメタデータ キー 説明 os:secure_bootこのフレーバーで起動されたインスタンスのセキュアブートを有効にするには、
requiredに設定します。デフォルトでは無効になっています。
- インスタンスのリソース特性
各リソースプロバイダーには特性のセットがあります。特性は、ストレージディスクの種別や Intel CPU 拡張命令セットなど、リソースプロバイダーの機能的な要素です。インスタンスは、これらの中から要求する特性を指定することができます。
指定することのできる特性は
os-traitsライブラリーで定義されます。特性の例を以下に示します。-
COMPUTE_TRUSTED_CERTS -
COMPUTE_NET_ATTACH_INTERFACE_WITH_TAG -
COMPUTE_IMAGE_TYPE_RAW -
HW_CPU_X86_AVX -
HW_CPU_X86_AVX512VL HW_CPU_X86_AVX512CDos-traitsライブラリーの使用方法の詳細は、https://docs.openstack.org/os-traits/latest/user/index.html を参照してください。以下の表に示す属性キーを使用して、インスタンスのリソース特性を定義します。
Expand 表3.21 リソース特性用のフレーバーメタデータ キー 説明 trait:<trait_name>コンピュートノードの特性を指定します。特性を、以下の有効な値のいずれかに設定します。
-
required: インスタンスをホストするために選択したコンピュートノードになければいけない特性 -
forbidden: インスタンスをホストするために選択したコンピュートノードにあってはいけない特性
以下に例を示します。
$ openstack flavor set --property trait:HW_CPU_X86_AVX512BW=required avx512-flavor-
-
- インスタンスのベアメタルリソースクラス
以下の表に示す属性キーを使用して、インスタンスのベアメタルリソースクラスを要求します。
Expand 表3.22 ベアメタルリソースクラス用のフレーバーメタデータ キー 説明 resources:<resource_class_name>この属性を使用して、値をオーバーライドする標準のベアメタルリソースクラスを指定するか、インスタンスが要求するカスタムのベアメタルリソースクラスを指定します。
オーバーライドすることができる標準のリソースクラスは
VCPU、MEMORY_MB、およびDISK_GBです。Compute スケジューラーがインスタンスのスケジューリングにベアメタルフレーバー属性を使用するのを防ぐには、標準のリソースクラスの値を0に設定します。カスタムリソースクラスの名前は、
CUSTOM_で始まる必要があります。Bare Metal サービスノードのリソースクラスに対応するカスタムリソースクラスの名前を指定するには、リソースクラスを大文字に変換し、すべての句読点をアンダースコアに置き換え、CUSTOM_ の接頭辞を追加します。たとえば、
--resource-class baremetal.SMALLのノードにインスタンスをスケジュールするには、以下のフレーバーを作成します。$ openstack flavor set \ --property resources:CUSTOM_BAREMETAL_SMALL=1 \ --property resources:VCPU=0 --property resources:MEMORY_MB=0 \ --property resources:DISK_GB=0 compute-small
第4章 コンピュートノードで CPU を設定する リンクのコピーリンクがクリップボードにコピーされました!
クラウドユーザーは、インスタンスのスケジューリングおよび配置を設定して、最大のパフォーマンスを得ることができます。そのためには、NFV や高性能コンピューティング (HPC) などの特化されたワークロードを対象にするカスタムフレーバーを作成します。
以下の機能を使用して、最適な CPU パフォーマンスを得るためにインスタンスを調整します。
- CPU ピニング: 仮想 CPU を物理 CPU に固定します。
- エミュレータースレッド: インスタンスに関連付けられたエミュレータースレッドを物理 CPU に固定します。
- CPU 機能フラグ: コンピュートノード間のライブマイグレーションの互換性を向上させるために、インスタンスに適用される CPU 機能フラグの標準セットを設定します。
4.1. コンピュートノードでの CPU ピニングの設定 リンクのコピーリンクがクリップボードにコピーされました!
コンピュートノードで CPU ピニングを有効化することで、各インスタンスの CPU プロセスを専用のホスト CPU で実行するように設定することができます。インスタンスが CPU ピニングを使用する場合には、各インスタンスの仮想 CPU プロセスには、他のインスタンスの仮想 CPU プロセスが使用できない独自のホストの物理 CPU が割り当てられます。CPU ピニングが設定されたコンピュートノード上で動作するインスタンスには、NUMA トポロジーがあります。インスタンスの NUMA トポロジーの各 NUMA ノードは、ホストコンピュートノード上の NUMA ノードにマッピングされます。
専用の (ピニングされた) CPU を持つインスタンスと共有 (フローティング) の CPU を持つインスタンスを同じコンピュートノード上にスケジューリングするように、Compute のスケジューラーを設定することができます。NUMA トポロジーを持つコンピュートノード上で CPU ピニングを設定するには、以下の手順を実施する必要があります。
- CPU ピニング用のコンピュートノードを指定する。
- ピニングされたインスタンス仮想 CPU プロセス、フローティングのインスタンス仮想 CPU プロセス、およびホストのプロセス用にホストコアを確保するようにコンピュートノードを設定する。
- データプレーンをデプロイします。
- CPU ピニングを要求するインスタンスを起動するためのフレーバーを作成する。
- 共有 (あるいはフローティング) の CPU を使用するインスタンスを起動するためのフレーバーを作成する。
CPU ピニングを設定すると、NUMA トポロジーが要求されていない場合でも、インスタンス上に暗黙的な NUMA トポロジーが作成されます。NUMA 仮想マシンと非 NUMA 仮想マシン (仮想マシン) を同じホストで実行しないでください。
4.1.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- コンピュートノードの NUMA トポロジーを把握している。
-
ocコマンドラインツールがワークステーションにインストールされている。 -
cluster-admin権限を持つユーザーとして、Red Hat OpenStack Services on OpenShift (RHOSO) にログインしている。
4.1.2. CPU ピニング用コンピュートノードの指定と設定 リンクのコピーリンクがクリップボードにコピーされました!
固定された CPU を持つインスタンスにコンピュートノードを指定するには、新しい OpenStackDataPlaneNodeSet カスタムリソース (CR) を作成して設定し、CPU ピニング用に指定されたノードを設定する必要があります。ノードの NUMA トポロジーに基づいて、コンピュートノードでの CPU ピニングを設定します。効率を高めるために、全 NUMA ノードにわたって、CPU コアの一部をホストのプロセス用に確保します。残りの CPU コアをインスタンスの管理に割り当てます。以下の手順では、以下の NUMA トポロジー (8 つの CPU コアを 2 つの NUMA ノードに分散) を使用して、CPU ピニングの設定方法を説明します。
| NUMA ノード 0 | NUMA ノード 1 | ||
| コア 0 | コア 1 | コア 4 | コア 5 |
| コア 2 | コア 3 | コア 6 | コア 7 |
以下の手順では、コア 0 および 4 をホストのプロセス用に、コア 1、3、5、および 7 を CPU ピニングが必要なインスタンス用に、そしてコア 2 および 6 を CPU ピニングが不要なフローティングインスタンス用に、それぞれ確保します。
次の手順は、まだプロビジョニングされていない新しい OpenStackDataPlaneNodeSet CR に適用されます。すでにプロビジョニングされている既存の OpenStackDataPlaneNodeSet を再設定するには、まず OpenStackDataPlaneNodeSet 内のすべてのノードからゲストインスタンスを drain (Pod の退避) する必要があります。
CPU ピニングを設定すると、NUMA トポロジーが要求されていない場合でも、インスタンス上に暗黙的な NUMA トポロジーが作成されます。NUMA 仮想マシンと非 NUMA 仮想マシン (仮想マシン) を同じホストで実行しないでください。
ノードセット全体のみ設定できます。ノードセット内のノードのサブセットを再設定することはサポートされていません。ノードセット内のノードのサブセットを再設定する必要がある場合は、ノードセットをスケールダウンし、以前に削除したノードから新しいノードセットを作成する必要があります。
前提条件
-
CPU ピニングを指定して設定するノードを定義する
OpenStackDataPlaneNodeSetCR を選択済みである。OpenStackDataPlaneNodeSetCR の作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイガイドの データプレーンの作成 を参照してください。
手順
nova-extra-config.yamlという名前のConfigMapCR を更新または作成し、[compute] および [default] の下にあるパラメーターの値を設定します。apiVersion: v1 kind: ConfigMap metadata: name: nova-extra-config namespace: openstack data: 25-nova-cpu-pinning.conf: |1 [compute] cpu_shared_set = 2,62 cpu_dedicated_set = 1,3,5,73 [DEFAULT] reserved_huge_pages = node:0,size:4,count:1310724 reserved_huge_pages = node:1,size:4,count:131072- 1
- 新しいコンピュート設定ファイルの名前。
nova-operatorは、01-nova.confという名前のデフォルト設定ファイルを生成します。デフォルト名は、transport_urlなどのインフラストラクチャー設定をオーバーライドするため、使用しないでください。nova-computeサービスは、/etc/nova/nova.conf.d/の下にあるファイルをすべて辞書順に適用します。そのため、後のファイルで定義された設定は、前のファイルで定義された同じ設定をオーバーライドします。 - 2
- 共有インスタンス用に物理 CPU コアを予約します。
- 3
- 専用インスタンス用に物理 CPU コアを予約します。
- 4
- NUMA ノードごとに予約するメモリーの量を指定します。
ConfigMapオブジェクトの作成の詳細は、ノード の config map の作成と使用 を参照してください。データプレーンノード上のサービスを設定するために新しい
OpenStackDataPlaneDeploymentCR を作成してデータプレーンをデプロイし、ワークステーション上のcompute_cpu_pinning_deploy.yamlという名前のファイルに保存します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: openstack-edpm-cpu-pinningOpenStackDataPlaneDeploymentCR の作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイ ガイドの データプレーンのデプロイ を参照してください。compute_cpu_pinning_deploy.yamlで、デプロイするすべてのOpenStackDataPlaneNodeSetCR を含めるようにnodeSetsを指定します。前提条件として選択したOpenStackDataPlaneNodeSetCR が含まれていることを確認してください。このOpenStackDataPlaneNodeSetCR は、CPU ピニングに指定するノードを定義します。警告デプロイメントに複数のノードセットがある場合、ノードセットと
DataPlaneServicesがどのように設定されているかにより、nova-extra-config.yamlConfigMapへの変更が複数のノードセットに直接影響する可能性があります。ノードセットがnova-extra-configConfigMapを使用しているために再設定の影響を受けるかを確認するには、次の手順を実行します。-
ノードセットのサービスリストを確認し、nova を指す
DataPlaneServiceの名前を見つけます。 DataPlaneServiceのedpmServiceTypeフィールドの値がnovaに設定されていることを確認します。DataPlaneServiceの dataSources リストにnova-extra-configという名前の configMapRef が含まれている場合、このノードセットはこのConfigMapを使用し、その結果このConfigMapに加えた設定変更の影響を受けます。影響を受けるノードセットの一部を再設定しない場合は、これらのノードセットの別のConfigMapを指す新しい DataPlaneService を作成する必要があります。
apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: openstack-edpm-cpu-pinning spec: nodeSets: - openstack-edpm - compute-cpu-pinning - ... - <nodeSet_name>-
<nodeSet_name>は、データプレーンデプロイメントに含めるOpenStackDataPlaneNodeSetCR の名前に置き換えます。
-
ノードセットのサービスリストを確認し、nova を指す
-
compute_cpu_pinning_deploy.yamlデプロイメントファイルを保存します。 データプレーンをデプロイします。
$ oc create -f compute_cpu_pinning_deploy.yamlデータプレーンがデプロイされていることを確認します。
$ oc get openstackdataplanenodeset NAME STATUS MESSAGE compute-cpu-pinning True Deployedopenstackclientのリモートシェルにアクセスし、デプロイされたコンピュートノードがコントロールプレーンに表示されることを確認します。$ oc rsh -n openstack openstackclient $ openstack hypervisor list
4.1.3. インスタンス用の専用 CPU フレーバーの作成 リンクのコピーリンクがクリップボードにコピーされました!
クラウドユーザーが専用の CPU を持つインスタンスを作成できるようにするには、インスタンス起動用の専用 CPU ポリシーが設定されたフレーバーを作成します。
前提条件
-
requiredcpu_thread_policyを使用する場合は、ホスト上で同時マルチスレッド (SMT) が設定済みである。SMT と非 SMT のコンピュートホストを混在させることができます。requirecpu_thread_policyを持つフレーバーは SMT ホストに配置され、isolateを持つフレーバーは非 SMT に配置されている。 - コンピュートノードが CPU ピニングを許可するように設定されている。詳細は、コンピュートノードでの CPU ピニングの設定 を参照してください。
手順
CPU ピニングを要求するインスタンス用のフレーバーを作成します。
$ openstack flavor create --ram <size_mb> \ --disk <size_gb> --vcpus <num_guest_vcpus> pinned_cpusfile-backed メモリーを使用していない場合は、フレーバーの
hw:mem_page_sizeプロパティーで NUMA 対応メモリー割り当てを有効に設定します。$ openstack --os-compute-api=2.86 flavor set \ --property hw:mem_page_size=<page_size> pinned_cpus<page_size>は、次に示す有効な値のいずれかに置き換えます。-
large: ホストでサポートされる最大のページサイズを選択します。x86_64 システムでは 2 MB または 1 GB です。 -
small: (デフォルト) ホストでサポートされる最小のページサイズを選択します。X86_64 システムでは、4 kB (通常のページ) です。 -
any: イメージに設定されたhw_mem_page_sizeを使用してページサイズを選択します。ページサイズがイメージで指定されていない場合は、libvirt ドライバーで決定される、利用可能な最大のページサイズを選択します。 -
<pagesize>: ワークロードに具体的な要件がある場合、ページサイズを明示的に設定します。ページサイズには整数値を使用し、KB またはその他の標準単位で指定します。(例: 4kB、2MB、2048、1GB)。
-
注記hw:mem_page_sizeをsmallまたはanyに設定するには、インスタンスではないプロセス用に各 NUMA ノードで予約するメモリーページの量を設定しておく必要があります。ピニングされた CPU を要求するには、フレーバーの
hw:cpu_policy属性をdedicatedに設定します。$ openstack --os-compute-api=2.86 flavor set \ --property hw:cpu_policy=dedicated pinned_cpusオプショ: それぞれの仮想 CPU をスレッドシブリングに配置するには、フレーバーの
hw:cpu_thread_policy属性をrequireに設定します。$ openstack --os-compute-api=2.86 flavor set \ --property hw:cpu_thread_policy=require pinned_cpus注記-
ホストに SMT アーキテクチャーがない場合や、スレッドシブリングが利用可能な CPU コアが十分にない場合には、スケジューリングが失敗します。これを回避するには、
hw:cpu_thread_policyをrequireではなくpreferに設定します。preferポリシーは、スレッドシブリングが利用可能な場合に使用されるデフォルトのポリシーです。 -
hw:cpu_thread_policy=isolateを使用する場合は、SMT を無効にするか、SMT をサポートしないプラットフォームを使用する必要があります。
-
ホストに SMT アーキテクチャーがない場合や、スレッドシブリングが利用可能な CPU コアが十分にない場合には、スケジューリングが失敗します。これを回避するには、
フレーバーにより専用の CPU を持つインスタンスが作成されることを確認するには、新しいフレーバーを使用してインスタンスを起動します。
$ openstack server create --flavor pinned_cpus \ --image <image> pinned_cpu_instance
4.1.5. インスタンス用の混合 CPU フレーバーの作成 リンクのコピーリンクがクリップボードにコピーされました!
クラウドユーザーが専用 CPU と共有 CPU の組み合わせを持つインスタンスを作成できるようにするには、インスタンス起動用の混合 CPU ポリシーが設定されたフレーバーを作成します。
手順
専用 CPU と共有 CPU の組み合わせを要求するインスタンス用のフレーバーを作成します。
$ openstack flavor create --ram <size_mb> \ --disk <size_gb> --vcpus <number_of_reserved_vcpus> \ --property hw:cpu_policy=mixed mixed_CPUs_flavorどの CPU を専用または共有にする必要があるかを指定します。
$ openstack --os-compute-api=2.86 flavor set \ --property hw:cpu_dedicated_mask=<CPU_MASK> \ mixed_CPUs_flavor<CPU_MASK>を、専用または共有にする必要のある CPU に置き換えます。-
専用 CPU を指定するには、CPU 番号または CPU 範囲を指定します。たとえば、CPU 2 と 3 を専用に指定し、残りのすべての CPU を共有に指定するには、プロパティーを
2-3に設定します。 -
共有 CPU を指定するには、CPU 番号または CPU 範囲の前にキャレット (^) を付けます。たとえば、CPU 0 と 1 を共有に指定し、残りのすべての CPU を専用に指定するには、プロパティーを
^0-1に設定します。
-
専用 CPU を指定するには、CPU 番号または CPU 範囲を指定します。たとえば、CPU 2 と 3 を専用に指定し、残りのすべての CPU を共有に指定するには、プロパティーを
file-backed メモリーを使用していない場合は、フレーバーの
hw:mem_page_sizeプロパティーで NUMA 対応メモリー割り当てを有効に設定します。$ openstack --os-compute-api=2.86 flavor set \ --property hw:mem_page_size=<page_size> mixed_CPUs_flavor<page_size>は、次に示す有効な値のいずれかに置き換えます。-
large: ホストでサポートされる最大のページサイズを選択します。x86_64 システムでは 2 MB または 1 GB です。 -
small: (デフォルト) ホストでサポートされる最小のページサイズを選択します。X86_64 システムでは、4 kB (通常のページ) です。 -
any: イメージに設定されたhw_mem_page_sizeを使用してページサイズを選択します。ページサイズがイメージで指定されていない場合は、libvirt ドライバーで決定される、利用可能な最大のページサイズを選択します。 <pagesize>: ワークロードに具体的な要件がある場合、ページサイズを明示的に設定します。ページサイズには整数値を使用し、KB またはその他の標準単位で指定します。(例: 4kB、2MB、2048、1GB)。注記hw:mem_page_sizeをsmallまたはanyに設定するには、インスタンスではないプロセス用に各 NUMA ノードで予約するメモリーページの量を設定しておく必要があります。
-
4.1.6. 同時マルチスレッド (SMT) 対応のコンピュートノードでの CPU ピニングの設定 リンクのコピーリンクがクリップボードにコピーされました!
コンピュートノードが同時マルチスレッド (SMT) をサポートする場合、スレッドシブリングを専用または共有セットのいずれかにグルーピングします。スレッドシブリングは共通のハードウェアを共有するため、あるスレッドシブリング上で動作しているプロセスが、他のスレッドシブリングのパフォーマンスに影響を与える可能性があります。
たとえば、ホストは、SMT 対応のデュアルコア CPU に 4 つの論理 CPU コア (0、1、2、および 3) を認識します。この 4 つの CPU に対して、スレッドシブリングのペアが 2 つあります。
- スレッドシブリング 1: 論理 CPU コア 0 および 2
- スレッドシブリング 2: 論理 CPU コア 1 および 3
このシナリオでは、論理 CPU コア 0 および 1 を専用として、2 および 3 を共有として割り当てないでください。そうではなく、0 および 2 を専用として、1 および 3 を共有として割り当てます。
/sys/devices/system/cpu/cpuN/topology/thread_siblings_list のファイル。N は論理 CPU 番号で、スレッドペアが含まれます。以下のコマンドを使用して、スレッドシブリングである論理 CPU コアを特定できます。
# grep -H . /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | sort -n -t ':' -k 2 -u
以下の出力は、論理 CPU コア 0 と論理 CPU コア 2 が同じコア上のスレッドであることを示しています。
/sys/devices/system/cpu/cpu0/topology/thread_siblings_list:0,2
/sys/devices/system/cpu/cpu2/topology/thread_siblings_list:1,3
4.1.7. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
4.2. エミュレータースレッドの設定 リンクのコピーリンクがクリップボードにコピーされました!
コンピュートノードには、エミュレータースレッドと呼ばれる各インスタンスのハイパーバイザーとリンクするオーバーヘッドタスクがあります。デフォルトでは、エミュレータースレッドはインスタンスと同じ CPU で実行され、インスタンスのパフォーマンスに影響を及ぼします。
エミュレータースレッドポリシーを設定して、インスタンスが使用する CPU とは別の CPU でエミュレータースレッドを実行することができます。
パケットロスを避けるために、NFV デプロイメントでは絶対に仮想 CPU のプリエンプションを行わないでください。エミュレータースレッドが NFV ワークロードとは異なる CPU で実行されるように設定してください。
ノードセット全体のみ設定できます。ノードセット内のノードのサブセットを再設定することはサポートされていません。ノードセット内のノードのサブセットを再設定する必要がある場合は、ノードセットをスケールダウンし、以前に削除したノードから新しいノードセットを作成する必要があります。
前提条件
- CPU ピニングを有効にした。
-
エミュレータースレッド用に設定するノードを定義する
OpenStackDataPlaneNodeSetカスタムリソース (CR) を選択した。OpenStackDataPlaneNodeSetCR の作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイ ガイドの データプレーンの作成 を参照してください。
手順
エミュレータースレッド用にノードを設定するために、
nova-extra-config.yamlという名前のConfigMapCR を作成または更新し、[compute]の下のcpu_dedicated_setパラメーターの値を設定します。たとえば、以下の設定では、32 コア CPU を持つコンピュートノードに専用の CPU を設定します。apiVersion: v1 kind: ConfigMap metadata: name: nova-extra-config namespace: openstack data: 33-nova-emulator-threads.conf: | [compute] cpu_dedicated_set = 2-15,18-31エミュレータースレッド用に物理 CPU コアを予約するために、
cpu_shared_setパラメーターを設定します。たとえば、以下の設定では、32 コア CPU を持つコンピュートノードに共有の CPU を設定します。[compute] cpu_shared_set = 0,1,16,17注記Compute スケジューラーは、共有 (またはフローティング) CPU 上で動作するインスタンス用にも共有セット内の CPU を使用します。詳細は、コンピュートノードでの CPU ピニングの設定 を参照してください。
新しい
OpenStackDataPlaneDeploymentCR を作成して、データプレーンノード上のサービスを設定し、データプレーンをデプロイし、ワークステーション上のcompute_emulator_threads_deploy.yamlという名前のファイルに保存します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: openstack-emulator-threadscompute_emulator_threads_deploy.yamlで、デプロイするすべてのOpenStackDataPlaneNodeSetCR を含めるようにnodeSetsを指定します。前提条件として選択したOpenStackDataPlaneNodeSetCR が含まれていることを確認してください。このOpenStackDataPlaneNodeSetCR は、エミュレータースレッドに指定するノードを定義します。警告デプロイメントに複数のノードセットがある場合、ノードセットと
DataPlaneServicesがどのように設定されているかにより、nova-extra-config.yamlConfigMapへの変更が複数のノードセットに直接影響する可能性があります。ノードセットがnova-extra-configConfigMapを使用しているために再設定の影響を受けるかを確認するには、次の手順を実行します。-
ノードセットのサービスリストを確認し、
novaサービスを指すOpenStackDataPlaneServiceCR の名前を見つけます。 OpenStackDataPlaneServiceCR のedpmServiceTypeフィールドの値がnovaに設定されていることを確認します。OpenStackDataPlaneServiceCR のdataSourcesリストにnova-extra-configという名前のconfigMapRefが含まれている場合、このノードセットはこのConfigMapを使用し、その結果このConfigMapに加えた設定変更の影響を受けます。影響を受けるノードセットの一部を再設定しない場合は、これらのノードセットの別のConfigMapを指す新しいOpenStackDataPlaneServiceCR を作成する必要があります。
apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: openstack-emulator-threads spec: nodeSets: - openstack-edpm - compute-emulator-threads - my-data-plane-node-set - ... - <nodeSet_name>-
<nodeSet_name>は、データプレーンデプロイメントに含めるOpenStackDataPlaneNodeSetCR の名前に置き換えます。
-
ノードセットのサービスリストを確認し、
-
compute_emulator_threads_deploy.yamlデプロイメントファイルを保存します。 データプレーンをデプロイします。
$ oc create -f compute_emulator_threads_deploy.yamlデータプレーンがデプロイされていることを確認します。
$ oc get openstackdataplanenodeset NAME STATUS MESSAGE compute-emulator-threads True Deployedopenstackclientのリモートシェルにアクセスし、デプロイされたコンピュートノードがコントロールプレーンに表示されることを確認します。$ oc rsh -n openstack openstackclient $ openstack hypervisor listcpu_shared_setを使用して設定した共有 CPU から選択した専用の CPU 上でインスタンスのエミュレータースレッドを実行するフレーバーを設定します。$ openstack --os-compute-api=2.86 flavor set --property hw:cpu_policy=dedicated \ --property hw:emulator_threads_policy=share \ dedicated_emulator_threadshw:emulator_threads_policyの設定オプションの詳細は、Flavor metadata の Emulator threads policy を参照してください。
4.3. インスタンスの CPU 機能フラグの設定 リンクのコピーリンクがクリップボードにコピーされました!
ホストコンピュートノードの設定を変更してコンピュートノードをリブートすることなく、インスタンスの CPU 機能フラグを有効または無効にすることができます。インスタンスに適用される CPU 機能フラグの標準的なセットを設定することで、コンピュートノード間でライブマイグレーションの互換性を実現するのに役立ちます。また、特定の CPU モデルにおいてインスタンスのセキュリティーやパフォーマンスに悪影響を与えるフラグを無効にしたり、セキュリティーやパフォーマンスの問題を軽減するフラグを有効したりして、インスタンスのパフォーマンスおよびセキュリティーを管理するのにも役立ちます。
4.3.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
CPU モデルおよび機能フラグが、ホストコンピュートノードのハードウェアおよびソフトウェアでサポートされる必要があります。
ホストが対応しているハードウェアを確認するには、コンピュートノードで以下のコマンドを入力します。
$ cat /proc/cpuinfoホストが対応している CPU モデルを確認するには、コンピュートノードで以下のコマンドを入力します。
$ sudo virsh cpu-models <arch><arch>をアーキテクチャーの名前に置き換えます (例:x86_64)。
-
CPU ピニングを指定して設定するノードを定義する
OpenStackDataPlaneNodeSetCR を選択済みである。OpenStackDataPlaneNodeSetCR の作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイ ガイドの データプレーンの作成 を参照してください。
4.3.2. インスタンスの CPU 機能フラグの設定 リンクのコピーリンクがクリップボードにコピーされました!
Compute サービスを設定し、特定の仮想 CPU モデルのインスタンスに CPU 機能フラグを適用します。
手順
仮想 CPU モデルを持つインスタンスに CPU 機能フラグを適用するために、
nova-extra-config.yamlという名前のConfigMapCR を作成または更新し、[libvirt]の下のcpu_modeパラメーターの値を設定します。apiVersion: v1 kind: ConfigMap metadata: name: nova-extra-config namespace: openstack data: 34-nova-feature-flags.conf: | [libvirt] cpu_mode = customcpu_modeは、次のいずれかの有効な値に設定できます。-
host-model:(デフォルト) ホストコンピュートノードの CPU モデルを使用します。この CPU モードを使用して、重要な CPU フラグをインスタンスに自動的に追加し、セキュリティー上の欠陥の軽減策を提供します。 -
custom: 各インスタンスが使用する特定の CPU モデルを設定するのに使用します。 -
host-passthrough: そのコンピュートノードでホストされるインスタンスに、コンピュートノードと同じ CPU モデルおよび機能フラグを使用します。
-
オプション:
cpu_modeをcustomに設定する場合は、コンマ区切りリストを使用して、カスタマイズするインスタンス CPU モデルを設定します。[libvirt] cpu_mode = custom cpu_models = <cpu_model1>,<cpu_model2>-
<cpu_modelx>`は、CPU モデルの名前 (例:Haswell-noTSX-IBRS) に置き換えます。 CPU モデルを順にリスト表示します。この際、より一般的で高度ではない CPU モデルは最初にリストに配置され、より機能が充実した CPU モデルが最後に置かれます (例:
x86_64)。モデル名のリストは、/usr/share/libvirt/cpu_map/*.xmlを参照してください。または、ホストコンピュートノードで以下のコマンドを入力します。$ sudo virsh cpu-models <arch>-
<arch>をコンピュートノードのアーキテクチャー名に置き換えてください (例:x86_64)。
-
-
指定の CPU モデルのインスタンスの CPU 機能フラグを設定します。
[libvirt] cpu_mode = custom cpu_models = Haswell-noTSX-IBRS cpu_model_extra_flags = -PDPE1GB, +VMX, pcid-
フラグを有効にするには各フラグの前に "+" を付け、無効にするには "-" を付けます。接頭辞が指定されていない場合、フラグが有効になります。特定の CPU モデルで利用可能な機能フラグのリストは、
/usr/share/libvirt/cpu_map/*.xmlを参照してください。この例では、Haswell、noTSX、および IBRS モデルの CPU 機能フラグであるpcidとVMXを有効にし、機能フラグmtrrを無効にします。
-
フラグを有効にするには各フラグの前に "+" を付け、無効にするには "-" を付けます。接頭辞が指定されていない場合、フラグが有効になります。特定の CPU モデルで利用可能な機能フラグのリストは、
新しい
OpenStackDataPlaneDeploymentCR を作成して、データプレーンノード上のサービスを設定し、データプレーンをデプロイし、ワークステーション上のcompute_feature_flags_deploy.yamlという名前のファイルに保存します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: openstack-feature-flagscompute_feature_flags_deploy.yamlで、デプロイするすべてのOpenStackDataPlaneNodeSetCR を含めるようにnodeSetsを指定します。前提条件として選択したOpenStackDataPlaneNodeSetCR が含まれていることを確認してください。このOpenStackDataPlaneNodeSetCR は、機能フラグに対して設定するノードを定義します。警告デプロイメントに複数のノードセットがある場合、ノードセットと
DataPlaneServicesがどのように設定されているかにより、nova-extra-config.yamlConfigMapへの変更が複数のノードセットに直接影響する可能性があります。ノードセットがnova-extra-configConfigMapを使用しているために再設定の影響を受けるかを確認するには、次の手順を実行します。-
ノードセットのサービスリストを確認し、
novaサービスを指すOpenStackDataPlaneServiceCR の名前を見つけます。 OpenStackDataPlaneServiceCR のedpmServiceTypeフィールドの値がnovaに設定されていることを確認します。OpenStackDataPlaneServiceCR のdataSourcesリストにnova-extra-configという名前のconfigMapRefが含まれている場合、このノードセットはこのConfigMapを使用し、その結果このConfigMapに加えた設定変更の影響を受けます。影響を受けるノードセットの一部を再設定しない場合は、これらのノードセットの別のConfigMapを指す新しいOpenStackDataPlaneServiceCR を作成する必要があります。
apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: openstack-feature-flags spec: nodeSets: - openstack-edpm - compute-feature-flags - ... - <nodeSet_name>-
<nodeSet_name>は、データプレーンデプロイメントに含めるOpenStackDataPlaneNodeSetCR の名前に置き換えます。
-
ノードセットのサービスリストを確認し、
-
compute_feature_flags_deploy.yamlデプロイメントファイルを保存します。 データプレーンをデプロイします。
$ oc create -f compute_feature_flags_deploy.yamlデータプレーンがデプロイされていることを確認します。
$ oc get openstackdataplanenodeset NAME STATUS MESSAGE compute-feature-flags True Deployedopenstackclientのリモートシェルにアクセスし、デプロイされたコンピュートノードがコントロールプレーンに表示されることを確認します。$ oc rsh -n openstack openstackclient $ openstack hypervisor list
第5章 コンピュートノードでメモリーを設定する リンクのコピーリンクがクリップボードにコピーされました!
クラウドユーザーは、インスタンスのスケジューリングおよび配置を設定して、最大のパフォーマンスを得ることができます。そのためには、NFV や高性能コンピューティング (HPC) などの特化されたワークロードを対象にするカスタムフレーバーを作成します。
インスタンスを調整するには、次の機能を使用します。
- Overallocation: 仮想 RAM と物理 RAM の割り当て比率を調整します。
- Swap: メモリーのオーバーコミットを処理するために、割り当てられたスワップサイズを調整します。
- Huge pages: 通常のメモリー (4 KB ページ) とヒュージページ (2 MB または 1 GB ページ) の両方について、インスタンスのメモリー割り当てポリシーを調整します。
- File-backed memory: コンピュートノードのメモリー容量を拡張するために使用します。
- SEV: クラウドユーザーが、メモリー暗号化を使用するインスタンスを作成できるようにするために使用します。
5.1. オーバーコミットのためのメモリー設定 リンクのコピーリンクがクリップボードにコピーされました!
メモリーのオーバーコミット (ram_allocation_ratio >= 1.0) を使用する場合、割り当て率をサポートできる十分なスワップ領域を確保してデプロイする必要があります。
ram_allocation_ratio パラメーターが < 1 に設定されている場合、スワップサイズに関する RHEL ガイダンスに従ってください。詳細は、RHEL ストレージデバイスの管理 の システムの推奨スワップ領域 を参照してください。
前提条件
- ノードに必要なスワップサイズが計算されている。詳細は、スワップサイズの計算 を参照してください。
手順
-
更新するノードセットの
OpenStackDataPlaneNodeSetCR 定義ファイル (例:my_data_plane_node_set.yaml) を開きます。 必要な設定を追加するか、
ansibleVarsの下の既存設定を変更します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet metadata: name: my-data-plane-node-set spec: ... nodeTemplate: ... ansible: ansibleVars: edpm_bootstrap_swap_size_megabytes: 1024 edpm_bootstrap_swap_path: /swap edpm_bootstrap_swap_partition_enabled: false edpm_bootstrap_swap_partition_label: swap1 ...-
OpenStackDataPlaneNodeSetCR 定義ファイルを保存します。 更新済みの
OpenStackDataPlaneNodeSetCR 設定を適用します。$ oc apply -f my_data_plane_node_set.yaml -n openstackデータプレーンリソースが更新されたことを確認します。
$ oc get openstackdataplanenodeset出力サンプル
NAME STATUS MESSAGE my-data-plane-node-set False Deployment not startedワークステーションに
OpenStackDataPlaneDeploymentCR を定義するファイル (例:my_data_plane_deploy.yaml) を作成します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: my-data-plane-deployヒント定義ファイルと
OpenStackDataPlaneDeploymentCR に、変更されたノードセットの目的を示す一意の説明的な名前を付けます。変更した
OpenStackDataPlaneNodeSetCR を追加します。spec: nodeSets: - my-data-plane-node-set-
OpenStackDataPlaneDeploymentCR デプロイメントファイルを保存します。 変更した
OpenStackDataPlaneNodeSetCR をデプロイします。$ oc create -f my_data_plane_deploy.yaml -n openstackデプロイメントの実行中に Ansible ログを表示できます。
$ oc get pod -l app=openstackansibleee -n openstack -w $ oc logs -l app=openstackansibleee -n openstack -f \ --max-log-requests 10変更された
OpenStackDataPlaneNodeSetCR がデプロイされていることを確認します。以下に例を示します。
$ oc get openstackdataplanedeployment -n openstack出力サンプル
NAME STATUS MESSAGE my-data-plane-node-set True Setup CompleteNodeSet Ready メッセージが表示されるまで、
oc getコマンドを繰り返します。以下に例を示します。
$ oc get openstackdataplanenodeset -n openstack出力サンプル
NAME STATUS MESSAGE my-data-plane-node-set True NodeSet Ready返されるステータスの意味については、Red Hat OpenStack Services on OpenShift のデプロイ の データプレーンの状態 を参照してください。
5.2. コンピュートノード上で確保するホストメモリーの計算 リンクのコピーリンクがクリップボードにコピーされました!
ホストのプロセス用に確保する RAM 容量の合計を判断するには、以下の各項目に十分なメモリーを割り当てる必要があります。
- Ceph Object Storage Daemon (OSD) などのホスト上で実行されるリソースは、3 GB のメモリーを使用します。
- ホストインスタンスに必要なエミュレーターのオーバーヘッド
- 各インスタンスのハイパーバイザー
次の式を使用して、各ノード上のホストプロセス用に予約するメモリーの量を計算できます。
reserved_host_memory_mb = total_RAM - ( (vm_no * (avg_instance_size + overhead)) + (resource1 * resource_ram) + (resourceN * resource_ram))
-
vm_noは、インスタンスの数に置き換えます。 -
avg_instance_sizeは、各インスタンスが使用できるメモリーの平均容量に置き換えます。 -
overheadは、各インスタンスに必要なハイパーバイザーのオーバーヘッドに置き換えます。 -
resource1と、<resourceN>までのすべてのリソースを、ノード上のリソースタイプの数に置き換えます。 -
resource_ramは、この種別の各リソースに必要な RAM の容量に置き換えます。
このホストがゲスト NUMA トポロジー (CPU ピニング、huge page、またはフレーバーで指定された明示的な NUMA トポロジーを持つインスタンスなど) を使用してワークロードを実行する場合は、reserved_huge_pages 設定オプションを使用して、NUMA ノードあたりのメモリーを 4096 ページとして予約する必要があります。
reserved_host_memory_mb 値の計算方法は、コンピュートノード上で確保するホストメモリーの計算 を参照してください。
5.3. スワップサイズの計算 リンクのコピーリンクがクリップボードにコピーされました!
割り当てるスワップサイズは、メモリーのオーバーコミットを処理するのに十分な容量でなければなりません。以下の式を使用して、ノードに必要なスワップサイズを計算することができます。
-
overcommit_ratio =
ram_allocation_ratio- 1 -
最小スワップサイズ (MB) =
(total_RAM * overcommit_ratio) + RHEL_min_swap -
最大スワップサイズ (MB) =
total_RAM * (overcommit_ratio + percentage_of_RAM_to_use_for_swap)
percentage_of_RAM_to_use_for_swap 変数は、QEMU のオーバーヘッドおよびオペレーティングシステムまたはホストのサービスが消費するその他のリソースに対応するバッファーです。
たとえば、RAM 容量の合計が 64 GB で ram_allocation_ratio が 1 に設定されている場合、利用可能な RAM の 25% をスワップに使用するには以下のとおりとなります。
- 推奨 (最大) スワップサイズ = 64000 MB * (0 + 0.25) = 16000 MB
RHEL_min_swap の値を決定する方法は、RHEL の ストレージデバイスの管理 の システムの推奨スワップ領域 を参照してください。
5.4. コンピュートノードでの Huge Page の設定 リンクのコピーリンクがクリップボードにコピーされました!
クラウド管理者は、インスタンスが Huge Page を要求できるようにコンピュートノードを設定することができます。
Huge Page を設定すると、NUMA トポロジーが要求されていない場合でも、インスタンス上に暗黙的な NUMA トポロジーが作成されます。NUMA 仮想マシンと非 NUMA 仮想マシン (仮想マシン) を同じホストで実行しないでください。
前提条件
-
ocコマンドラインツールがワークステーションにインストールされている。 -
cluster-admin権限を持つユーザーとして、Red Hat OpenStack Services on OpenShift (RHOSO) にログインしている。 -
インスタンスによる huge page の要求を可能にするノードを定義する
OpenStackDataPlaneNodeSetCR を選択した。OpenStackDataPlaneNodeSetCR 作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイ ガイドの 事前プロビジョニングされたノードを使用した OpenStackDataPlaneNodeSet CR の作成 を参照してください。
手順
nova-extra-config.yamlという名前のConfigMapCR を作成または更新し、[default] および [libvirt] の下にあるパラメーターの値を設定します。apiVersion: v1 kind: ConfigMap metadata: name: nova-extra-config namespace: openstack data: 28-nova-huge-pages.conf: |1 [default] reserved_huge_pages = node:0,size:2048,count:64 reserved_huge_pages = node:1,size:1GB,count:1 [libvirt] cpu_mode = custom cpu_models = Haswell-noTSX cpu_model_extra_flags = vmx, pdpe1gb, +pcid- 1
- 新しいコンピュート設定ファイルの名前。
nova-operatorは、01-nova.confという名前のデフォルト設定ファイルを生成します。デフォルト名は、transport_urlなどのインフラストラクチャー設定をオーバーライドするため、使用しないでください。nova-computeサービスは、/etc/nova/nova.conf.d/の下にあるファイルをすべて辞書順に適用します。そのため、後のファイルで定義された設定は、前のファイルで定義された同じ設定をオーバーライドします。
注記- インスタンスによる huge page の要求を 2 MB に制限するための CPU 機能フラグを設定しないでください。
- ホストが 1 GB huge page の割り当てをサポートする場合に限り、インスタンスに 1 GB の huge page を割り当てることができます。
-
cpu_modeがhost-modelまたはcustomに設定されている場合に限り、cpu_model_extra_flagsをpdpe1gbに設定する必要があります。 ホストが
pdpe1gbをサポートし、cpu_modeにhost-passthroughが使用される場合、cpu_model_extra_flagsにpdpe1gbを設定する必要はありません。注記pdpe1gbフラグは Opteron_G4 および Opteron_G5 CPU モデルにのみ含まれ、QEMU がサポートする Intel CPU モデルには含まれません。Microarchitectural Data Sampling (MDS) などの CPU ハードウェア問題を軽減するには、他の CPU フラグを設定する必要がある場合があります。詳細は、「RHOS による MDS ("Microarchitectural Data Sampling") セキュリティーの不具合の軽減」を参照してください。
ConfigMapオブジェクトの作成の詳細は、config map の作成と使用 を参照してください。新しい
OpenStackDataPlaneDeploymentCR を作成し、データプレーンノード上のサービスを設定してデータプレーンをデプロイし、ワークステーション上のcompute_huge_pages_deploy.yamlという名前のファイルに保存します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: openstack-edpm-huge-pagescompute_huge_pages_deploy.yamlで、デプロイするすべてのOpenStackDataPlaneNodeSetCR を含めるようにnodeSetsを指定します。前提条件として選択したOpenStackDataPlaneNodeSetCR が含まれていることを確認してください。このOpenStackDataPlaneNodeSetCR は、huge page に指定するノードを定義します。警告ノードセット全体のみ設定できます。ノードセット内のノードのサブセットを再設定することはサポートされていません。ノードセット内のノードのサブセットを再設定する必要がある場合は、ノードセットをスケールダウンし、以前に削除したノードから新しいノードセットを作成する必要があります。
警告デプロイメントに複数のノードセットがある場合、
nova-extra-config.yamlConfigMapへの変更は複数のノードセットに直接影響する可能性があります。ノードセットがnova-extra-config.yamlConfigMapを使用しているために再設定の影響を受けるかを確認するには、次の手順を実行します。-
ノードセットのサービスリストに移動し、nova を指す
DataPlaneService`の名前を見つけます。 DataPlaneServiceのedpmServiceTypeフィールドの値がnovaに設定されていることを確認します。DataPlaneServiceの dataSources リストにnova-extra-configという名前のconfigMapRefが含まれている場合、このノードセットはこのConfigMapを使用し、その結果このConfigMapに加えた設定変更の影響を受けます。影響を受けるノードセットの一部を再設定しない場合は、これらのノードセットの別のConfigMapを指す新しいDataPlaneServiceを作成する必要があります。
apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: openstack-edpm-huge-pages spec: nodeSets: - openstack-edpm - compute-huge-pages - ... - <nodeSet_name>-
<nodeSet_name>は、データプレーンデプロイメントに含めるOpenStackDataPlaneNodeSetCR の名前に置き換えます。
-
ノードセットのサービスリストに移動し、nova を指す
-
compute_huge_pages_deploy.yamlデプロイメントファイルを保存します。 データプレーンをデプロイします。
$ oc create -f compute_huge_pages_deploy.yamlデータプレーンがデプロイされていることを確認します。
$ oc get openstackdataplanenodeset NAME STATUS MESSAGE compute-huge-pages True Deployedopenstackclientのリモートシェルにアクセスし、デプロイされたコンピュートノードがコントロールプレーンに表示されることを確認します。$ oc rsh -n openstack openstackclient $ openstack hypervisor list
5.4.1. インスタンス用の huge page フレーバーの作成 リンクのコピーリンクがクリップボードにコピーされました!
クラウドユーザーが huge page を使用するインスタンスを作成できるようにするには、インスタンス起動用の hw:mem_page_size 追加スペックキーが設定されたフレーバーを作成します。
クラウド上で openstack クライアントコマンドを実行するには、clouds.yaml ファイルに詳細が記載されているクラウドの名前を指定する必要があります。次のいずれかの方法を使用して、クラウドの名前を指定できます。
各コマンドで
--os-cloudオプションを使用します。$ openstack flavor list --os-cloud <cloud_name>複数のクラウドにアクセスする場合は、このオプションを使用します。
bashrcファイルにクラウド名の環境変数を作成します。`export OS_CLOUD=<cloud_name>`
前提条件
- コンピュートノードが huge page に対応する設定である。詳細は、コンピュートノードで Huge Page を設定する を参照してください。
手順
huge page を要求するインスタンス用のフレーバーを作成します。
$ openstack flavor create --ram <size_mb> --disk <size_gb> \ --vcpus <num_reserved_vcpus> huge_pageshuge page を要求するには、フレーバーの
hw:mem_page_size属性を必要なサイズに設定します。$ openstack --os-compute-api=2.86 flavor set huge_pages --property hw:mem_page_size=<page_size><page_size>は、次に示す有効な値のいずれかに置き換えます。-
large: ホストでサポートされる最大のページサイズを選択します。x86_64 システムでは 2 MB または 1 GB です。 -
small: (デフォルト) ホストでサポートされる最小のページサイズを選択します。X86_64 システムでは、4 kB (通常のページ) です。 -
any: イメージに設定されたhw_mem_page_sizeを使用してページサイズを選択します。ページサイズがイメージで指定されていない場合は、libvirt ドライバーで決定される、利用可能な最大のページサイズを選択します。 -
<pagesize>: ワークロードに具体的な要件がある場合、ページサイズを明示的に設定します。ページサイズには整数値を使用し、KB またはその他の標準単位で指定します。(例: 4kB、2MB、2048、1GB)。
-
フレーバーにより huge page を使用するインスタンスが作成されることを確認するには、新しいフレーバーを使用してインスタンスを起動します。
$ openstack server create --flavor huge_pages \ --image <image> huge_pages_instanceCompute スケジューラーは、インスタンスのメモリーをサポートするのに十分なサイズの空き huge page を持つホストを特定します。スケジューラーが十分なページを持つホストおよび NUMA ノードを検出できない場合、リクエストは失敗して
NoValidHostエラーが報告されます。
5.4.2. 初回起動時に複数の Huge Page フォルダーをマウント リンクのコピーリンクがクリップボードにコピーされました!
Compute サービス (nova) を設定して、初回起動プロセスの一環として複数のページサイズを処理することができます。
手順
-
更新するノードセットの
OpenStackDataPlaneNodeSetCR 定義ファイル (例:my_data_plane_node_set.yaml) を開きます。 必要な設定を追加するか、
ansibleVarsの下にあるedpm_default_mountsテンプレートの既存設定を変更します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet metadata: name: my-data-plane-node-set spec: ... nodeTemplate: ... ansible: ansibleVars: edpm_default_mounts: - name: hugepages1G path: /dev/hugepages1G opts: pagesize=1G fstype: hugetlbfs group: hugetlbfs - name: hugepages2M path: /dev/hugepages2M opts: pagesize=2M fstype: hugetlbfs group: hugetlbfs ...-
OpenStackDataPlaneNodeSetCR 定義ファイルを保存します。 更新済みの
OpenStackDataPlaneNodeSetCR 設定を適用します。$ oc apply -f my_data_plane_node_set.yamlデータプレーンリソースが更新されたことを確認します。
$ oc get openstackdataplanenodeset出力サンプル
NAME STATUS MESSAGE my-data-plane-node-set False Deployment not startedワークステーションに
OpenStackDataPlaneDeploymentCR を定義するファイル (例:my_data_plane_deploy.yaml) を作成します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: my-data-plane-deployヒント定義ファイルと
OpenStackDataPlaneDeploymentCR に、変更されたノードセットの目的を示す一意の説明的な名前を付けます。変更した
OpenStackDataPlaneNodeSetCR を追加します。spec: nodeSets: - my-data-plane-node-set-
OpenStackDataPlaneDeploymentCR デプロイメントファイルを保存します。 変更した
OpenStackDataPlaneNodeSetCR をデプロイします。$ oc create -f my_data_plane_deploy.yaml -n openstackデプロイメントの実行中に Ansible ログを表示するには、次のコマンドを入力します。
$ oc get pod -l app=openstackansibleee -n openstack -w $ oc logs -l app=openstackansibleee -n openstack -f \ --max-log-requests 10変更された
OpenStackDataPlaneNodeSetCR がデプロイされていることを確認します。以下はその例です。$ oc get openstackdataplanedeployment -n openstack出力サンプル
NAME STATUS MESSAGE my-data-plane-node-set True Setup CompleteNodeSet Readyメッセージが表示されるまで、oc getコマンドを繰り返します。以下に例を示します。
$ oc get openstackdataplanenodeset -n openstack出力サンプル
NAME STATUS MESSAGE my-data-plane-node-set True NodeSet Ready返されるステータスの意味については、Red Hat OpenStack Services on OpenShift のデプロイ の データプレーンの状態 を参照してください。
5.5. インスタンスにファイルベースのメモリーを使用するコンピュートノードの設定 リンクのコピーリンクがクリップボードにコピーされました!
ファイルバックアップメモリーを使用して、コンピュートノードのメモリー容量を拡張できます。そこの場合、libvirt メモリーバッキングディレクトリー内のファイルをインスタンスメモリーとして割り当てます。インスタンスのメモリーとして使用できるホストディスクの容量、およびインスタンスメモリーファイルのディスク上の場所を設定できます。
Compute サービス (nova) は、ファイルベースのメモリーに設定された容量をシステムメモリーの合計容量として Placement サービスに報告します。これにより、コンピュートノードは通常システムメモリー内で対応できるよりも多くのインスタンスをホストすることができます。
インスタンスにファイルベースのメモリーを使用するには、コンピュートノードでファイルベースのメモリーを有効にする必要があります。
インスタンスにファイルバックアップメモリーを使用する場合、以下のような制限があります。
- ファイルベースのメモリーが有効なコンピュートノードとファイルベースのメモリーが有効ではないコンピュートノード間で、インスタンスのライブマイグレーションを行うことはできません。
- ファイルベースのメモリーと huge page との間に互換性はありません。ファイルベースのメモリーが有効なコンピュートノード上で、huge page を使用するインスタンスを起動することはできません。ホストアグリゲートを使用して、huge page を使用するインスタンスがファイルベースのメモリーが有効なコンピュートノードに配置されないようにします。
- ファイルベースのメモリーとメモリーのオーバーコミットとの間に互換性はありません。
-
reserved_host_memory_mbを使用してホストプロセス用のメモリーを予約することはできません。ファイルベースのメモリーが使用されている場合、確保されるメモリーはファイルベースのメモリー用に用意されないディスク領域を表します。ファイルベースのメモリーは、キャッシュメモリーとして使用される RAM と共に、システムメモリーの合計として Placement サービスに報告されます。
前提条件
-
ノードおよびノードが追加されるすべてのホストアグリゲートで、
ram_allocation_ratioを "1.0" に設定した。 -
reserved_host_memory_mbを "0" に設定済みである。 -
ocコマンドラインツールがワークステーションにインストールされている。 -
cluster-admin権限を持つユーザーとして、Red Hat OpenStack Services on OpenShift (RHOSO) にログインしている。 -
インスタンスにファイルバックアップメモリーを使用するノードを定義する
OpenStackDataPlaneNodeSetCR を選択済みである。OpenStackDataPlaneNodeSetCR 作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイ ガイドの 事前プロビジョニングされたノードを使用した OpenStackDataPlaneNodeSet CR の作成 を参照してください。
手順
nova-extra-config.yamlという名前のConfigMapCR を作成または更新し、[libvirt] の下にあるパラメーターの値を設定します。apiVersion: v1 kind: ConfigMap metadata: name: nova-extra-config namespace: openstack data: 30-nova-file-backed-memory.conf: | [libvirt] file_backed_memory = 1048576ConfigMapオブジェクトの作成の詳細は、config map の作成と使用 を参照してください。オプション: メモリーバッキングファイルを保存するディレクトリーを設定するには、
memory_backing_dirパラメーターを設定します。デフォルトのメモリーバックアップディレクトリーは/var/lib/libvirt/qemu/ram/です。[libvirt] file_backed_memory = 1048576 memory_backing_dir = <new_directory_location><new_directory_location>を、メモリーバッキングディレクトリーの場所に置き換えます。注記デフォルトのディレクトリー (
/var/lib/libvirt/qemu/ram/) またはそれより上の階層のディレクトリーに、バッキングストアを配置する必要があります。バッキングストアのホストディスクを変更することもできます。詳細は、メモリーバッキングディレクトリーのホストディスクの変更 を参照してください。
新しい
OpenStackDataPlaneDeploymentCR を作成し、データプレーンノード上のサービスを設定してデータプレーンをデプロイし、ワークステーション上のcompute_file_backed_memory_deploy.yamlという名前のファイルに保存します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: compute-file-backed-memorycompute_file_backed_memory_deploy.yamlで、デプロイするすべてのOpenStackDataPlaneNodeSetCR を含めるようにnodeSetsを指定します。前提条件として選択したOpenStackDataPlaneNodeSetCR が含まれていることを確認してください。このOpenStackDataPlaneNodeSetCR は、ファイルバックアップメモリーに指定するノードを定義します。警告ノードセット全体のみ設定できます。ノードセット内のノードのサブセットを再設定することはサポートされていません。ノードセット内のノードのサブセットを再設定する必要がある場合は、ノードセットをスケールダウンし、以前に削除したノードから新しいノードセットを作成する必要があります。
警告デプロイメントに複数のノードセットがある場合、ノードセットと
DataPlaneServicesがどのように設定されているかにより、nova-extra-config.yamlConfigMapへの変更が複数のノードセットに直接影響する可能性があります。ノードセットがnova-extra-configConfigMapを使用しているために再設定の影響を受けるかを確認するには、次の手順を実行します。-
ノードセットのサービスリストを確認し、nova を指す
DataPlaneServiceの名前を見つけます。 DataPlaneServiceのedpmServiceTypeフィールドの値がnovaに設定されていることを確認します。DataPlaneServiceのdataSourcesリストにnova-extra-configという名前のconfigMapRefが含まれている場合、このノードセットはこのConfigMapを使用し、その結果このConfigMapに加えた設定変更の影響を受けます。影響を受けるノードセットの一部を再設定しない場合は、これらのノードセットの別のConfigMapを指す新しいDataPlaneServiceを作成する必要があります。
apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: compute-file-backed-memory spec: nodeSets: - openstack-edpm - compute-file-backed-memory - ... - <nodeSet_name>-
<nodeSet_name>を、データプレーンデプロイメントに含める OpenStackDataPlaneNodeSet CR の名前に置き換えます。
-
ノードセットのサービスリストを確認し、nova を指す
-
compute_file_backed_memory_deploy.yamlデプロイメントファイルを保存します。 データプレーンをデプロイします。
$ oc create -f compute_file_backed_memory_deploy.yamlデータプレーンがデプロイされていることを確認します。
$ oc get openstackdataplanenodeset NAME STATUS MESSAGE compute-file-backed-memory True Deployedopenstackclientのリモートシェルにアクセスし、デプロイされたコンピュートノードがコントロールプレーンに表示されることを確認します。$ oc rsh -n openstack openstackclient $ openstack hypervisor list
5.5.1. メモリーバッキングディレクトリーのホストディスクの変更 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトのプライマリーディスクから別のディスクに、メモリーバッキングディレクトリーを変更することができます。
手順
代替のバッキングデバイスにファイルシステムを作成します。たとえば、
/dev/sdbにext4ファイルシステムを作成するには、以下のコマンドを入力します。# mkfs.ext4 /dev/sdbバッキングデバイスをマウントします。たとえば、
/dev/sdbをデフォルトの libvirt メモリーバッキングディレクトリーにマウントするには、以下のコマンドを入力します。# mount /dev/sdb /var/lib/libvirt/qemu/ram注記マウントポイントは、
memory_backing_dirパラメーターの値と一致する必要があります。
5.6. インスタンスのメモリーを暗号化するための AMD SEV コンピュートノードの設定 リンクのコピーリンクがクリップボードにコピーされました!
この機能は、このリリースでは テクノロジープレビュー として提供しているため、Red Hat では全面的にはサポートしていません。これは、テスト用途にのみご利用いただく機能です。実稼働環境にはデプロイしないでください。テクノロジープレビュー機能の詳細は、対象範囲の詳細 を参照してください。
AMD が提供する Secure Encrypted Virtualization (SEV) は、実行中の仮想マシンインスタンスが使用している DRAM のデータを保護します。SEV は、各インスタンスのメモリーを一意の鍵で暗号化します。
クラウドユーザーは、メモリーの暗号化が有効な SEV 対応コンピュートノード上で動作するインスタンスを作成することができます。
この機能は、2nd Gen AMD EPYC™ 7002 Series ("Rome") から利用できます。
クラウドユーザーがメモリーの暗号化を使用するインスタンスを作成できるようにするには、以下のタスクを実施する必要があります。
- メモリーの暗号化用に AMD SEV コンピュートノードを指定する。
- メモリーの暗号化用にコンピュートノードを設定する。
- データプレーンをデプロイします。
- メモリーを暗号化してインスタンスを起動するためのフレーバーまたはイメージを作成する。
AMD SEV ハードウェアが制限されている場合は、ホストアグリゲートを設定して AMD SEV コンピュートノードでのスケジューリングを最適化することもできます。メモリーの暗号化を要求するインスタンスのみを AMD SEV コンピュートノードにスケジュールするには、AMD SEV ハードウェアを持つコンピュートノードのホストアグリゲートを作成し、Compute スケジューラーがメモリーの暗号化を要求するインスタンスのみをホストアグリゲートに配置するように設定します。
詳細は、Creating and managing host aggregates および Filtering by isolating host aggregates を参照してください。
5.6.1. Secure Encrypted Virtualization (SEV) リンクのコピーリンクがクリップボードにコピーされました!
AMD が提供する Secure Encrypted Virtualization (SEV) は、動作中の仮想マシンインスタンスが使用している DRAM のデータを保護します。SEV は、各インスタンスのメモリーを一意の鍵で暗号化します。
SEV は、不揮発性メモリーテクノロジー (NVDIMM) を使用する際にセキュリティーを強化します。ハードドライブと同様に、NVDIMM チップはデータが保存されたままシステムから物理的に取り外すことができるためです。暗号化しないと、機密データ、パスワード、またはシークレットキー等の保存された情報が危険にさらされる可能性があります。
詳細は、AMD Secure Encrypted Virtualization (SEV) のドキュメントを参照してください。
メモリー暗号化を使用したインスタンスには、以下のような制限があります。
- メモリー暗号化を使用するインスタンスのライブマイグレーションや、インスタンスを一時停止および再開することはできません。
- PCI パススルーを使用して、メモリーの暗号化を使用するインスタンス上のデバイスに直接アクセスすることはできません。
kernel-4.18.0-115.el8 (RHEL-8.1.0) 以前の Red Hat Enterprise Linux (RHEL) カーネルでメモリー暗号化を使用するインスタンスのブートディスクとして
virtio-blkを使用することはできません。注記virtio-scsiまたはSATAをブートディスクとして使用することができます。また、ブートディスク以外の用途にvirtio-blkを使用することができます。- 暗号化されたインスタンスで実行されているオペレーティングシステムは、SEV をサポートしている必要があります。詳細は、Red Hat ナレッジベースのソリューション Enabling AMD Secure Encrypted Virtualization in RHEL 8 を参照してください。
- SEV をサポートするマシンでは、暗号鍵を格納するためのメモリーコントローラーのスロット数に制限があります。動作中のメモリーが暗号化された各インスタンスは、これらのスロットの 1 つを使用します。したがって、同時に実行できるメモリー暗号化インスタンスの数は、メモリーコントローラーのスロット数に制限されます。たとえば、1st Gen AMD EPYC™ 7001 Series ("Naples") の場合、制限は 16 で、2nd Gen AMD EPYC™ 7002 Series ("Rome") では上限は 255 です。
- メモリー暗号化を使用するインスタンスの RAM ページの固定Compute サービスはこれらのページをスワップすることができないため、メモリーが暗号化されたインスタンスをホストするコンピュートノードでメモリーをオーバーコミットすることはできません。
- NUMA ノードが複数あるインスタンスでは、メモリーの暗号化を使用することはできません。
5.6.2. メモリー暗号化用 AMD SEV コンピュートノードの指定 リンクのコピーリンクがクリップボードにコピーされました!
メモリーの暗号化を使用するインスタンス用に AMD SEV コンピュートノードを指定するには、AMD SEV ロールを設定するための新規ノードセットを作成し、メモリーの暗号化のためにコンピュートノードをタグ付けするための AMD SEV リソースクラスを持つベアメタルノードを設定する必要があります。
次の手順は、まだプロビジョニングされていない新しいデータプレーンノードに適用されます。すでにプロビジョニングされている既存のノードにリソースクラスを割り当てるには、スケールダウン手順を使用してノードをプロビジョニング解除してから、スケールアップ手順を使用して新しいリソースクラスの割り当てでノードを再プロビジョニングする必要があります。
詳細は、Red Hat OpenStack Services on OpenShift デプロイメントのカスタマイズ の 機能またはワークロード用のノードセットの設定 を参照してください。
5.6.3. メモリー暗号化用 AMD SEV コンピュートノードの設定 リンクのコピーリンクがクリップボードにコピーされました!
クラウドユーザーがメモリーの暗号化を使用するインスタンスを作成できるようにするには、AMD SEV ハードウェアを持つコンピュートノードを設定する必要があります。
ノードセット全体のみ設定できます。ノードセット内のノードのサブセットを再設定することはサポートされていません。ノードセット内のノードのサブセットを再設定する必要がある場合は、ノードセットをスケールダウンし、以前に削除したノードから新しいノードセットを作成する必要があります。
前提条件
-
ocコマンドラインツールがワークステーションにインストールされている。 -
cluster-admin権限を持つユーザーとして、Red Hat OpenStack Services on OpenShift (RHOSO) にログインしている。 -
CPU ピニングを設定するノードを定義する
OpenStackDataPlaneNodeSetCR を選択した。OpenStackDataPlaneNodeSetCR 作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイ ガイドの 事前プロビジョニングされたノードを使用した OpenStackDataPlaneNodeSet CR の作成 を参照してください。 デプロイメントには、SEV に対応する AMD ハードウェア (AMD EPYC CPU 等) 上で実行されるコンピュートノードが含まれている必要があります。以下のコマンドを使用して、デプロイメントが SEV に対応しているかどうか判断することができます。
$ lscpu | grep sev
手順
nova-extra-config.yamlという名前の ConfigMap CR を作成または更新し、[libvirt]の下にあるパラメーターの値を設定します。apiVersion: v1 kind: ConfigMap metadata: name: nova-extra-config namespace: openstack data: 30-nova-amd-sev.conf: | [libvirt] num_memory_encrypted_guests = 15注記libvirt/num_memory_encrypted_guestsパラメーターのデフォルト値は none です。カスタム値を設定しない場合、AMD SEV コンピュートノードは、ノードが同時にホストできるメモリーが暗号化されたインスタンスの数に制限を設けません。代わりに、ハードウェアが、AMD SEV コンピュートノードが同時にホストできるメモリーが暗号化されたインスタンス数の最大値を決定します。この場合、メモリーが暗号化されたインスタンスの一部が起動に失敗する可能性があります。注記Q35 マシンタイプはデフォルトのマシンタイプであり、SEV に必要です。
-
AMD SEV コンピュートノードのカーネルパラメーターを設定するには、更新するノードセットの
OpenStackDataPlaneNodeSetCR 定義ファイル (例:my_data_plane_node_set.yaml) を開きます。 必要なネットワーク設定を追加するか、
ansibleVarsの下のedpm_kernel_argsで既存の設定を変更します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet metadata: name: my-data-plane-node-set spec: ... nodeTemplate: ... ansible: ansibleVars: edpm_kernel_args: "kvm_amd.sev=1"オプション: ホストメモリーを暗号化するには、
edpm_kernel_argsにmem_encrypt=onを追加します。警告デバイスドライバーがメモリー暗号化をサポートしていることを確認してください。
edpm_kernel_args: "kvm_amd.sev=1 mem_encrypt=on"新しい
OpenStackDataPlaneDeploymentCR を作成し、データプレーンノード上のサービスを設定してデータプレーンをデプロイし、ワークステーション上のcompute_amd_sev_deploy.yamlという名前のファイルに保存します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: openstack-edpm-amd-sevcompute_amd_sev_deploy.yamlで、デプロイするすべてのOpenStackDataPlaneNodeSetCR を含めるようにnodeSetsを指定します。前提条件として選択したOpenStackDataPlaneNodeSetCR が含まれていることを確認してください。このOpenStackDataPlaneNodeSetCR は、メモリー暗号化に指定するノードを定義します。警告デプロイメントに複数のノードセットがある場合、NodeSet と DataPlaneServices がどのように設定されているかにより、
nova-extra-config.yamlConfigMap への変更が複数のノードセットに直接影響する可能性があります。ノードセットがnova-extra-config.yamlConfigMap を使用しているために再設定の影響を受けるかを確認するには、次の手順を実行します。- ノードセットのサービスリストを確認し、nova を指す DataPlaneService の名前を見つけます。
DataPlaneService の
edpmServiceTypeフィールドの値がnovaに設定されていることを確認します。DataPlaneService の dataSources リストに
nova-extra-configという名前の configMapRef が含まれている場合、このノードセットはその ConfigMap を使用するため、ConfigMap に加えた設定変更の影響を受けます。影響を受けるノードセットの一部を再設定しない場合は、これらのノードセットの別の ConfigMap を指す新しい DataPlaneService を作成する必要があります。
apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: openstack-edpm-amd-sev spec: nodeSets: - openstack-edpm - compute-amd-sev - my-data-plane-node-set - ... - <nodeSet_name>-
<nodeSet_name>を、データプレーンデプロイメントに含める OpenStackDataPlaneNodeSet CR の名前に置き換えます。
-
compute_amd_sev_deploy.yamlデプロイメントファイルを保存します。 データプレーンをデプロイします。
$ oc create -f compute_amd_sev_deploy.yamlデータプレーンがデプロイされていることを確認します。
$ oc get openstackdataplanenodeset NAME STATUS MESSAGE openstack-edpm True Deployedopenstackclientのリモートシェルにアクセスし、デプロイされたコンピュートノードがコントロールプレーンに表示されることを確認します。$ oc rsh -n openstack openstackclient $ openstack hypervisor list
5.6.4. メモリー暗号化用のイメージの作成 リンクのコピーリンクがクリップボードにコピーされました!
データプレーンに AMD SEV コンピュートノードが含まれる場合、AMD SEV インスタンスイメージを作成することができます。クラウドユーザーはこのイメージを使用して、メモリーが暗号化されたインスタンスを起動することができます。
クラウド上で openstack クライアントコマンドを実行するには、clouds.yaml ファイルに詳細が記載されているクラウドの名前を指定する必要があります。次のいずれかの方法を使用して、クラウドの名前を指定できます。
各コマンドで
--os-cloudオプションを使用します。$ openstack flavor list --os-cloud <cloud_name>複数のクラウドにアクセスする場合は、このオプションを使用します。
bashrcファイルにクラウド名の環境変数を作成します。`export OS_CLOUD=<cloud_name>`
前提条件
-
管理者がプロジェクトを作成し、管理者からクラウドにアクセスするための
clouds.yamlファイルが提供されている。 -
python-openstackclientパッケージがインストールされている。
手順
メモリー暗号化用の新規イメージの作成
$ openstack image create ... \ --property hw_firmware_type=uefi amd-sev-image注記既存のイメージを使用する場合、イメージの
hw_firmware_type属性がuefiに設定されている必要があります。イメージに属性
hw_mem_encryption=Trueを追加して、イメージで AMD SEV のメモリー暗号化を有効にします。$ openstack image set \ --property hw_mem_encryption=True amd-sev-imageヒントフレーバーでメモリー暗号化を有効にすることができます。詳細は、Creating a flavor for memory encryption を参照してください。
5.6.5. メモリー暗号化用のフレーバーの作成 リンクのコピーリンクがクリップボードにコピーされました!
データプレーンに AMD SEV コンピュートノードが含まれる場合、1 つまたは複数の AMD SEV フレーバーを作成することができます。クラウドユーザーはこのイメージを使用して、メモリーが暗号化されたインスタンスを起動することができます。
前提条件
-
ワークステーションに
ocコマンドラインツールがインストール済みである。 -
cluster-admin権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。
AMD SEV フレーバーは、hw_mem_encryption 属性がイメージで設定されていない場合にのみ必要です。
手順
ワークステーションから OpenStackClient Pod のリモートシェルにアクセスします。
$ oc rsh -n openstack openstackclientメモリー暗号化用のフレーバーを作成します。
$ openstack flavor create --vcpus 1 --ram 512 --disk 2 \ --property hw:mem_encryption=True m1.small-amd-sevopenstackclient Pod を終了します。
$ exit
5.6.6. メモリーが暗号化されたインスタンスの起動 リンクのコピーリンクがクリップボードにコピーされました!
メモリーの暗号化を有効にして AMD SEV コンピュートノードでインスタンスを起動できることを確認するには、メモリー暗号化フレーバーまたはイメージを使用してインスタンスを作成します。
クラウド上で openstack クライアントコマンドを実行するには、clouds.yaml ファイルに詳細が記載されているクラウドの名前を指定する必要があります。次のいずれかの方法を使用して、クラウドの名前を指定できます。
各コマンドで
--os-cloudオプションを使用します。$ openstack flavor list --os-cloud <cloud_name>複数のクラウドにアクセスする場合は、このオプションを使用します。
bashrcファイルにクラウド名の環境変数を作成します。`export OS_CLOUD=<cloud_name>`
前提条件
-
管理者がプロジェクトを作成し、管理者からクラウドにアクセスするための
clouds.yamlファイルが提供されている。 -
python-openstackclientパッケージがインストールされている。
手順
AMD SEV フレーバーまたはイメージを使用してインスタンスを作成します。以下の例では、メモリー暗号化用のフレーバーの作成 で作成したフレーバーおよび メモリー暗号化用のイメージの作成 で作成したイメージを使用してインスタンスを作成します。
$ openstack server create --flavor m1.small-amd-sev \ --image amd-sev-image amd-sev-instance- クラウドユーザーとしてインスタンスにログインします。
インスタンスがメモリーの暗号化を使用していることを確認するには、インスタンスから以下のコマンドを入力します。
$ dmesg | grep -i sev AMD Secure Encrypted Virtualization (SEV) active
第6章 Compute サービスのストレージの設定 リンクのコピーリンクがクリップボードにコピーされました!
Compute (nova) サービスが Image (glance) サービスからコピーしてコンピュートノード上でローカルにキャッシュしたベースイメージから、インスタンスを作成します。このベースイメージには、インスタンスのバックエンドとなるインスタンスディスクが含まれています。
Compute サービスを設定して、一時インスタンスのディスクデータをホストのコンピュートノード上にローカルに保存するか、NFS 共有または Ceph クラスターでリモートで保存することができます。または、Block Storage (cinder) サービスが提供するボリューム内の永続ストレージにインスタンスディスクデータを保存するように Compute サービスを設定することもできます。
環境のイメージキャッシュを設定し、インスタンスディスクのパフォーマンスおよびセキュリティーを設定することができます。Image サービスがバックエンドとして Red Hat Ceph RADOS Block Device (RBD) を使用し、Compute サービスがローカルのファイルベースの一時ストレージを使用する場合、Compute サービスは Image サービス API を使用せずに RBD イメージリポジトリーから直接イメージをダウンロードできます。
関連情報
- 永続ストレージの設定
- 永続ストレージの設定 の Ceph Storage の統合
6.1. 1 つのインスタンスにアタッチすることのできる最大ストレージデバイス数の設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、1 つのインスタンスにアタッチすることのできるストレージデバイスの数に制限はありません。多数のディスクデバイスをインスタンスにアタッチすると、インスタンスのパフォーマンスが低下する可能性があります。お使いの環境がサポートすることのできる限度に基づいて、インスタンスにアタッチできるデバイスの最大数を調整できます。インスタンスがサポートするストレージディスクの数は、ディスクが使用するバスにより異なります。たとえば、IDE ディスクバスでは、アタッチされるデバイスは 4 つに制限されます。マシン種別が Q35 のインスタンスには、最大 500 のディスクデバイスをアタッチできます。
Q35 は、PCIe ポートを使用するデフォルトのマシンタイプです。nova-extra-config ConfigMap CR に [libvirt] パラメーター num_pcie_ports を追加することで、PCIe ポートデバイスの数を管理できます。PCIe ポートに接続できるデバイスの数は、以前のバージョンで実行いているインスタンスよりも少なくなります。より多くのデバイスを使用する場合は、イメージ属性 hw_disk_bus=scsi または hw_scsi_model=virtio-scsi を使用する必要があります。詳細は、ストレージ操作の実行 の 仮想ハードウェアのメタデータプロパティー を参照してください。
-
アクティブなインスタンスがあるコンピュートノード上の
nova-extra-configConfigMapCR で[compute]パラメーターmax_disk_devices_to_attachの値を変更すると、最大数がインスタンスにすでに接続されているデバイスの数よりも少ない場合にリビルドが失敗する可能性があります。たとえば、インスタンス A に 26 個のデバイスがアタッチされていて、max_disk_devices_to_attachを 20 に変更すると、インスタンス A のリビルド要求は失敗します。 - コールドマイグレーション時には、設定されたストレージデバイスの最大数は、移行する元のインスタンスにのみ適用されます。移動前に移行先が確認されることはありません。つまり、コンピュートノード A に 26 のディスクデバイスがアタッチされていて、コンピュートノード B の最大ディスクデバイスアタッチ数が 20 に設定されている場合に、26 のデバイスがアタッチされたインスタンスをコンピュートノード A からコンピュートノード B に移行するコールドマイグレーションの操作は成功します。ただし、これ以降、コンピュートノード B でインスタンスを再ビルドする要求は失敗します。すでにアタッチされているデバイスの数 26 が、設定された最大値の 20 を超えているためです。
設定されたストレージデバイスの最大数は、退避オフロード中のインスタンスには適用されません。これらのインスタンスはコンピュートノードを持たないためです。
前提条件
-
ocコマンドラインツールがワークステーションにインストールされている。 -
cluster-admin権限を持つユーザーとして、Red Hat OpenStack Services on OpenShift (RHOSO) にログインしている。 -
1 つのインスタンスにっちするストレージデバイスの最大数を設定できるノードを定義する
OpenStackDataPlaneNodeSetCR を選択した。OpenStackDataPlaneNodeSetCR の作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイ ガイドの データプレーンの作成 を参照してください。
手順
nova-extra-configという名前のConfigMapCR を作成または更新し、[compute]の下にあるパラメーターの値を設定します。apiVersion: v1 kind: ConfigMap metadata: name: nova-extra-config namespace: openstack data: 31-nova-max-storage-devices.conf: | [compute] max_disk_devices_to_attach = <max_device_limit>ConfigMapオブジェクトの作成の詳細は、ノード の config map の作成と使用 を参照してください。新しい
OpenStackDataPlaneDeploymentCR を作成して、データプレーンノード上のサービスを設定し、データプレーンをデプロイします。CR を、ワークステーション上のcompute_storage_devices_deploy.yamlという名前のファイルに保存します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: compute-storage-devicesOpenStackDataPlaneDeploymentCR の作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイ ガイドの データプレーンのデプロイ を参照してください。compute_storage_devices_deploy.yamlで、デプロイするすべてのOpenStackDataPlaneNodeSetCR を含めるようにnodeSetsを指定します。前提条件として選択したOpenStackDataPlaneNodeSetCR が含まれていることを確認してください。このOpenStackDataPlaneNodeSetCR は、1 つのインスタンスにアタッチするストレージデバイスの最大数を設定するノードを定義します。警告ノードセット内のノードのサブセットは再設定できません。そうする必要がある場合は、ノードセットをスケールダウンし、以前に削除したノードから新しいノードセットを作成する必要があります。
警告デプロイメントに複数のノードセットがある場合、ノードセットと
DataPlaneServicesがどのように設定されているかにより、nova-extra-config.yamlConfigMapへの変更が複数のノードセットに直接影響する可能性があります。ノードセットがnova-extra-configConfigMapを使用しているために再設定の影響を受けるかを確認するには、次の手順を実行します。-
ノードセットのサービスリストを確認し、nova を指す
DataPlaneServiceの名前を見つけます。 DataPlaneServiceのedpmServiceTypeフィールドの値がnovaに設定されていることを確認します。DataPlaneServiceのdataSourcesリストにnova-extra-configという名前のconfigMapRefが含まれている場合、このノードセットはこのConfigMapを使用し、その結果このConfigMapに加えた設定変更の影響を受けます。影響を受けるノードセットの一部を再設定しない場合は、これらのノードセットの別のConfigMapを指す新しいDataPlaneServiceを作成し、必要なノードセットでそのカスタムサービスを使用する必要があります。
apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: compute-storage-devices spec: nodeSets: - openstack-edpm - compute-storage-devices - ... - <nodeSet_name>-
<nodeSet_name>を、データプレーンデプロイメントに含める OpenStackDataPlaneNodeSet CR の名前に置き換えます。
-
ノードセットのサービスリストを確認し、nova を指す
-
compute_storage_devices_deploy.yamlデプロイメントファイルを保存します。 データプレーンをデプロイします。
$ oc create -f compute_storage_devices_deploy.yamlデータプレーンがデプロイされていることを確認します。
$ oc get openstackdataplanenodeset NAME STATUS MESSAGE compute-storage-devices True Deployedopenstackclientのリモートシェルにアクセスし、デプロイされたコンピュートノードがコントロールプレーンに表示されることを確認します。$ oc rsh -n openstack openstackclient $ openstack hypervisor list
6.3. Red Hat Ceph RADOS Block Device (RBD) からの直接イメージダウンロードの設定 リンクのコピーリンクがクリップボードにコピーされました!
Image サービス (glance) がバックエンドとして Red Hat Ceph RADOS Block Device (RBD) を使用し、Compute サービス (nova) がローカルのファイルベースの一時ストレージを使用する場合、Image サービス API を使用せずに RBD イメージリポジトリーから直接イメージをダウンロードするように Compute サービスを設定することができます。これにより、インスタンスのブート時に Compute ノードイメージキャッシュにイメージをダウンロードする時間が短縮されます。これにより、インスタンスの起動時間が短縮されます。
前提条件
- Image サービスのバックエンドが、Red Hat Ceph RADOS Block Device (RBD) である。
- Compute サービスが、イメージキャッシュおよびインスタンスのディスクにローカルのファイルベースの一時ストアを使用している。
-
ocコマンドラインツールがワークステーションにインストールされている。 -
cluster-admin権限を持つユーザーとして、Red Hat OpenStack Services on OpenShift (RHOSO) にログインしている。 -
RBD から直接イメージのダウンロードを設定するノードを定義する
OpenStackDataPlaneNodeSetCR を選択した。OpenStackDataPlaneNodeSetCR 作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイ ガイドの 事前プロビジョニングされたノードを使用した OpenStackDataPlaneNodeSet CR の作成 を参照してください。
手順
nova-extra-configという名前のConfigMapCR を作成または更新し、[glance] の下のパラメーターの値を設定して、Image サービス RBD バックエンドと、Compute サービスが Image サービス RBD バックエンドへの接続を待機する最大時間 (秒単位) を指定します。apiVersion: v1 kind: ConfigMap metadata: name: nova-extra-config namespace: openstack data: 33-nova-image-rbd.conf: | [glance] enable_rbd_download=True rbd_user=openstack rbd_pool=images rbd_ceph_conf=/etc/ceph/ceph.conf rbd_connect_timeout=5ConfigMapオブジェクトの作成の詳細は、ノード の config map の作成と使用 を参照してください。新しい
OpenStackDataPlaneDeploymentCR を作成し、データプレーンノード上のサービスを設定してデータプレーンをデプロイし、ワークステーション上のcompute_image_rbd_deploy.yamlという名前のファイルに保存します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: compute-image-rbdcompute_image_rbd_deploy.yamlCR で、デプロイするすべてのOpenStackDataPlaneNodeSetCR を含めるようにnodeSetsを指定します。前提条件として選択した OpenStackDataPlaneNodeSet CR を含めるようにしてください。これは、RBD から直接イメージのダウンロードを設定するノードを定義します。警告ノードセット内のノードのサブセットは再設定できません。そうする必要がある場合は、ノードセットをスケールダウンし、以前に削除したノードから新しいノードセットを作成する必要があります。
警告デプロイメントに複数のノードセットがある場合、ノードセットと
DataPlaneServicesがどのように設定されているかにより、nova-extra-config.yamlConfigMapへの変更が複数のノードセットに直接影響する可能性があります。ノードセットがnova-extra-configConfigMapを使用しているために再設定の影響を受けるかを確認するには、次の手順を実行します。-
ノードセットのサービスリストを確認し、nova を指す
DataPlaneServiceの名前を見つけます。 DataPlaneServiceのedpmServiceTypeフィールドの値がnovaに設定されていることを確認します。DataPlaneServiceのdataSourcesリストにnova-extra-configという名前のconfigMapRefが含まれている場合、このノードセットはこのConfigMapを使用し、その結果このConfigMapに加えた設定変更の影響を受けます。影響を受けるノードセットの一部を再設定しない場合は、これらのノードセットの別のConfigMapを指す新しいDataPlaneServiceを作成し、必要なノードセットでそのカスタムサービスを使用する必要があります。
apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: compute-image-rbd spec: nodeSets: - openstack-edpm - compute-image-rbd - ... - <nodeSet_name>-
<nodeSet_name>を、データプレーンデプロイメントに含める OpenStackDataPlaneNodeSet CR の名前に置き換えます。
-
ノードセットのサービスリストを確認し、nova を指す
-
compute_image_rbd_deploy.yamlデプロイメントファイルを保存します。 データプレーンをデプロイします。
$ oc create -f compute_image_rbd_deploy.yamlデータプレーンがデプロイされていることを確認します。
$ oc get openstackdataplanenodeset NAME STATUS MESSAGE compute-image-rbd True Deployedopenstackclientのリモートシェルにアクセスし、デプロイされたコンピュートノードがコントロールプレーンに表示されることを確認します。$ oc rsh -n openstack openstackclient $ openstack hypervisor list
第7章 インスタンスのスケジューリングと配置の設定 リンクのコピーリンクがクリップボードにコピーされました!
Compute スケジューラーサービスは、インスタンスの配置先となるコンピュートノードまたはホストアグリゲートを決定します。Compute (nova) サービスがインスタンスの起動または移動に関するリクエストを受け取ると、リクエスト、フレーバー、およびイメージで提供される仕様を使用して適切なホストを決定します。たとえば、フレーバーでは、ストレージディスクの種別や Intel CPU 拡張命令セットなど、インスタンスがホストに要求する特性を指定することができます。
Compute スケジューラーサービスは、以下の順序で以下のコンポーネントの設定を使用して、インスタンスを起動または移動するコンピュートノードを決定します。
- Placement サービスのプレフィルター: Compute スケジューラーサービスは Placement サービスを使用して、特定の属性に基づいて候補のコンピュートノードのセットを絞り込みます。たとえば、Placement サービスは無効な状態のコンピュートノードを自動的に除外します。
- フィルター: Compute スケジューラーサービスは、これを使用してインスタンスを起動するコンピュートノードの初期セットを決定します。
- 重み: Compute スケジューラーサービスは、重み付けシステムを使用して絞り込まれたコンピュートノードの優先順位付けを行います。最も高い重みが最も優先されます。
フィルタリング後に Host 1 および 3 が条件を満たしています。Host 1 の重みが最も高いため、スケジューリングで最も優先されます。
7.1. Placement サービスを使用した事前絞り込み リンクのコピーリンクがクリップボードにコピーされました!
Compute サービス (nova) は、Placement サービスと協調してインスタンスを作成および管理します。Placement サービスは、コンピュートノード、共有ストレージプール、または IP 割り当てプールなど、リソースプロバイダーのインベントリーおよび使用状況、ならびに利用可能な仮想 CPU 数などのリソースの量的情報を追跡します。リソースの選択および消費を管理する必要があるサービスは、すべて Placement サービスを使用することができます。
Placement サービスは、リソースプロバイダーのストレージディスク特性の種別など、リソースの機能的情報とリソースプロバイダー間のマッピングも追跡します。
Placement サービスは、Placement サービスリソースプロバイダーインベントリーおよび特性に基づいて、候補のコンピュートノードセットにプレフィルターを適用します。以下の尺度に基づいてプレフィルターを作成することができます。
- サポートされるイメージ種別
- 特性
- プロジェクトまたはテナント
- アベイラビリティーゾーン
7.1.1. 要求されたイメージ種別のサポートによる絞り込み リンクのコピーリンクがクリップボードにコピーされました!
インスタンスの起動に使用するイメージのディスク形式をサポートしないコンピュートノードを除外することができます。これは、環境の一時バックエンドに QCOW2 イメージをサポートしない Red Hat Ceph Storage が使用される場合に有用です。この機能を有効にすると、スケジューラーは QCOW2 イメージを使用するインスタンスの起動要求を Red Hat Ceph Storage ベースのコンピュートノードに送信しないようになります。
手順
-
ワークステーションで
OpenStackControlPlaneカスタムリソース (CR) ファイルopenstack_control_plane.yamlを開きます。 コンピュートスケジューラー (
nova-scheduler) テンプレートであるschedulerServiceTemplateにcustomServiceConfigパラメーターを追加して、要求されたイメージタイプのサポートでフィルタリングするようにコンピュートスケジューラーサービスを設定します。apiVersion: core.openstack.org/v1beta1 kind: OpenStackControlPlane spec: extraMounts: ... nova: template: schedulerServiceTemplate: customServiceConfig: | [scheduler] query_placement_for_image_type_support = trueコントロールプレーンを更新します。
$ oc apply -f openstack_control_plane.yaml -n openstackRHOCP が
OpenStackControlPlaneCR に関連するリソースを作成するまで待機します。次のコマンドを実行して、ステータスを確認します。$ oc get openstackcontrolplane -n openstackステータスが "Setup complete" であれば、
OpenStackControlPlaneリソースが作成されています。ヒントデプロイの進行状況を追跡するには、
getコマンドの末尾に -w オプションを追加します。-
オプション: 作成した各セルの
openstacknamespace 内の Pod を確認して、コントロールプレーンがデプロイされていることを確認します。すべての Pod が完了または実行中の状態であれば、コントロールプレーンがデプロイされています。
7.1.2. リソースプロバイダー特性による絞り込み リンクのコピーリンクがクリップボードにコピーされました!
各リソースプロバイダーには特性のセットがあります。特性は、ストレージディスクの種別や Intel CPU 拡張命令セットなど、リソースプロバイダーの機能的な要素です。
コンピュートノードは、その機能を特性として Placement サービスに報告します。インスタンスは、要求する特性またはリソースプロバイダーにあってはいけない特性を指定することができます。Compute スケジューラーは、これらの特性を使用して、インスタンスをホストするのに適したコンピュートノードまたはホストアグリゲートを特定することができます。
クラウドユーザーが特定の特性を持つホストにインスタンスを作成できるようにするには、特定の特性を要求または禁止するフレーバーを定義して、その特性を要求または禁止するイメージを作成することができます。
利用可能な特性のリストは、os-traits ライブラリー を参照してください。必要に応じて、カスタムの特性を作成することもできます。
関連情報
7.1.2.1. リソースプロバイダー特性を要求または禁止するイメージの作成 リンクのコピーリンクがクリップボードにコピーされました!
クラウドユーザーが特定の特性を持つホストでインスタンスを起動するのに使用することのできるインスタンスイメージを作成することができます。
前提条件
-
ワークステーションに、
ocおよびpodmanコマンドラインツールをインストール済みである。 - cluster-admin 権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。
手順
ワークステーションから OpenStackClient Pod のリモートシェルにアクセスします。
$ oc rsh -n openstack openstackclientcloud-admin ホームディレクトリーに移動します。
$ cd /home/cloud-admin新規イメージを作成します。
$ openstack image create ... trait-imageホストまたはホストアグリゲートに必要な特性を識別します。既存の特性を選択するか、新たな特性を作成することができます。
既存の特性を使用するには、既存特性のリストを表示して特性名を取得します。
$ openstack --os-placement-api-version 1.6 trait list新規特性を作成するには、以下のコマンドを入力します。
$ openstack --os-placement-api-version 1.6 trait \ create CUSTOM_TRAIT_NAMEカスタムの特性は接頭辞
CUSTOM_で始まり、A から Z までの文字、0 から 9 までの数字、およびアンダースコア “_” だけを使用する必要があります。
各ホストの既存のリソースプロバイダー特性を収集します。
$ existing_traits=$(openstack --os-placement-api-version 1.6 resource provider trait list -f value <host_uuid> | sed 's/^/--trait /')既存のリソースプロバイダー特性に、ホストまたはホストアグリゲートに必要な特性があることを確認します。
$ echo $existing_traits必要な特性がまだリソースプロバイダーに追加されていない場合は、既存の特性と必要な特性を各ホストのリソースプロバイダーに追加してください。
$ openstack --os-placement-api-version 1.6 \ resource provider trait set $existing_traits \ --trait <TRAIT_NAME> \ <host_uuid><TRAIT_NAME>を、リソースプロバイダーに追加する特性の名前に置き換えます。必要に応じて、--traitオプションを複数回使用して、さらに特性を追加することができます。注記このコマンドは、リソースプロバイダーの特性をすべて置き換えます。したがって、ホスト上の既存のリソースプロバイダー特性のリストを取得して、削除されないように再度設定する必要があります。
要求された特性を持つホストまたはホストアグリゲートにインスタンスをスケジュールするには、イメージの追加スペックに特性を追加します。たとえば、AVX-512 をサポートするホストまたはホストアグリゲートにインスタンスをスケジュールするには、イメージの追加スペックに以下の特性を追加します。
$ openstack image set \ --property trait:HW_CPU_X86_AVX512BW=required \ trait-image禁止された特性を持つホストまたはホストアグリゲートを除外するには、イメージの追加スペックに特性を追加します。たとえば、ボリュームの複数接続をサポートするホストまたはホストアグリゲートにインスタンスがスケジュールされるのを防ぐには、イメージの追加スペックに以下の特性を追加します。
$ openstack image set \ --property trait:COMPUTE_VOLUME_MULTI_ATTACH=forbidden \ trait-imageopenstackclient Pod を終了します。
$ exit
7.1.2.2. リソースプロバイダー特性を要求または禁止するフレーバーの作成 リンクのコピーリンクがクリップボードにコピーされました!
クラウドユーザーが特定の特性を持つホストでインスタンスを起動するのに使用することのできるフレーバーを作成することができます。
前提条件
-
ワークステーションに、
ocおよびpodmanコマンドラインツールをインストール済みである。 - cluster-admin 権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。
手順
ワークステーションから OpenStackClient Pod のリモートシェルにアクセスします。
$ oc rsh -n openstack openstackclientcloud-admin ホームディレクトリーに移動します。
$ cd /home/cloud-adminフレーバーを作成します。
$ openstack flavor create --vcpus 1 --ram 512 \ --disk 2 trait-flavorホストまたはホストアグリゲートに必要な特性を識別します。既存の特性を選択するか、新たな特性を作成することができます。
既存の特性を使用するには、既存特性のリストを表示して特性名を取得します。
$ openstack --os-placement-api-version 1.6 trait list新規特性を作成するには、以下のコマンドを入力します。
$ openstack --os-placement-api-version 1.6 trait \ create CUSTOM_TRAIT_NAMEカスタムの特性は接頭辞
CUSTOM_で始まり、A から Z までの文字、0 から 9 までの数字、およびアンダースコア “_” だけを使用する必要があります。
各ホストの既存のリソースプロバイダー特性を収集します。
$ existing_traits=$(openstack --os-placement-api-version 1.6 resource provider trait list -f value <host_uuid> | sed 's/^/--trait /')既存のリソースプロバイダー特性に、ホストまたはホストアグリゲートに必要な特性があることを確認します。
$ echo $existing_traits必要な特性がまだリソースプロバイダーに追加されていない場合は、既存の特性と必要な特性を各ホストのリソースプロバイダーに追加してください。
$ openstack --os-placement-api-version 1.6 \ resource provider trait set $existing_traits \ --trait <TRAIT_NAME> \ <host_uuid><TRAIT_NAME>を、リソースプロバイダーに追加する特性の名前に置き換えます。必要に応じて、--traitオプションを複数回使用して、さらに特性を追加することができます。注記このコマンドは、リソースプロバイダーの特性をすべて置き換えます。したがって、ホスト上の既存のリソースプロバイダー特性のリストを取得して、削除されないように再度設定する必要があります。
要求された特性を持つホストまたはホストアグリゲートにインスタンスをスケジュールするには、フレーバーの追加スペックに特性を追加します。たとえば、AVX-512 をサポートするホストまたはホストアグリゲートにインスタンスをスケジュールするには、フレーバーの追加スペックに以下の特性を追加します。
$ openstack flavor set \ --property trait:HW_CPU_X86_AVX512BW=required \ trait-flavor禁止された特性を持つホストまたはホストアグリゲートを除外するには、フレーバーの追加スペックに特性を追加します。たとえば、ボリュームの複数接続をサポートするホストまたはホストアグリゲートにインスタンスがスケジュールされるのを防ぐには、フレーバーの追加スペックに以下の特性を追加します。
$ openstack flavor set \ --property trait:COMPUTE_VOLUME_MULTI_ATTACH=forbidden \ trait-flavoropenstackclient Pod を終了します。
$ exit
7.1.3. ホストアグリゲートの分離による絞り込み リンクのコピーリンクがクリップボードにコピーされました!
ホストアグリゲートへのスケジューリングを、フレーバーおよびイメージの特性がホストアグリゲートのメタデータと一致するインスタンスだけに制限することができます。フレーバーとイメージのメタデータの組み合わせでは、そのホストアグリゲートに属するコンピュートノードへのスケジューリングを有効にするホストアグリゲート特性をすべて要求する必要があります。
前提条件
-
ワークステーションに、
ocおよびpodmanコマンドラインツールをインストール済みである。 -
cluster-admin権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。
手順
ワークステーションから
OpenStackClientPod のリモートシェルにアクセスします。$ oc rsh -n openstack openstackclientホストアグリゲートを分離する対象の特性を特定します。既存の特性を選択するか、新たな特性を作成することができます。
既存の特性を使用するには、既存特性のリストを表示して特性名を取得します。
$ openstack --os-placement-api-version 1.6 trait list新規特性を作成するには、以下のコマンドを入力します。
$ openstack --os-placement-api-version 1.6 trait \ create CUSTOM_TRAIT_NAME注記カスタムの特性は接頭辞
CUSTOM_で始まり、A から Z までの文字、0 から 9 までの数字、およびアンダースコア “_” だけを使用する必要があります。
各コンピュートノードの既存のリソースプロバイダー特性を収集します。
$ existing_traits=$(openstack --os-placement-api-version 1.6 resource provider trait list -f value <host_uuid> | sed 's/^/--trait /')既存のリソースプロバイダー特性で、ホストアグリゲートを分離する特性を確認します。
$ echo $existing_traits必要な特性がまだリソースプロバイダーに追加されていない場合は、既存の特性と必要な特性をホストアグリゲートの各コンピュートノードのリソースプロバイダーに追加してください。
$ openstack --os-placement-api-version 1.6 \ resource provider trait set $existing_traits \ --trait <trait_name> \ <host_uuid>-
<trait_name>は、リソースプロバイダーに追加する特性の名前に置き換えます。必要に応じて、--traitオプションを複数回使用して、さらに特性を追加することができます。 <host_uuid>は、ホストの UUID に置き換えます。注記このコマンドは、リソースプロバイダーの特性をすべて置き換えます。したがって、ホスト上の既存のリソースプロバイダー特性のリストを取得して、削除されないように再度設定する必要があります。
-
- ホストアグリゲートに属する各コンピュートノードで、ステップ 6 - 8 を繰り返します。
特性のメタデータ属性をホストアグリゲートに追加します。
$ openstack --os-compute-api-version 2.53 aggregate set \ --property trait:<trait_name>=required <aggregate_name>フレーバーまたはイメージに特性を追加します。
$ openstack flavor set \ --property trait:<trait_name>=required <flavor> $ openstack image set \ --property trait:<trait_name>=required <image>OpenStackClientPod を終了します。$ exit
関連情報
7.2. Compute スケジューラーサービス用フィルターおよび重みの設定 リンクのコピーリンクがクリップボードにコピーされました!
インスタンスを起動するコンピュートノードの初期セットを決定するには、Compute スケジューラーサービス用にフィルターおよび重みを設定する必要があります。
手順
-
ワークステーションで、OpenStackControlPlane カスタムリソース (CR) ファイル (
openstack_control_plane.yaml) を開きます。 スケジューラーが使用するフィルターを
[filter_scheduler] enabled_filtersパラメーターに追加します。以下はその例です。spec: nova: template: schedulerServiceTemplate: customServiceConfig: | [filter_scheduler] enabled_filters = AggregateInstanceExtraSpecsFilter, ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter各コンピュートノードの重みを計算するのに使用する属性を指定します。以下に例を示します。
spec: nova: template: schedulerServiceTemplate: customServiceConfig: | [filter_scheduler] weight_classes = nova.scheduler.weights.all_weighers利用可能な属性の詳細は、Compute スケジューラーの重み を参照してください。
オプション: 各重み付け関数に適用する重みの乗数を設定します。たとえば、コンピュートノードの利用可能な RAM が他のデフォルトの重み付け関数よりも高い重みを持つように指定し、Compute スケジューラーが、利用可能な RAM が少ないコンピュートノードよりも、利用可能な RAM が多いコンピュートノードを優先するには、以下の設定を使用します。
spec: nova: template: schedulerServiceTemplate: customServiceConfig: | [filter_scheduler] weight_classes = nova.scheduler.weights.all_weighers [filter_scheduler] ram_weight_multiplier = 2.0ヒントまた、重みの乗数を負の値に設定することもできます。上記の例では、利用可能な RAM が多いコンピュートノードよりも利用可能な RAM が少ないノードを優先するには、
ram_weight_multiplierを-2.0に設定します。コントロールプレーンを更新します。
$ oc apply -f openstack_control_plane.yaml -n openstackRHOCP が OpenStackControlPlane CR に関連するリソースを作成した後、次のコマンドを実行してステータスを確認します。
$ oc get openstackcontrolplane -n openstackステータスが "Setup complete" であれば、OpenStackControlPlane リソースが作成されています。
ヒントデプロイの進行状況を追跡するには、get コマンドの末尾に
-wオプションを追加します。オプション: 作成した各セルの openstack namespace 内の Pod を確認して、コントロールプレーンがデプロイされていることを確認します。
$ oc get pods -n openstackすべての Pod が完了または実行中の状態であれば、コントロールプレーンがデプロイされています。
7.3. Compute スケジューラーのフィルター リンクのコピーリンクがクリップボードにコピーされました!
インスタンスをホストする適切なコンピュートノードの選択時にコンピュートスケジューラーが適用する必要があるフィルターを指定するには、コンピュート環境ファイルで enabled_filters パラメーターを設定します。デフォルト設定では、以下のフィルターが適用されます。
-
ComputeFilter: コンピュートノードは要求に対応することができる。 -
ComputeCapabilitiesFilter: コンピュートノードはフレーバーの追加スペックを満足する。 -
ImagePropertiesFilter: コンピュートノードは要求されたイメージ属性を満足する。 -
ServerGroupAntiAffinityFilter: コンピュートノードは、まだ指定されたグループに属するインスタンスをホストしていない。 -
ServerGroupAffinityFilter: コンピュートノードは、すでに指定されたグループに属するインスタンスをホストしている。 -
SameHostFilter: コンピュートノードは、特定のインスタンスセットと同じコンピュートノード上のインスタンスをスケジュールできます。 -
DifferentHostFilter: コンピュートホストは、特定のインスタンスセットとは異なるコンピュートノード上のインスタンスをスケジュールできます。 -
PciPassthroughFilter: コンピュートホストは、インスタンスがフレーバー extra_specs を使用して要求するデバイスを持つコンピュートノード上でインスタンスをスケジュールできます。 -
NUMATopologyFilter: コンピュートホストは、NUMA 対応のコンピュートノード上で NUMA トポロジーを持つインスタンスをスケジュールできます。
フィルターを追加および削除することができます。利用可能なすべてのフィルターの詳細を以下の表に示します。
| フィルター | 説明 |
|---|---|
|
| このフィルターを使用して、インスタンスのイメージメタデータとホストアグリゲートのメタデータを照合します。いずれかのホストアグリゲートのメタデータがイメージのメタデータと一致する場合は、そのホストアグリゲートに属するコンピュートノードはそのイメージからインスタンスを起動する候補となります。スケジューラーは、有効なイメージメタデータ属性のみを認識します。 |
|
| このフィルターを使用して、インスタンスのフレーバー追加スペックで定義された namespace 属性とホストアグリゲートのメタデータを照合します。
フレーバー いずれかのホストアグリゲートのメタデータがフレーバー追加スペックのメタデータと一致する場合は、そのホストアグリゲートに属するコンピュートノードはそのイメージからインスタンスを起動する候補となります。 |
|
|
このフィルターを使用して、ホストアグリゲートごとの |
|
|
このフィルターを使用して、プロジェクト分離ホストアグリゲートに属するコンピュートノードの可用性を、指定したプロジェクトのセットに制限します。 注記
プロジェクトが他のホストにインスタンスを配置することは可能です。これを制限するには、 |
|
|
このフィルターを使用して、アグリゲートに属する各コンピュートノードでホスト可能なインスタンスの数を制限します。 |
|
|
フレーバーメタデータキーが設定されていない場合や、フレーバーアグリゲートメタデータの値に要求するフレーバーの名前が含まれる場合には、このフィルターを使用してホスト渡します。フレーバーメタデータエントリーの値は、単一のフレーバー名またはフレーバー名のコンマ区切りリストのいずれかを含む文字列です (例: |
|
| このフィルターを使用して、利用可能なすべてのコンピュートノードをインスタンスのスケジューリング対象として考慮します。 注記 このフィルターを使用しても、他のフィルターは無効になりません。 |
|
| このフィルターを使用して、インスタンスが指定するアベイラビリティーゾーンに属するコンピュートノードでインスタンスを起動します。 |
|
|
このフィルターを使用して、インスタンスのフレーバー追加スペックで定義した namespace 属性とコンピュートノードのケイパビリティーを照合します。フレーバーの追加スペックに
|
|
| このフィルターを使用して、稼働中で有効なすべてのコンピュートノードを渡します。このフィルターは常に設定されている必要があります。 |
|
|
このフィルターを使用して、特定のインスタンスセットとは異なるコンピュートノードへのインスタンスのスケジューリングを有効にします。インスタンスの起動時にこれらのインスタンスを指定するには、
|
|
| このフィルターを使用して、インスタンスイメージで定義された以下の属性に基づいてコンピュートノードを絞り込みます。
インスタンスに含まれる指定のイメージ属性をサポートできるコンピュートノードが、スケジューラーに渡されます。 |
|
|
このフィルターを使用して、分離したコンピュートノード上で分離したイメージだけを使用してインスタンスをスケジュールします。また、
分離されたイメージとホストのセットを指定するには、
|
|
|
このフィルターを使用して、(ホストで実行可能な高 I/O 負荷インスタンスの最大数を指定する) |
|
|
このフィルターを使用して、 このフィルターを使用するには、Compute 環境ファイルに以下の設定を追加します。
デフォルトでは、Compute スケジューラーサービスは 60 秒ごとにメトリクスを更新します。 |
|
|
このフィルターを使用して、NUMA 対応コンピュートノードに NUMA トポロジーが設定されたインスタンスをスケジュールします。フレーバー |
|
|
このフィルターを使用して、 |
|
|
このフィルターを使用して、フレーバー (通常高価で使用が制限される) PCI デバイスを要求するインスタンス用に、そのデバイスを持つノードを確保する場合に、このフィルターを使用します。 |
|
|
このフィルターを使用して、特定のインスタンスセットと同じコンピュートノードへのインスタンスのスケジューリングを有効にします。インスタンスの起動時にこれらのインスタンスを指定するには、
|
|
| このフィルターを使用して、同じコンピュートノード上でアフィニティーサーバーグループに属するインスタンスをスケジュールします。サーバーグループを作成するには、以下のコマンドを入力します。
このグループに属するインスタンスを起動するには、
|
|
| このフィルターを使用して、異なるコンピュートノード上でアンチアフィニティーサーバーグループに属するインスタンスをスケジュールします。サーバーグループを作成するには、以下のコマンドを入力します。
このグループに属するインスタンスを起動するには、
|
|
|
このフィルターを使用して、特定の IP サブネット範囲を持つコンピュートノードにインスタンスをスケジュールします。必要な範囲を指定するには、
|
7.4. Compute スケジューラーの重み リンクのコピーリンクがクリップボードにコピーされました!
それぞれのコンピュートノードは重みを持ち、スケジューラーはこれを使用してインスタンスのスケジューリングの優先度を決定します。フィルターを適用した後、Compute スケジューラーは残った候補のコンピュートノードから最大の重みを持つコンピュートノードを選択します。
Compute スケジューラーは、以下のタスクを実行することにより、各コンピュートノードの重みを決定します。
- スケジューラーは、各重みを 0.0 から 1.0 までの値に正規化します。
- スケジューラーは、正規化された重みを重み付け関数の乗数で乗算します。
Compute スケジューラーは、候補のコンピュートノード全体でリソースの可用性の低い値および高い値を使用して、各リソース種別の重みの正規化を計算します。
- 最も低いリソース可用性 (minval) を持つノードには、'0' が割り当てられます。
- 最も高いリソース可用性 (maxval) を持つノードには '1' が割り当てられます。
minval と maxval 内の範囲のリソース可用性を持つノードには、以下の式を使用して正規化された重みが割り当てられます。
(node_resource_availability - minval) / (maxval - minval)
すべてのコンピュートノードが同じリソース可用性を持つ場合、それらはすべて 0 に正規化されます。
たとえば、スケジューラーは、利用可能な仮想 CPU の数がそれぞれ異なる 10 個のコンピュートノードに関して、利用可能な仮想 CPU の正規化された重みを以下のように計算します。
| コンピュートノード | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 仮想 CPU の数 | 5 | 5 | 10 | 10 | 15 | 20 | 20 | 15 | 10 | 5 |
| 正規化された重み | 0 | 0 | 0.33 | 0.33 | 0.67 | 1 | 1 | 0.67 | 0.33 | 0 |
Compute スケジューラーは、以下の式を使用してコンピュートノードの重みを計算します。
(w1_multiplier * norm(w1)) + (w2_multiplier * norm(w2)) + ...
重みに使用することのできる設定オプションの詳細を以下の表に示します。
以下の表で説明するオプションと同じ名前のアグリゲートメタデータのキーを使用して、ホストアグリゲートに重みを設定することができます。ホストアグリゲートに設定すると、ホストアグリゲートの値が優先されます。
| 設定オプション | 型 | 説明 |
|---|---|---|
|
| String | このパラメーターを使用して、各コンピュートノードの重みを計算するのに以下の属性のどれを使用するかを設定します。
|
|
| 浮動小数点 | このパラメーターを使用して、利用可能な RAM 容量に基づいてホストを重み付けするのに使用する重みの乗数を指定します。 利用可能な RAM 容量がより大きいホストを優先するには、正の値に設定します。この場合、インスタンスは多くのホストに分散されます。 利用可能な RAM 容量がより小さいホストを優先するには、負の値に設定します。この場合、可能な限り多くのインスタンスをホストに分担 (スタック) させた後に、使用率が低いホストをスケジューリングします。 正または負の絶対値で、他の重み付け関数と比べて RAM の重み付け関数をどれだけ優先するかを指定します。 デフォルトは 1.0 で、スケジューラーはインスタンスをすべてのホストに均等に分散します。 |
|
| 浮動小数点 | このパラメーターを使用して、利用可能なディスク容量に基づいてホストを重み付けするのに使用する重みの乗数を指定します。 利用可能なディスク容量がより大きいホストを優先するには、正の値に設定します。この場合、インスタンスは多くのホストに分散されます。 利用可能なディスク容量がより小さいホストを優先するには、負の値に設定します。この場合、可能な限り多くのインスタンスをホストに分担 (スタック) させた後に、使用率が低いホストをスケジューリングします。 正または負の絶対値で、他の重み付け関数と比べてディスクの重み付け関数をどれだけ優先するかを指定します。 デフォルトは 1.0 で、スケジューラーはインスタンスをすべてのホストに均等に分散します。 |
|
| 浮動小数点 | このパラメーターを使用して、利用可能な仮想 CPU の数に基づいてホストを重み付けするのに使用する重みの乗数を指定します。 利用可能な仮想 CPU の数がより多いホストを優先するには、正の値に設定します。この場合、インスタンスは多くのホストに分散されます。 利用可能な仮想 CPU の数がより少ないホストを優先するには、負の値に設定します。この場合、可能な限り多くのインスタンスをホストに分担 (スタック) させた後に、使用率が低いホストをスケジューリングします。 正または負の絶対値で、他の重み付け関数と比べて仮想 CPU の重み付け関数をどれだけ優先するかを指定します。 デフォルトは 1.0 で、スケジューラーはインスタンスをすべてのホストに均等に分散します。 |
|
| 浮動小数点 | このパラメーターを使用して、負荷に基づいてホストを重み付けするのに使用する重みの乗数を指定します。 負荷がより軽いホストを優先するには、負の値に設定します。この場合、負荷はより多くのホストに分散されます。 負荷がより重いホストを優先するには、正の値に設定します。この場合、インスタンスはすでにビジー状態にあるホストにスケジューリングされます。 正または負の絶対値で、他の重み付け関数と比べて I/O 操作の重み付け関数をどれだけ優先するかを指定します。 デフォルトは -1.0 で、スケジューラーは負荷をより多くのホストに分散します。 |
|
| 浮動小数点 | このパラメーターを使用して、直近のビルド失敗回数に基づいてホストを重み付けするのに使用する重みの乗数を指定します。 ホストから報告される直近のビルド失敗回数をより重要視するには、正の値に設定します。直近ビルドに失敗したホストは、選択されにくくなります。
直近の失敗回数でコンピュートホストを重み付けするのを無効にするには、 デフォルト: 1000000.0 |
|
| 浮動小数点 | このパラメーターを使用して、セルを越えて移動する際にホストを重み付けするのに使用する重みの乗数を指定します。このオプションは、インスタンスを移動する際に、同じ移動元セル内にあるホストに加える重みを決定します。インスタンスを移行する場合、デフォルトではスケジューラーは同じ移行元セル内にあるホストを優先します。 現在インスタンスを実行中のセル内にあるホストを優先するには、正の値に設定します。現在インスタンスを実行中のセルとは別のセルにあるホストを優先するには、負の値に設定します。 デフォルト: 1000000.0 |
|
| 正の浮動小数点 | このパラメーターを使用して、ホスト上の PCI デバイスの数とインスタンスが要求する PCI デバイスの数に基づいてホストを重み付けするのに使用する重みの乗数を指定します。インスタンスが PCI デバイスを要求する場合、より多くの PCI デバイスを持つコンピュートノードにより高い重みが割り当てられます。 たとえば、ホストが 3 台利用可能で、PCI デバイスが 1 つのホストが 1 台、複数の PCI デバイスがあるホストが 1 台、PCI デバイスがないホストが 1 台の場合には、Compute スケジューラーはインスタンスの需要に基づいてこれらのホストの優先順位付けを行います。スケジューラーは、インスタンスが PCI デバイスを 1 つ要求している場合には 1 番目のホストを、複数の PCI デバイスを要求している場合には 2 番目のホストを、PCI デバイスを要求していない場合には 3 番目のホストを、それぞれ優先するはずです。 このオプションを設定して、PCI を要求しないインスタンスが PCI デバイスを持つホストのリソースを占有するのを防ぎます。 デフォルト: 1.0 |
|
| Integer | このパラメーターを使用して、ホストを選択するサブセット (絞り込まれたホストのサブセット) のサイズを指定します。このオプションを 1 以上に設定する必要があります。値を 1 に指定した場合には、重み付け関数によって最初に返されるホストが選択されます。スケジューラーは 1 未満の値を無視し、代わりに 1 を使用します。 類似の要求を処理する複数のスケジューラープロセスが同じホストを選択して競合状態が生じるのを防ぐには、1 より大きい値に設定します。要求に最も適した N 台のホストからホストを無作為に選択することで、競合の可能性が低減されます。ただし、この値を高く設定すると、選択されるホストが特定の要求に対して最適ではない可能性が高くなります。 デフォルト: 1 |
|
| 正の浮動小数点 | このパラメーターを使用して、グループのソフトアフィニティーのホストを重み付けするのに使用する重みの乗数を指定します。 注記 このポリシーでグループを作成する場合は、マイクロバージョンを指定する必要があります。
デフォルト: 1.0 |
|
| 正の浮動小数点 | このパラメーターを使用して、グループのソフトアンチアフィニティーのホストを重み付けするのに使用する重みの乗数を指定します。 注記 このポリシーでグループを作成する場合は、マイクロバージョンを指定する必要があります。
デフォルト: 1.0 |
|
| 浮動小数点 | このパラメーターを使用して、ホストの仮想ドライバーによって報告されたハイパーバイザーのバージョンに基づいてホストを重み付けするために使用する乗数を指定します。 古いハイパーバイザーを持つコンピュートホストを優先するには、負の整数または浮動小数点値を設定します。 ハイパーバイザーのバージョンによるコンピュートホストの重み付けを無効にする場合、0 に設定します。 デフォルトは 1.0。スケジューラーは、新しいハイパーバイザーを備えたコンピュートホストを優先します。 |
|
| 浮動小数点 |
このパラメーターを使用して、メトリクスの重み付けに使用する重みの乗数を指定します。デフォルトでは 重み全体でメトリクスの影響を増大させるには、1.0 を超える数値に設定します。 重み全体でメトリクスの影響を減少させるには、0.0 と 1.0 の間の数値に設定します。
メトリクスの値を無視して 低いメトリクスのホストを優先してインスタンスをホストにスタックするには、負の数値に設定します。 デフォルト: 1.0 |
|
|
| このパラメーターを使用して、重み付けに使用するメトリクス、および各メトリクスの重みを計算するのに使用する比率を指定します。有効なメトリクス名は以下のとおりです。
例: |
|
| Boolean |
このパラメーターを使用して、設定した
|
|
| 浮動小数点 |
このパラメーターを使用して、 デフォルト: -10000.0 |
7.5. カスタム特性とリソースクラスの宣言 リンクのコピーリンクがクリップボードにコピーされました!
管理者は、YAML ファイル provider.yaml でリソースのカスタムインベントリーを定義することにより、データプレーンノードでどのカスタム物理機能と消費可能なリソースが利用可能であるかを宣言できます。
CUSTOM_DIESEL_BACKUP_POWER、CUSTOM_FIPS_COMPLIANT、CUSTOM_HPC_OPTIMIZED などのカスタム特性を定義することで、物理ホスト機能の可用性を宣言できます。CUSTOM_DISK_IOPS や CUSTOM_POWER_WATTS などのリソースクラスを定義することで、消費可能なリソースの可用性を宣言することもできます。
フレーバーメタデータを使用して、カスタムリソースとカスタム特性を要求できます。詳細は、インスタンスのベアメタルリソースクラス と インスタンスのリソース特性 を参照してください。
前提条件
-
ワークステーションに、
ocおよびpodmanコマンドラインツールをインストール済みである。 -
cluster-admin権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。
手順
-
/home/stack/templates/にprovider.yamlというファイルを作成します。 リソースプロバイダーを設定するには、
provider.yamlファイルに次の設定を追加します。meta: schema_version: '1.0' providers: - identification: uuid: <node_uuid>-
<node_uuid>をノードの UUID に置き換えます (例:'5213b75d-9260-42a6-b236-f39b0fd10561')。あるいは、nameプロパティーを使用してリソースプロバイダーを指定することもできます (name: 'EXAMPLE_RESOURCE_PROVIDER')。
-
リソースプロバイダー用に使用可能なカスタムリソースクラスを設定するには、次の設定を
provider.yamlファイルに追加します。meta: schema_version: '1.0' providers: - identification: uuid: <node_uuid> inventories: additional: - CUSTOM_EXAMPLE_RESOURCE_CLASS: total: <total_available> reserved: <reserved> min_unit: <min_unit> max_unit: <max_unit> step_size: <step_size> allocation_ratio: <allocation_ratio>-
CUSTOM_EXAMPLE_RESOURCE_CLASSをリソースクラスの名前に置き換えます。カスタムリソースクラスは接頭辞 CUSTOM_ で始まり、A から Z までの文字、0 から 9 までの数字、およびアンダースコア "_" だけを使用する必要があります。 -
<total_available>は、このリソースプロバイダーで使用可能なCUSTOM_EXAMPLE_RESOURCE_CLASSの数に置き換えます。 -
<reserved>は、このリソースプロバイダーで使用可能なCUSTOM_EXAMPLE_RESOURCE_CLASSの数に置き換えます。 -
<min_unit>は、単一インスタンスが消費できるリソースの最小単位に置き換えます。 -
<max_unit>は、単一インスタンスが消費できるリソースの最大単位に置き換えます。 -
<step_size>は、このリソースプロバイダーで使用できるCUSTOM_EXAMPLE_RESOURCE_CLASSの数に置き換えます。 -
<allocation_ratio>は、割り当て比率を設定する値に置き換えます。allocation_ratio が 1.0 に設定されている場合、過剰割り当ては許可されません。しかし、allocation_ration が 1.0 より大きい場合、使用可能なリソースの合計は物理的に存在するリソースよりも多くなります。
-
リソースプロバイダー用に使用可能な特性を設定するには、
provider.yamlファイルに次の設定を追加します。meta: schema_version: '1.0' providers: - identification: uuid: <node_uuid> inventories: additional: ... traits: additional: - 'CUSTOM_EXAMPLE_TRAIT'CUSTOM_EXAMPLE_TRAITを特性の名前に置き換えます。カスタムの特性は接頭辞 CUSTOM_ で始まり、A から Z までの文字、0 から 9 までの数字、およびアンダースコア "_" だけを使用する必要があります。provider.yamlファイルの例: 次の例では、リソースプロバイダーに対して 1 つのカスタムリソースクラスと 1 つのカスタム特性を宣言します。meta: schema_version: 1.0 providers: - identification: uuid: $COMPUTE_NODE inventories: additional: CUSTOM_LLC: # Describing LLC on this compute node # max_unit indicates maximum size of single LLC # total indicates sum of sizes of all LLC total: 221 reserved: 22 min_unit: 13 max_unit: 114 step_size: 15 allocation_ratio: 1.06 traits: additional: # Describing that this compute node enables support for # P-state control - CUSTOM_P_STATE_ENABLED
-
provider.yamlファイルを保存して閉じます。 コンピュートノードがカスタム特性とリソースの宣言に provider.yaml ファイルを使用するように設定する ConfigMap CR を作成し、ワークステーション上の
compute-provider.yamlという名前のファイルに保存します。apiVersion: v1 kind: ConfigMap metadata: name: compute-provider namespace: openstack data: provider.yaml: |ConfigMapオブジェクトの作成の詳細は、「config map の作成と使用」を参照してください。ConfigMapオブジェクトを作成します。$ oc create -f compute-provider.yamlcompute-providerConfigMapオブジェクトをはじめとする新しいカスタムサービス (compute-provider) を作成し、ワークステーション上のcompute-provider-service.yamlという名前のファイルに保存します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneService metadata: name: compute-provider namespace: openstack spec: label: dataplane-deployment-compute playbook: osp.edpm.nova secrets: [] dataSources: - secretRef: name: nova-cell1-compute-config - secretRef: name: nova-migration-ssh-key - configMapRef: name: compute-provider - configMapRef: name: nova-extra-config optional: truecompute-providerサービスを作成します。$ oc apply -f compute-provider-service.yamlカスタム特性とリソースの宣言に provider.yaml ファイルを使用するノードを定義する新しい
OpenStackDataPlaneNodeSetCR を作成し、ワークステーション上の compute-provider.yaml という名前のファイルに保存します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet metadata: name: compute-providerOpenStackDataPlaneNodeSetCR の作成方法の詳細は、「データプレーンノードセットの作成」を参照してください。compute-providerOpenStackDataPlaneNodeSet CR を、デフォルトの Compute サービスの代わりにcompute-provider-serviceサービスを使用するように変更します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet metadata: name: compute-provider spec: services: - download-cache - configure-network - validate-network - install-os - configure-os - run-os - ovn - libvirt - compute-provider-service #replaced the nova service - telemetry-
compute-provider.yaml
OpenStackDataPlaneNodeSetCR 定義ファイルを保存します。 データプレーンリソースを作成します。
$ oc create -f compute-provider.yamlデータプレーンリソースが作成されたことを確認します。
$ oc get openstackdataplanenodeset NAME STATUS MESSAGE compute-provider False Deployment not startedサービスが作成されたことを確認します。
$ oc get openstackdataplaneservice NAME AGE download-cache 6d7h configure-network 6d7h configure-os 6d6h install-os 6d6h run-os 6d6h validate-network 6d6h ovn 6d6h libvirt 6d6h compute-provider 6d6h telemetry 6d6h新しい
OpenStackDataPlaneDeploymentCR を作成し、データプレーンノード上のサービスを設定してノードをデプロイし、ワークステーション上の compute-provider_deploy.yaml という名前のファイルに保存します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: compute-providerOpenStackDataPlaneDeployment CR の作成方法の詳細は、「データプレーンのデプロイ」を参照してください。
デプロイするすべての OpenStackDataPlaneNodeSet CR を含めるように
nodeSetsを指定します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: compute-provider spec: nodeSets: - openstack-edpm - compute-provider - ... - <nodeSet_name>-
<nodeSet_name>を、データプレーンデプロイメントに含める OpenStackDataPlaneNodeSet CR の名前に置き換えます。
-
- compute-provider_deploy.yaml デプロイメントファイルを保存します。
データプレーンをデプロイします。
$ oc create -f compute-provider_deploy.yamlデータプレーンがデプロイされていることを確認します。
$ oc get openstackdataplanedeployment NAME STATUS MESSAGE compute-provider True Deployment Completed $ oc get openstackdataplanenodeset NAME STATUS MESSAGE openstack-edpm True Deployed compute-provider True Deployedデプロイされたコンピュートノードがコントロールプレーンに表示されることを確認します。
$ oc rsh nova-cell0-conductor-0 nova-manage cell_v2 discover_hosts --verboseopenstackclient のリモートシェルにアクセスし、デプロイされたコンピュートノードがコントロールプレーンに表示されることを確認します。
$ oc rsh -n openstack openstackclient $ openstack hypervisor list
7.6. ホストアグリゲートの作成と管理 リンクのコピーリンクがクリップボードにコピーされました!
クラウド管理者は、パフォーマンスおよび管理目的で、コンピュートのデプロイメントを論理グループに分割することができます。Red Hat OpenStack Services on OpenShift (RHOSO) は、論理グループのパーティション設定に使用する次のメカニズムを提供します。
- ホストアグリゲート
ホストアグリゲートとは、ハードウェアやパフォーマンス特性などの属性に基づいてコンピュートノードを論理的なユニットにグループ化したものです。コンピュートノードを 1 つまたは複数のホストアグリゲートに割り当てることができます。
ホストアグリゲートでメタデータを設定してフレーバーおよびイメージをホストアグリゲートにマッピングし、続いてフレーバーの追加スペックまたはイメージのメタデータ属性をホストアグリゲートのメタデータにマッチングすることができます。必要なフィルターが有効な場合、Compute スケジューラーはこのメタデータを使用してインスタンスのスケジューリングを行うことができます。ホストアグリゲートで指定するメタデータは、ホストの使用をフレーバーまたはイメージで指定するメタデータと同じメタデータのインスタンスに限定します。
ホストアグリゲートのメタデータで
xxx_weight_multiplier設定オプションを定義することで、それぞれのホストアグリゲートに重みの乗数を設定することができます。ホストアグリゲートを使用して、負荷分散の処理、物理的な分離または冗長性の適用、共通の属性を持つサーバーのグループ化、ハードウェアのクラス分け等を行うことができます。
ホストアグリゲートを作成する際に、ゾーン名を指定することができます。この名前は、クラウドユーザーが選択することのできるアベイラビリティーゾーンとして提示されます。
- アベイラビリティーゾーン
アベイラビリティーゾーンは、ホストアグリゲートのクラウドユーザー側のビューです。クラウドユーザーは、アベイラビリティーゾーンに属するコンピュートノードやアベイラビリティーゾーンのメタデータを把握することはできません。クラウドユーザーは、アベイラビリティーゾーンの名前を見ることしかできません。
それぞれのコンピュートノードは、1 つのアベイラビリティーゾーンにしか割り当てることができません。デフォルトのアベイラビリティーゾーンを設定することができます。クラウドユーザーがゾーンを指定しない場合、インスタンスはこのアベイラビリティーゾーンにスケジューリングされます。特定の機能を持つアベイラビリティーゾーンを使用するように、クラウドユーザーに指示することができます。
7.6.1. ホストアグリゲートでのスケジューリングの有効化 リンクのコピーリンクがクリップボードにコピーされました!
特定の属性を持つホストアグリゲートにインスタンスをスケジュールするには、Compute スケジューラーの設定を更新し、ホストアグリゲートのメタデータに基づく絞り込みを有効にします。
前提条件
-
ワークステーションに、
ocおよびpodmanコマンドラインツールをインストール済みである。 -
cluster-admin権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。
手順
ワークステーションから OpenStackClient Pod のリモートシェルにアクセスします。
$ oc rsh -n openstack openstackclientcloud-admin ホームディレクトリーに移動します。
$ cd /home/cloud-admin-
ワークステーションで
OpenStackControlPlaneカスタムリソース (CR) ファイルopenstack_control_plane.yamlを開きます。 存在しない場合は、
enabled_filtersパラメーターに次の値を追加します。AggregateInstanceExtraSpecsFilter: フレーバーの追加スペックに一致するホストアグリゲートメタデータでコンピュートノードを絞り込むには、この値を追加します。注記このフィルターが想定どおりに機能するには、
extra_specsキーにaggregate_instance_extra_specs:namespace の接頭辞を指定して、フレーバーの追加スペックのスコープを定義する必要があります。AggregateImagePropertiesIsolation: イメージメタデータ属性に一致するホストアグリゲートメタデータでコンピュートノードを絞り込むには、この値を追加します。注記イメージメタデータ属性を使用してホストアグリゲートのメタデータを絞り込むには、ホストアグリゲートメタデータキーが有効なイメージメタデータ属性と一致する必要があります。有効なイメージメタデータ属性に関する情報は、イメージ設定パラメーター を参照してください。
AvailabilityZoneFilter: インスタンスの起動時にアベイラビリティーゾーンで絞り込むには、この値を追加します。注記Compute スケジューラーサービスのフィルター
AvailabilityZoneFilterを使用する代わりに、Placement サービスを使用してアベイラビリティーゾーンの要求を処理することができます。
コントロールプレーンを更新します。
$ oc apply -f openstack_control_plane.yaml -n openstackopenstackclient Pod を終了します。
$ exit
7.6.2. ホストアグリゲートの作成 リンクのコピーリンクがクリップボードにコピーされました!
クラウド管理者は、ホストアグリゲートを必要なだけ作成することができます。
前提条件
-
ワークステーションに
ocおよびpodmanコマンドラインツールがインストールされている。 -
cluster-admin権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。
手順
ワークステーションから OpenStackClient Pod のリモートシェルにアクセスします。
$ oc rsh -n openstack openstackclientcloud-admin ホームディレクトリーに移動します。
$ cd /home/cloud-adminホストアグリゲートを作成するには、以下のコマンドを入力します。
# openstack aggregate create <aggregate_name><aggregate_name>をホストアグリゲートに割り当てる名前に置き換えてください。ホストアグリゲートにメタデータを追加します。
# openstack aggregate set \ --property <key=value> \ --property <key=value> \ <aggregate_name>-
<key=value>はメタデータのキー/値のペアに置き換えてください。AggregateInstanceExtraSpecsFilterフィルターを使用している場合、キーは任意の文字列 (例:ssd=true) にすることができます。AggregateImagePropertiesIsolationフィルターを使用している場合は、キーは有効なイメージメタデータ属性と一致する必要があります。有効なイメージメタデータプロパティーの詳細は、イメージ設定パラメーター を参照してください。 -
<aggregate_name>をホストアグリゲートの名前に置き換えてください。
-
コンピュートノードをホストアグリゲートに追加します。
# openstack aggregate add host \ <aggregate_name> \ <host_name>-
<aggregate_name>は、コンピュートノードを追加するホストアグリゲートの名前に置き換えます。 -
<host_name>は、ホストアグリゲートに追加するコンピュートノードの名前に置き換えてください。
-
ホストアグリゲート用のフレーバーまたはイメージを作成します。
フレーバーを作成します。
$ openstack flavor create \ --ram <size_mb> \ --disk <size_gb> \ --vcpus <no_reserved_vcpus> \ host-agg-flavorイメージの作成
$ openstack image create host-agg-image
フレーバーまたはイメージに、ホストアグリゲートのキー/値のペアに一致するキー/値のペアを 1 つまたは複数設定します。
フレーバーにキー/値のペアを設定するには、スコープ
aggregate_instance_extra_specsを使用します。# openstack flavor set \ --property aggregate_instance_extra_specs:ssd=true \ host-agg-flavorイメージにキー/値のペアを設定するには、有効なイメージメタデータ属性をキーとして使用します。
# openstack image set \ --property os_type=linux \ host-agg-image
openstackclient Pod を終了します。
$ exit
7.6.3. アベイラビリティーゾーンの作成 リンクのコピーリンクがクリップボードにコピーされました!
クラウド管理者は、クラウドユーザーがインスタンスを作成する際に選択できるアベイラビリティーゾーンを作成することができます。
前提条件
-
ワークステーションに、
ocおよびpodmanコマンドラインツールをインストール済みである。 -
cluster-admin権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。
手順
ワークステーションから OpenStackClient Pod のリモートシェルにアクセスします。
$ oc rsh -n openstack openstackclientcloud-admin ホームディレクトリーに移動します。
$ cd /home/cloud-adminアベイラビリティーゾーンを作成するには、新しいアベイラビリティーゾーンホストアグリゲートを作成するか、既存のホストアグリゲートをアベイラビリティーゾーンにすることができます。
新しいアベイラビリティーゾーンホストアグリゲートを作成するには、以下のコマンドを入力します。
# openstack aggregate create \ --zone <availability_zone> \ <aggregate_name>-
<availability_zone>をアベイラビリティーゾーンに割り当てる名前に置き換えてください。 -
<aggregate_name>をホストアグリゲートに割り当てる名前に置き換えてください。
-
既存のホストアグリゲートをアベイラビリティーゾーンにするには、以下のコマンドを入力します。
# openstack aggregate set --zone <availability_zone> \ <aggregate_name>-
<availability_zone>をアベイラビリティーゾーンに割り当てる名前に置き換えてください。 -
<aggregate_name>をホストアグリゲートの名前に置き換えてください。
-
オプション: アベイラビリティーゾーンにメタデータを追加します。
# openstack aggregate set --property <key=value> \ <aggregate_name>-
<key=value>をメタデータのキー/値のペアに置き換えてください。キー/値の属性は、必要なだけ追加することができます。 -
<aggregate_name>をアベイラビリティーゾーンホストアグリゲートの名前に置き換えてください。
-
コンピュートノードをアベイラビリティーゾーンホストアグリゲートに追加します。
# openstack aggregate add host <aggregate_name> \ <host_name>-
<aggregate_name>は、コンピュートノードを追加するアベイラビリティーゾーンホストアグリゲートの名前に置き換えてください。 -
<host_name>は、アベイラビリティーゾーンに追加するコンピュートノードの名前に置き換えてください。
-
openstackclient Pod を終了します。
$ exit
7.6.4. ホストアグリゲートの削除 リンクのコピーリンクがクリップボードにコピーされました!
ホストアグリゲートを削除するには、まずホストアグリゲートからすべてのコンピュートノードを削除します。
前提条件
-
ワークステーションに、
ocおよびpodmanコマンドラインツールをインストール済みである。 -
cluster-admin権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。
手順
ワークステーションから OpenStackClient Pod のリモートシェルにアクセスします。
$ oc rsh -n openstack openstackclientcloud-admin ホームディレクトリーに移動します。
$ cd /home/cloud-adminホストアグリゲートに割り当てられたすべてのコンピュートノードのリストを表示するには、以下のコマンドを入力します。
# openstack aggregate show <aggregate_name>ホストアグリゲートから割り当てられたすべてのコンピュートノードを削除するには、それぞれのコンピュートノードで以下のコマンドを入力します。
# openstack aggregate remove host <aggregate_name> \ <host_name>-
<aggregate_name>は、コンピュートノードを削除するホストアグリゲートの名前に置き換えてください。 -
<host_name>は、ホストアグリゲートから削除するコンピュートノードの名前に置き換えてください。
-
ホストアグリゲートからすべてのコンピュートノードを削除したら、以下のコマンドを入力してホストアグリゲートを削除します。
# openstack aggregate delete <aggregate_name>openstackclient Pod を終了します。
$ exit
7.6.5. プロジェクト分離ホストアグリゲートの作成 リンクのコピーリンクがクリップボードにコピーされました!
特定のプロジェクトでのみ利用可能なホストアグリゲートを作成することができます。ホストアグリゲートに割り当てたプロジェクトだけが、ホストアグリゲートでインスタンスを起動することができます。
プロジェクト分離では、Placement サービスを使用して各プロジェクトのホストアグリゲートを絞り込みます。このプロセスは、AggregateMultiTenancyIsolation フィルターの機能に優先します。したがって、AggregateMultiTenancyIsolation フィルターを使用する必要はありません。
前提条件
-
ワークステーションに、
ocおよびpodmanコマンドラインツールをインストール済みである。 -
cluster-admin権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。
手順
ワークステーションから OpenStackClient Pod のリモートシェルにアクセスします。
$ oc rsh -n openstack openstackclientcloud-admin ホームディレクトリーに移動します。
$ cd /home/cloud-admin-
ワークステーションで、
OpenStackControlPlaneカスタムリソース (CR) ファイル (openstack_control_plane.yaml) を開きます。 プロジェクト分離されたホストアグリゲート上でプロジェクトインスタンスをスケジュールするには、
query_placement_for_image_type_supportパラメーターの値をTrueに設定します。[scheduler] query_placement_for_image_type_support = Trueオプション: ホストアグリゲートに割り当てたプロジェクトだけがクラウド上でインスタンスを作成できるようにするには、
placement_aggregate_required_for_tenantsパラメーターの値をTrueに設定します。注記placement_aggregate_required_for_tenantsパラメーターは、デフォルトでFalseに設定されています。このパラメーターがFalseの場合、ホストアグリゲートに割り当てられていないプロジェクトは、任意のホストアグリゲートでインスタンスを作成することができます。- 更新内容を Compute 環境ファイルに保存します。
コントロールプレーンを更新します。
$ oc apply -f openstack_control_plane.yaml -n openstack- ホストアグリゲートを作成します。
プロジェクト ID のリストを取得します。
# openstack project listfilter_tenant_id<suffix>メタデータキーを使用して、プロジェクトをホストアグリゲートに割り当てます。# openstack aggregate set \ --property filter_tenant_id<ID0>=<project_id0> \ --property filter_tenant_id<ID1>=<project_id1> \ ... --property filter_tenant_id<IDn>=<project_idn> \ <aggregate_name>-
<ID0>、<ID1>、および<IDn>までのすべての ID を、作成する各プロジェクトフィルターの一意の値に置き換えてください。 -
<project_id0>、<project_id1>、および<project_idn>までのすべてのプロジェクト ID を、ホストアグリゲートに割り当てる各プロジェクトの ID に置き換えてください。 <aggregate_name>をプロジェクト分離ホストアグリゲートの名前に置き換えてください。たとえば、プロジェクト
78f1、9d3t、およびaa29をホストアグリゲートproject-isolated-aggregateに割り当てるには、以下の構文を使用します。# openstack aggregate set \ --property filter_tenant_id0=78f1 \ --property filter_tenant_id1=9d3t \ --property filter_tenant_id2=aa29 \ project-isolated-aggregateヒントfilter_tenant_idメタデータキーの接尾辞を省略することで、単一の特定プロジェクトでのみ利用可能なホストアグリゲートを作成することができます。# openstack aggregate set \ --property filter_tenant_id=78f1 \ single-project-isolated-aggregate
-
openstackclient Pod を終了します。
$ exit
関連情報
第8章 統合制限の設定 リンクのコピーリンクがクリップボードにコピーされました!
統合制限は、クォータ制限が Identity (keystone) サービスに保存される最新のクォータシステムです。クォータとは、運用上の制限です。たとえば、クラウドリソースが最適化されるように、プロジェクトごとに許可されるサーバーの数を制御できます。クォータは、デフォルトレベルであるグローバルレベルと、プロジェクトレベルの両方で適用できます。クォータの適用には 3 つの手順があります。
- クォータ制限は、Identity サービスの統合制限 API を呼び出すことで取得されます。
- クォータ使用量は Placement API サービスからカウントされます。
-
クォータは、
oslo.limit制限適用ライブラリーを使用してローカルに適用されます。
統合制限では、以下の用語が従来のクォータ制限と異なります。
- 登録制限: すべてのプロジェクトに適用されるデフォルトの制限
- 制限: 特定のプロジェクトに適用されるプロジェクトスコープの制限
統合制限を有効にするには、各セルに対して nova-api サービスと nova-conductor サービスを設定する必要があります。Identity サービスでクォータ制限を管理するには、クラウド Operator は OpenStackClient (OSC) に登録された制限と limit コマンドを使用する必要があります。
8.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- OpenShift (RHOSO) 18.0 に Red Hat OpenStack Services をインストールした。
-
cluster-admin権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。 -
ocおよびpodmanコマンドラインツールをワークステーションにインストールした。
8.2. 統合制限の有効化 リンクのコピーリンクがクリップボードにコピーされました!
統合制限を有効にするには、各セルに対して nova-api サービスと nova-conductor サービスを設定する必要があります。登録された制限を必須とするか無視するかを指定するリソースのリストを定義することもできます。
コンピュートホストにスケジュールされたことがない ERROR 状態のサーバーには配置割り当てがないため、コアと RAM のクォータ使用量を消費しません。
SHELVED_OFFLOADED 状態のサーバーには配置割り当てがないため、コアと RAM のクォータ使用量を消費しません。そのため、サーバーの復元に必要なコアと RAM をサポートできるだけの十分なクォータがユーザーにない場合、サーバーの復元要求が拒否される可能性があります。
統合制限を有効にすると、サーバーのサイズ変更中に、サイズ変更が完了するまでクォータ使用量が増加します。詳細は、https://bugs.launchpad.net/nova/+bug/1790204 を参照してください。
手順
per-project クォータのクォータ適用については、システムスコープの
readerロールを Compute サービスユーザーに追加します。$ oc exec openstackclient -- openstack role add --user nova --user-domain <service_domain_name> --system all reader-
<service_domain_name>をサービスドメイン名に置き換えます。
-
Compute サービスエンドポイント ID を取得します。
nova-apiおよびnova-conductorサービスを設定するには、この値が必要です。$ oc exec openstackclient -- openstack endpoint list --service nova -f value -c ID-
ワークステーションで
OpenStackControlPlaneカスタムリソース (CR) ファイルopenstack_control_plane.yamlを開きます。 openstack_control_plane.yamlでnova-apiおよびnova-conductorサービスを設定します。driverパラメーターをnova.quota.UnifiedLimitsDriverに設定します。前の手順で取得した Compute サービスのendpoint_idを、各セルのapiServiceTemplate.customServiceConfigとconductorServiceTemplate.customServiceConfigに定義する必要があります。簡単な例:
apiVersion: core.openstack.org/v1beta1 kind: OpenStackControlPlane spec: nova: template: apiServiceTemplate: customServiceConfig: | [quota] driver = nova.quota.UnifiedLimitsDriver [oslo_limit] endpoint_id = <service_endpoint_id> cellTemplates: cell0: conductorServiceTemplate: customServiceConfig: | [quota] driver = nova.quota.UnifiedLimitsDriver [oslo_limit] endpoint_id = <service_endpoint_id> cell1: conductorServiceTemplate: customServiceConfig: | [quota] driver = nova.quota.UnifiedLimitsDriver [oslo_limit] endpoint_id = <service_endpoint_id><service_endpoint_id>を、前の手順で取得した Compute サービスエンドポイント ID に置き換えます。注記セルを追加する場合は、新しいセルにも統合制限を設定する必要があります。新しいセルを追加するには、Red Hat OpenStack Services on OpenShift デプロイメントのカスタマイズ ガイドの コントロールプレーンへのコンピュートセルの追加 を参照してください。
オプション:
unified_limits_resource_listパラメーターを設定することで、[quota]統合制限リソースストラテジーとして、登録済みの制限を無視 (ignore) するか要求 (require) するかを設定します。デフォルトのストラテジーはrequireであり、デフォルトのリソースリストにはserversが含まれます。リソースストラテジーが
requireの設定例:apiVersion: core.openstack.org/v1beta1 kind: OpenStackControlPlane spec: nova: template: apiServiceTemplate: customServiceConfig: | [quota] driver = nova.quota.UnifiedLimitsDriver unified_limits_resource_strategy = require # Do not allow allocation of a resource in this list unless it has # a limit set in Keystone. unified_limits_resource_list = servers,class:VCPU,class:MEMORY_MB,class:DISK_GB [oslo_limit] endpoint_id = <service_endpoint_id> cellTemplates: cell0: conductorServiceTemplate: customServiceConfig: | [quota] driver = nova.quota.UnifiedLimitsDriver unified_limits_resource_strategy = require # Do not allow allocation of a resource in this list unless it has # a limit set in Keystone. unified_limits_resource_list = servers,class:VCPU,class:MEMORY_MB,class:DISK_GB [oslo_limit] endpoint_id = <service_endpoint_id> cell1: conductorServiceTemplate: customServiceConfig: | [quota] driver = nova.quota.UnifiedLimitsDriver unified_limits_resource_strategy = require # Do not allow allocation of a resource in this list unless it has # a limit set in Keystone. unified_limits_resource_list = servers,class:VCPU,class:MEMORY_MB,class:DISK_GB [oslo_limit] endpoint_id = <service_endpoint_id>リソースストラテジーが
ignoreの設定例:apiVersion: core.openstack.org/v1beta1 kind: OpenStackControlPlane spec: nova: template: apiServiceTemplate: customServiceConfig: | [quota] driver = nova.quota.UnifiedLimitsDriver unified_limits_resource_strategy = ignore # Allow unlimited allocation of a resource in this list unless it # has a limit set in Keystone. unified_limits_resource_list = servers,class:VCPU,class:MEMORY_MB,class:DISK_GB [oslo_limit] endpoint_id = <service_endpoint_id> cellTemplates: cell0: conductorServiceTemplate: customServiceConfig: | [quota] driver = nova.quota.UnifiedLimitsDriver unified_limits_resource_strategy = ignore # Allow unlimited allocation of a resource in this list unless it # has a limit set in Keystone. unified_limits_resource_list = servers,class:VCPU,class:MEMORY_MB,class:DISK_GB [oslo_limit] endpoint_id = <service_endpoint_id> cell1: conductorServiceTemplate: customServiceConfig: | [quota] driver = nova.quota.UnifiedLimitsDriver unified_limits_resource_strategy = ignore # Allow unlimited allocation of a resource in this list unless it # has a limit set in Keystone. unified_limits_resource_list = servers,class:VCPU,class:MEMORY_MB,class:DISK_GB [oslo_limit] endpoint_id = <service_endpoint_id>コントロールプレーンを更新します。
$ oc apply -f openstack_control_plane.yaml -n openstackRed Hat OpenShift Container Platform (RHOCP) が
OpenStackControlPlaneCR に関連するリソースを作成するまで待機します。次のコマンドを実行して、ステータスを確認します。$ oc get openstackcontrolplane -n openstackステータスが
Setup completeであれば、OpenStackControlPlaneリソースが作成されています。ヒントデプロイの進行状況を追跡するには、
getコマンドの末尾に-wオプションを追加します。-
オプション: 作成した各セルの
openstacknamespace 内の Pod を確認して、コントロールプレーンがデプロイされていることを確認します。すべての Pod が完了または実行中の状態であれば、コントロールプレーンがデプロイされています。
関連情報
8.3. クォータ制限の移行 リンクのコピーリンクがクリップボードにコピーされました!
nova-manage limits migrate_to_unified_limits CLI コマンドを使用して、従来のクォータ制限を Nova データベースから Identity (keystone) サービスの統合制限に移行できます。
手順
nova コンダクター Pod で、移行コマンドを 1 回実行してデフォルトの制限を移行し、欠落している制限を検出します。
$ oc exec nova-cell0-conductor-0 -- nova-manage limits migrate_to_unified_limitsIdentity サービスで制限が設定されていないリソースを示すテーブルが出力されます。
オプション: nova コンダクター Pod では、プロジェクトごとに移行コマンドを 1 回実行して、per-project 制限を移行できます。
$ oc exec nova-cell0-conductor-0 -- nova-manage limits migrate_to_unified_limits --no-embedded-flavor-scan --quiet --project-id <project_id>-
<project_id>をプロジェクトの ID 番号に置き換えます。
-
残りのリソースに対して、デフォルトの登録済み制限と per-project 制限を手動で作成します。無制限を示すには、制限を -1 に設定します。
デフォルトの制限を設定します。
$ oc exec openstackclient -- openstack registered limit create --service nova --default-limit <limit> <resource>-
<limit>を制限値に置き換えます。 -
<resource>をリソースの名前に置き換えます。
-
プロジェクトの制限を設定します。
$ oc exec openstackclient -- openstack limit create --service nova --project <project_id> --resource-limit <limit> <resource>クォータリソース名の形式は次のとおりです。
Expand $RESOURCE 説明 class:VCPU
プロジェクトごとに許可される共有 CPU コア (VCPU) の数
class:PCPU
プロジェクトごとに許可される専用 CPU コア (PCPU) の数
servers
プロジェクトごとに許可されるインスタンスの数
server_key_pairs
ユーザーごとに許可されるキーペアの数
server_metadata_items
インスタンスごとに許可されるメタデータ項目の数
class:MEMORY_GB
プロジェクトごとに許可されるインスタンス RAM のメガバイト数
server_groups
プロジェクトごとのサーバーグループ数
server_group_members
サーバーグループごとのサーバー数
class:DISK_GB
プロジェクトごとに許可されるインスタンスディスクのギガバイト数
class:<resource_class>
Placement API サービスの任意のリソースクラスに指定できるクォータ制限 (例: class:VGPU)
第9章 PCI パススルーの設定 リンクのコピーリンクがクリップボードにコピーされました!
PCI パススルーを使用して、グラフィックカードまたはネットワークデバイス等の物理 PCI デバイスをインスタンスにアタッチすることができます。デバイスに PCI パススルーを使用する場合、インスタンスはタスクを実行するためにデバイスへの排他的アクセスを確保し、ホストはデバイスを利用することができません。
Compute サービス (nova) は、複数のプロバイダーネットワークにまたがる単一のネットワークをサポートしません。ネットワークに複数の物理ネットワークが含まれる場合、Compute サービスは最初の物理ネットワークだけを使用します。したがって、ルーティング対応プロバイダーネットワークを使用する場合は、すべてのコンピュートノードで同じ physical_network 名を使用する必要があります。
VLAN またはフラットネットワークのルーティング対応プロバイダーネットワークを使用する場合は、すべてのセグメントで同じ physical_network 名を使用する必要があります。その後、ネットワークに複数のセグメントを作成し、そのセグメントを適切なサブネットにマッピングします。
クラウドユーザーが PCI デバイスが接続されたインスタンスを作成できるようにするには、次のタスクを完了する必要があります。
- PCI パススルーに使用するコンピュートノードを指定します。
- 必要な PCI デバイスを持つ PCI パススルー用のコンピュートノードを設定する。
- データプレーンをデプロイします。
- PCI デバイスがアタッチされたインスタンスを起動するためのフレーバーを作成する。
9.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- 必要な PCI デバイスを持つコンピュートノード
-
ocコマンドラインツールがワークステーションにインストールされている。 -
cluster-admin権限を持つユーザーとして、Red Hat OpenStack Services on OpenShift (RHOSO) にログインしている。
9.2. PCI パススルーデバイス種別フィールド リンクのコピーリンクがクリップボードにコピーされました!
Compute サービス (nova) は、デバイスが報告する機能に応じて、PCI デバイスを 3 つのタイプのいずれかに分類します。
PCI デバイスの device_type フィールドを次のいずれかの値に設定できます。
- type-PF
- デバイスは、SR-IOV をサポートする親またはルートデバイスです。SR-IOV を完全にサポートするデバイスをパススルーするには、このデバイス種別を指定します。
- type-VF
- デバイスは、SR-IOV をサポートするデバイスの子デバイスです。
- type-PCI
-
デバイスは SR-IOV をサポートしません。
device_typeフィールドが設定されていない場合は、これがデフォルトのデバイス種別です。
コンピュートノード上の device_spec 設定とコントロールプレーン上の Compute サービスの alias 設定では、同じデバイスを参照するときに同じ device_type を使用する必要があります。
9.3. Nova PCI パススルーの設定に関するガイドライン リンクのコピーリンクがクリップボードにコピーされました!
-
NIC のデバイス名は変更される可能性があるため、PCI パススルーを設定する場合は
devnameパラメーターを使用しないでください。代わりに、より安定しているvendor_idとproduct_idを使用するか、NIC の PCI デバイスアドレスを使用します。 -
特定の Physical Function (PF) をパススルーするには、
addressパラメーターまたはproduct_idを使用します。同じproduct_idの PF が複数ある場合、フレーバーで同じproduct_idを持つエイリアスが要求されると、Compute サービスはそれらのデバイスのいずれかを使用します。addressパラメーターは常に一意です。 -
すべての Virtual Functions (VF) をパススルーするには、PCI パススルーに使用する VF の
product_idおよびvendor_idのみを指定します。NIC パーティショニングに SRIOV を使用しており、VF 上で OVS を実行している場合は、VF のアドレスも指定する必要があります。 PF 自体ではなく PF の VF のみをパススルーするには、address パラメーターを使用して PF の PCI アドレスを指定し、
product_idを使用して VF の製品 ID を指定します。- PCI デバイスアドレスパラメーターの設定
-
addressパラメーターは、デバイスの PCI アドレスを指定します。文字列またはdictマッピングを使用して、addressパラメーターの値を設定できます。 - 文字列形式
文字列を使用してアドレスを指定する場合は、以下の例のようにワイルドカード (*) を含めることができます。
alias = {"name": "a1", "address": "*:0a:00.*", "physical_network": "physnet1"}- ディクショナリー形式
ディクショナリー形式を使用してアドレスを指定する場合は、以下の例のように正規表現構文を含めることができます。
[pci] device_spec = {"address":{"domain": ".*", "bus": "02", "slot": "01", "function": "[0-2]"}, physical_network: "net1"}Compute サービスでは、address フィールドの設定が次の最大値に制限されます。
Expand Address フィールド
最大値
domain
0xFFFF
bus
0xFF
slot
0x1F
function
0x7
Compute サービスは、16 ビットアドレスドメインを持つ PCI デバイスをサポートします。Compute サービスは、アドレスドメインが 32 ビットの PCI デバイスを無視します。
オプションで、numa_policy を設定に追加することで、PCI パススルーデバイスのデフォルトの NUMA アフィニティーポリシーを指定できます。以下に例を示します。
alias = {"name":"a1", "product_id":"1572", "vendor_id": "8086", "device_type": "type-PF", "numa_policy": "preferred"}
numa_policy には 4 つの値のいずれかを選択できます。
| 値 | 説明 |
|---|---|
|
| インスタンスの NUMA ノードの少なくとも 1 つが PCI デバイスとのアフィニティーを持つ場合に限り、Compute サービスは PCI デバイスを要求するインスタンスを作成します。このオプションは、最高のパフォーマンスを提供します。 |
|
| Compute サービスは、NUMA アフィニティーに基づきベストエフォートで PCI デバイスの選択を試みます。これができない場合には、Compute サービスは PCI デバイスとのアフィニティーを持たない NUMA ノード上でインスタンスをスケジュールします。 |
|
| (デフォルト) 以下のどちらかのケースで、Compute サービスは PCI デバイスを要求するインスタンスを作成します。
|
|
| Compute サービスは、インスタンスの NUMA ノードの少なくとも 1 つが PCI デバイスと同じホストソケット内の NUMA ノードとアフィニティーを持っている場合にのみ、PCI デバイスを要求するインスタンスを作成します。たとえば、次のホストアーキテクチャーには 2 つのソケットがあります。各ソケットには 2 つの NUMA ノードがあり、PCI デバイスはソケットの 1 つのノードの 1 つに接続されています。 + image::../_images/NUMA_node_socket.png[PCI デバイスと同じホストソケット内の NUMA ノードとの NUMA ノードアフィニティー]
Compute サービスは、2 つの NUMA ノードと
インスタンスをピニングできないホストノードの唯一の組み合わせはノード 2 とノード 3 です。これらのノードはいずれも PCI デバイスと同じソケット上にないためです。他のノードが他のインスタンスによって使用されており、ノード 2 と 3 のみが使用可能な場合、インスタンスは起動しません。 |
9.4. PCI パススルーのコントロールプレーンの更新 リンクのコピーリンクがクリップボードにコピーされました!
クラウドユーザーが PCI デバイスが接続されたインスタンスを作成できるようにするには、まずコントロールプレーンを設定します。alias フィールドに、パススルーする正しい製品 ID、ベンダー ID、デバイスタイプを設定します。
前提条件
-
PCI パススルーを設定できるノードを定義する
OpenStackDataPlaneNodeSetCR を選択した。OpenStackDataPlaneNodeSetCR 作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイ ガイドの 事前プロビジョニングされたノードを使用した OpenStackDataPlaneNodeSet CR の作成 を参照してください。 PCIPassthroughFilterおよびNUMATopologyFilterフィルターが有効になっている。これらのフィルターはデフォルトで有効になっています。OpenStackControlPlaneCR をチェックすることで、変更されたかどうかを確認できます。oc exec nova-scheduler-0 -- grep "enabled_filters" /etc/nova/nova.conf.d/ -R
手順
-
ワークステーションで
OpenStackControlPlaneカスタムリソース (CR) ファイルopenstack_control_plane.yamlを開きます。 novaテンプレートにcustomServiceConfigフィールドを追加して、コンピュートノード上の PCI デバイスの PCI エイリアスを指定します。apiVersion: core.openstack.org/v1beta1 kind: OpenStackControlPlane spec: nova: apiOverride: route: {} template: secret: osp-secret apiServiceTemplate: replicas: 3 customServiceConfig: | [pci] alias = {"name":"a1", "product_id":"<prod_id>", "vendor_id": "<vendor_id>", "device_type": "<device_type>"}-
<prod_id>を PCI デバイスの製品 ID (例:1572) に置き換えます。 -
<vendor_id>を PCI デバイスのベンダー ID (例:8086) に置き換えます。 <device_type>を PCI デバイスのタイプ (例:type-PF) に置き換えます。注記PCI デバイスがインストールされているシステムで
lspci -nnコマンドを使用すると、製品 ID とベンダー ID を確認できます。device_typeフィールドの設定の詳細は、PCI パススルーデバイス種別フィールド を参照してください。
-
オプション: PCI パススルーデバイスのデフォルトの NUMA アフィニティーポリシーを設定するには、設定に
numa_policyを追加します。[pci] alias = {"name":"a1", "product_id":"<prod_id>", "vendor_id": "<vendor_id>", "device_type": "<device_type>", "numa_policy": "<pci_numa_policy>"}-
<prod_id>を PCI デバイスの製品 ID (例:1572) に置き換えます。 -
<vendor_id>を PCI デバイスのベンダー ID (例:8086) に置き換えます。 -
<device_type>を PCI デバイスのタイプ (例:type-PF) に置き換えます。 -
<pci_numa_policy>をrequired、socket、preferred、またはlegacyの値に置き換えます。詳細は、Nova PCI パススルーを設定するためのガイドライン を参照してください。
-
コントロールプレーンを更新します。
oc apply -f openstack_control_plane.yaml -n openstackRHOCP が
OpenStackControlPlaneCR に関連するリソースを作成するまで待機します。次のコマンドを実行して、ステータスを確認します。$ oc get openstackcontrolplane -n openstack出力例:
NAME STATUS MESSAGE openstack-control-plane Unknown Setup startedステータスが "Setup complete" であれば、
OpenStackControlPlaneリソースが作成されています。ヒントデプロイの進行状況を追跡するには、
getコマンドの末尾に-wオプションを追加します。オプション: 各セルの openstack namespace 内の Pod を確認して、コントロールプレーンがデプロイされていることを確認します。
$ oc get pods -n openstackすべての Pod が完了または実行中の状態であれば、コントロールプレーンがデプロイされています。
9.5. PCI パススルー用の OpenStackDataPlaneNodeSet CR の作成 リンクのコピーリンクがクリップボードにコピーされました!
クラウドユーザーが PCI デバイスが接続されたインスタンスを作成できるようにするには、PCI パススルーに使用する PCI デバイスを持つコンピュートノードをグループ化して設定する OpenStackDataPlaneNodeSet カスタムリソース (CR) を作成する必要があります。
この手順は、まだプロビジョニングされていない新しいデータプレーンノードに適用されます。すでにプロビジョニングされているデータプレーンノード上の PCI デバイスを設定または再設定するには、スケールダウン手順を使用してノードをプロビジョニング解除し、スケールアップ手順を使用して PCI デバイス設定でノードを再プロビジョニングする必要があります。詳細は、Red Hat OpenStack Services on OpenShift デプロイメントの保守 の データプレーンノードのスケーリング を参照してください。
ノードセット内のノードのサブセットは再設定できません。そうする必要がある場合は、ノードセットをスケールダウンし、以前に削除したノードから新しいノードセットを作成する必要があります。
前提条件
-
vGPU を設定できるノードを定義する
OpenStackDataPlaneNodeSetCR を選択した。OpenStackDataPlaneNodeSetCR 作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイ ガイドの 事前プロビジョニングされたノードを使用した OpenStackDataPlaneNodeSet CR の作成 を参照してください。
手順
インスタンスの移行およびサイズ変更の操作を行うために、コンピュートノードの PCI エイリアスのコピーを作成します。PCI パススルーコンピュートノード上のデバイスの PCI エイリアスを指定するには、
nova-extra-configという名前のConfigMapCR を作成または更新し、[pci] aliasパラメーターの値を設定します。apiVersion: v1 kind: ConfigMap metadata: name: nova-extra-config namespace: openstack data: 32-nova-pci-alias.conf: | [pci] alias = {"name":"a1", "product_id":"1572", "vendor_id": "8086", "device_type": "type-PF", "numa_policy": "preferred"}ConfigMapオブジェクトの作成の詳細は、ノード の config map の作成と使用 を参照してください。注記コンピュートノードのエイリアスは、コントローラーノードのエイリアスと同じでなければなりません。したがって、
OpenStackControlPlaneカスタムリソース (CR) ファイルopenstack_control_plane.yamlで apiServiceTemplate のcustomServiceConfigにnuma_affinityを追加した場合は、nova-extra-configの PCI エイリアスにもそれを追加する必要があります。aliasパラメーターの下で、device_specパラメーターを設定して、nova が PCI デバイスにアクセスできるようにします。alias = {"name":"a1", "product_id":"1572", "vendor_id": "8086", "device_type": "type-PF", "numa_policy": "preferred"} device_spec = {"vendor_id":"8086", "product_id":"1572", "address": "0000:06:"}注記GPU タイプに固有のベンダー ID を使用するようにしてください。
新しい
OpenStackDataPlaneDeploymentCR を作成して、データプレーンノード上のサービスを設定し、データプレーンをデプロイし、ワークステーション上のcompute_pci_alias_deploy.yamlという名前のファイルに保存します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: compute-pci-aliascompute_pci_alias_deploy.yamlCR で、デプロイするすべてのOpenStackDataPlaneNodeSetCR を含めるようにnodeSetsを指定します。前提条件として選択したOpenStackDataPlaneNodeSetCR が含まれていることを確認してください。OpenStackDataPlaneNodeSetCR は、設定するノードを定義します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: compute-pci-alias spec: nodeSets: - openstack-edpm - compute-pci-alias - ... - <nodeSet_name><nodeSet_name>は、データプレーンデプロイメントに含めるOpenStackDataPlaneNodeSetCR の名前に置き換えます。警告デプロイメントに複数のノードセットがある場合、ノードセットと
DataPlaneServicesがどのように設定されているかにより、nova-extra-config.yamlConfigMapへの変更が複数のノードセットに直接影響する可能性があります。ノードセットがnova-extra-configConfigMapを使用しているために再設定の影響を受けるかを確認するには、次の手順を実行します。-
ノードセットのサービスリストを確認し、nova を指す
DataPlaneServiceの名前を見つけます。 -
DataPlaneServiceのedpmServiceTypeフィールドの値がnovaに設定されていることを確認します。
DataPlaneServiceのdataSourcesリストにnova-extra-configという名前のconfigMapRefが含まれている場合、このノードセットはこのConfigMapを使用し、その結果このConfigMapに加えた設定変更の影響を受けます。影響を受けるノードセットの一部を再設定しない場合は、これらのノードセットの別のConfigMapを指す新しいDataPlaneServiceを作成する必要があります。-
ノードセットのサービスリストを確認し、nova を指す
-
compute_pci_alias_deploy.yamlデプロイメントファイルを保存します。 データプレーンをデプロイします。
$ oc create -f compute_pci_alias_deploy.yamlデータプレーンがデプロイされていることを確認します。
$ oc get openstackdataplanenodeset NAME STATUS MESSAGE compute-pci-alias True Deployedopenstackclientのリモートシェルにアクセスし、デプロイされたコンピュートノードがコントロールプレーンに表示されることを確認します。$ oc rsh -n openstack openstackclient $ openstack hypervisor list-
PCI パススルーをサポートするためにコンピュートノードのサーバー BIOS で IOMMU を有効にするには、更新するノードセットの
OpenStackDataPlaneNodeSetCR 定義ファイル (例:my_data_plane_node_set.yaml) を開きます。 必要な設定を追加するか、既存の設定を
my_data_plane_node_set.yamlに変更します。設定をansibleVarsの下に配置します。次の例では、Intel IOMMU を有効にします。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet metadata: name: my-data-plane-node-set spec: … nodeTemplate: … ansible: ansibleVars: edpm_kernel_args: "default_hugepagesz=1GB hugepagesz=1G hugepages=64 intel_iommu=on iommu=pt tsx=off isolcpus=2-11,14-23 vfio-pci.ids=<pci_device_id> rd.driver.pre=vfio-pci"<pci_device_id>は、使用している GPU の PCI デバイス ID (例:10de:1eb8) に置き換えます。GPU 固有のデバイス ID を使用するようにしてください。注記ロールの設定に KernelArgs パラメーターを初めて追加すると、コントロールプレーンノードが自動的に再起動されます。必要に応じて、ノードの自動再起動を無効にして、代わりに各デプロイメント後にノードの再起動を手動で実行できます。
-
OpenStackDataPlaneNodeSetCR 定義ファイルを保存します。 更新済みの
OpenStackDataPlaneNodeSetCR 設定を適用します。$ oc apply -f my_data_plane_node_set.yaml -n openstackデータプレーンリソースが更新されたことを確認します。
$ oc get openstackdataplanenodeset Sample output: NAME STATUS MESSAGE my-data-plane-node-set False Deployment not startedワークステーションに
OpenStackDataPlaneDeploymentCR を定義するファイル (例:my_data_plane_deploy.yaml) を作成します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: my-data-plane-deployヒント定義ファイルと
OpenStackDataPlaneDeploymentCR に、変更されたノードセットの目的を示す一意の説明的な名前を付けます。変更した
OpenStackDataPlaneNodeSetCR を追加します。spec: nodeSets: - my-data-plane-node-set-
OpenStackDataPlaneDeploymentCR デプロイメントファイルを保存します。 変更した
OpenStackDataPlaneNodeSetCR をデプロイします。$ oc create -f my_data_plane_deploy.yaml -n openstackデプロイメントの実行中に Ansible ログを表示できます。
$ oc get pod -l app=openstackansibleee -n openstack -w $ oc logs -l app=openstackansibleee -n openstack -f \ --max-log-requests 10変更された
OpenStackDataPlaneNodeSetCR がデプロイされていることを確認します。$ oc get openstackdataplanedeployment -n openstack Sample output NAME STATUS MESSAGE my-data-plane-node-set True Setup CompleteNodeSet Readyメッセージが表示されるまで、oc getコマンドを繰り返します。$ oc get openstackdataplanenodeset -n openstack Sample output: NAME STATUS MESSAGE my-data-plane-node-set True NodeSet Ready返されるステータスの意味の詳細は、Red Hat OpenStack Services on OpenShift のデプロイ の データプレーンの状態 を参照してください。
クラウドユーザーが PCI デバイスを要求するのに使用できるフレーバーを作成および設定します。次の例では、手順 7 で定義されたエイリアスを使用して、ベンダー ID が 8086、製品 ID が 1572 の 2 つのデバイスを要求します。
$ openstack --os-compute-api=2.86 flavor set \ --property "pci_passthrough:alias"="a1:2" device_passthrough(オプション) フレーバーまたはイメージに NUMA アフィニティーポリシーの属性キーを追加して、PCI パススルーデバイスのデフォルト NUMA アフィニティーポリシーをオーバーライドすることができます。
フレーバーを使用してデフォルトの NUMA アフィニティーポリシーをオーバーライドするには、
hw:pci_numa_affinity_policy属性キーを追加します。$ openstack --os-compute-api=2.86 flavor set \ --property "hw:pci_numa_affinity_policy"="required" \ Device_passthroughhw:pci_numa_affinity_policy の有効な値の詳細は、フレーバーメタデータ を参照してください。
イメージを使用してデフォルトの NUMA アフィニティーポリシーをオーバーライドするには、
hw_pci_numa_affinity_policy属性キーを追加します。$ openstack image set \ --property hw_pci_numa_affinity_policy=required \ device_passthrough_image注記イメージとフレーバーの両方で NUMA アフィニティーポリシーを設定する場合には、属性の値が一致している必要があります。フレーバーの設定は、イメージおよびデフォルトの設定よりも優先されます。したがって、イメージの NUMA アフィニティーポリシーの設定は、フレーバーで属性が設定されていない場合に限り効果を持ちます。
検証
PCI パススルーが機能していることを確認するには、OpenStack ユーザーに PCI デバイスが接続されたインスタンスを作成するように指示し、そのインスタンスに直接ログインして PCI デバイスにアクセスできることを確認する必要があります。以下の指示を提供できます。
PCI パススルーデバイスを設定してインスタンスを作成します。
$ openstack server create --flavor device_passthrough \ --image <image> --wait test-pci- クラウドユーザーとしてインスタンスにログインします。詳細は、インスタンスの作成と管理 の インスタンスへの接続 を参照してください。
インスタンスが PCI デバイスにアクセスできることを確認するには、インスタンスから以下のコマンドを入力します。
$ lspci -nn | grep <device_name>
9.6. One Time Use デバイスの設定 リンクのコピーリンクがクリップボードにコピーされました!
Compute サービス (nova) では、デバイスを One Time Use (OTU) としてマークし、単一インスタンスの 1 回限りの使用のために予約することがサポートされています。
前提条件
-
ワークステーションに
ocコマンドラインツールがインストール済みである。 -
cluster-admin権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。 -
One Time Use PCI デバイスとして設定するノードを定義する
OpenStackDataPlaneNodeSetCR を選択した。OpenStackDataPlaneNodeSetCR 作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイ ガイドの 事前プロビジョニングされたノードを使用した OpenStackDataPlaneNodeSet CR の作成 を参照してください。 - Placement サービスで PCI デバイストラッキングを設定した。詳細は、Placement サービスで PCI デバイストラッキングを有効にする を参照してください。
手順
-
nova-extra-config.yamlという名前のConfigMapカスタムリソース (CR) を作成または更新します。 one_time_useタグを追加して、OTU デバイスとしてタグ付けするデバイスのdevice_specを追加または編集します。以下は、このタグが追加された
device_specの例です。apiVersion: v1 kind: ConfigMap metadata: name: nova-extra-config namespace: openstack data: 32-nova-pci-alias.conf: | [pci] alias = {"name":"a1", "product_id":"1572", "vendor_id": "8086", "device_type": "type-PF", "numa_policy": "preferred"} device_spec = {"vendor_id":"8086", "product_id":"1572", "address": "0000:06:", "one_time_use": true}注記device_spec設定オプションは複数回定義することができ、Red Hat OpenStack Services on OpenShift (RHOSO) はこれらの定義をそれぞれ 1 つのdevice_spec値リストにマージします。つまり、device_spec値は、後続のdevice_spec定義で上書きできません。デバイスを OTU デバイスとして設定する場合、device_specを定義した元の設定ファイルでone_time_useタグを定義する必要があります。たとえば、PCI パススルー用の OpenStackDataPlaneNodeSet CR の作成 では、クラウドユーザーによる PCI デバイスが割り当てられたインスタンスの作成を可能にする方法が定義されています。通常、この段階でタグが
device_specに追加されます。ConfigMap オブジェクトの作成の詳細は、ノード の config map の作成と使用 を参照してください。
-
nova-extra-config.yamlファイルを保存します。 新しい
OpenStackDataPlaneDeploymentCR を作成して、データプレーンノード上のサービスを設定し、データプレーンをデプロイします。CR を、ワークステーション上のcompute_otu_devices_deploy.yamlという名前のファイルに保存します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: compute-otu-devicescompute_otu_devices_deploy.yamlで、デプロイするすべてのOpenStackDataPlaneNodeSetCR を含めるようにnodeSetsを指定します。前提条件として選択したOpenStackDataPlaneNodeSetCR が含まれていることを確認してください。このOpenStackDataPlaneNodeSetCR は、OTU デバイスとして設定するノードを定義します。警告ノードセット内のノードのサブセットは再設定できません。そうする必要がある場合は、ノードセットをスケールダウンし、以前に削除したノードから新しいノードセットを作成する必要があります。
警告デプロイメントに複数のノードセットがある場合、ノードセットと
DataPlaneServicesがどのように設定されているかにより、nova-extra-config.yamlConfigMap への変更が複数のノードセットに直接影響する可能性があります。ノードセットがnova-extra-configConfigMap を使用しているために再設定の影響を受けるかを確認するには、次の手順を実行します。-
ノードセットのサービスリストを確認し、
novaを指すDataPlaneServiceの名前を見つけます。DataPlaneServiceのedpmServiceTypeフィールドの値がnovaに設定されていることを確認します。 -
DataPlaneServiceのdataSourcesリストにnova-extra-configという名前のconfigMapRefが含まれている場合、このノードセットはこのConfigMapを使用し、その結果このConfigMapに加えた設定変更の影響を受けます。影響を受けるノードセットの一部を再設定しない場合は、これらのノードセットの別のConfigMapを指す新しいDataPlaneServiceを作成し、必要なノードセットでそのカスタムサービスを使用する必要があります。
apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: compute-otu-devices spec: nodeSets: - openstack-edpm - ... - <nodeSet_name>-
<nodeSet_name>は、データプレーンデプロイメントに含めるOpenStackDataPlaneNodeSetCR の名前に置き換えます。
-
ノードセットのサービスリストを確認し、
-
compute_otu_devices_deploy.yamlデプロイメントファイルを保存します。 データプレーンをデプロイします。
$ oc create -f compute_otu_devices_deploy.yamlデータプレーンがデプロイされていることを確認します。
$ oc get openstackdataplanenodeset NAME STATUS MESSAGE compute-otu-devices True Deployedopenstackclientのリモートシェルにアクセスし、デプロイされたコンピュートノードがコントロールプレーンに表示されることを確認します。$ oc rsh -n openstack openstackclient $ openstack hypervisor list
9.7. One Time Use デバイス予約の削除 リンクのコピーリンクがクリップボードにコピーされました!
One Time Use (OTU) 予約状態にあるデバイスは、予約状態がクリアされるまで別のインスタンスに割り当てることはできません。OTU デバイスとして予約されているデバイスには、HW_PCI_ONE_TIME_USE トレイトがあります。このトレイトは、予約状態を見つけてクリアするために使用されます。
前提条件
-
ワークステーションに
ocコマンドラインツールがインストール済みである。 -
cluster-admin権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。
手順
HW_PCI_ONE_TIME_USEトレイトを持つデバイスを特定します。$ openstack resource provider list --required HW_PCI_ONE_TIME_USE以下はこのコマンドの出力例です。
$ openstack resource provider list --required HW_PCI_ONE_TIME_USE +--------------------------------------+--------------------+------------+--------------------------------------+--------------------------------------+ | uuid | name | generation | root_provider_uuid | parent_provider_uuid | +--------------------------------------+--------------------+------------+--------------------------------------+--------------------------------------+ | b9e67d7d-43db-49c7-8ce8-803cad08e656 | compute-01:00:01.0 | 39 | 2ee402e8-c5c6-4586-9ac7-58e7594d27d1 | 2ee402e8-c5c6-4586-9ac7-58e7594d27d1 | +--------------------------------------+--------------------+------------+--------------------------------------+--------------------------------------+リスト内の各デバイスに対して、次のタスクを実行します。
reserved属性の値が1、used属性の値が0であることを確認します。$ openstack resource provider inventory list <device_uuid><device_uuid>は、デバイスの UUID に置き換えます。以下はこのコマンドの出力例です。
$ openstack resource provider inventory list b9e67d7d-43db-49c7-8ce8-803cad08e656 +----------------------+------------------+----------+----------+----------+-----------+-------+------+ | resource_class | allocation_ratio | min_unit | max_unit | reserved | step_size | total | used | +----------------------+------------------+----------+----------+----------+-----------+-------+------+ | CUSTOM_PCI_1B36_0100 | 1.0 | 1 | 1 | 1 | 1 | 1 | 0 | +----------------------+------------------+----------+----------+----------+-----------+-------+------+重要used属性の値が0でない場合は、デバイスの予約状態をクリアしないでください。
reserved属性の値を0に設定します。$ openstack resource provider inventory set --amend \ --resource <device_resource_class>:reserved=0 \ <device_uuid>-
<device_resource_class>は、デバイスのresource_classに置き換えます。 -
<device_uuid>は、デバイスの UUID に置き換えます。
-
第10章 Placement サービスで PCI デバイストラッキングを有効にする リンクのコピーリンクがクリップボードにコピーされました!
Placement サービスを使用して CPU、RAM、ディスクなどの基本的なリソースや、仮想 GPU (vGPU) などのより複雑なリソースを追跡できるだけでなく、Placement サービスを使用して次のタスクを実行できます。
- 汎用 PCI デバイスの可用性を追跡します。
- PCI デバイスを Placement サービスで予約します。そうすることで、Compute サービスで使用できるように設定されていても、Placement サービスでは使用できなくなります。デバイスを予約すると、デバイスの保守操作や設定を実行できる外部ツールでデバイスが使用できるようになります。
PCI デバイストラッキングを有効にしてから再度無効にすると、nova-compute サービスは起動しません。
Placement サービスで PCI トラッキングが有効になっている場合、複数のエイリアス仕様に関連付けられた繰り返しのエイリアス名を使用して pci.alias を設定することはできません。
この機能は、nova フレーバー経由で使用される PCI デバイスに対してのみサポートされます。neutron ポート経由での使用を目的としており、そのためにデバイス仕様に physical_network が定義された PCI デバイスは、サポート対象外ですが、この機能と組み合わせて使用できます。
10.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- PCI パススルーを有効にした。詳細は、PCI パススルーの設定 を参照してください。
10.2. ノードセットの PCI デバイストラッキングを設定する リンクのコピーリンクがクリップボードにコピーされました!
PCI パススルーを使用するすべてのノードセットで、PCI デバイストラッキングを設定する必要があります。
ノードセット全体のみ設定できます。ノードセット内のノードのサブセットを再設定することはサポートされていません。ノードセット内のノードのサブセットを再設定する必要がある場合は、ノードセットをスケールダウンし、以前に削除したノードから新しいノードセットを作成する必要があります。
前提条件
-
ワークステーションに
ocコマンドラインツールがインストール済みである。 -
cluster-admin権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。 -
PCI デバイストラッキングを有効にするノードを定義する
OpenStackDataPlaneNodeSetCR を選択した。OpenStackDataPlaneNodeSetCR の作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイガイドの データプレーンの作成 を参照してください。
手順
nova-extra-configという名前の ConfigMap CR を作成または更新し、[pci] report_in_placementパラメーターの値を設定します。apiVersion: v1 kind: ConfigMap metadata: name: nova-extra-config namespace: openstack data: 37-nova-pci-placement.conf: | [pci] report_in_placement = trueConfigMapオブジェクトの作成の詳細は、ノード の config map の作成と使用 を参照してください。新しい
OpenStackDataPlaneDeploymentCR を作成して、データプレーンノード上のサービスを設定し、データプレーンをデプロイし、ワークステーション上のcompute_pci_tracking_deploy.yamlという名前のファイルに保存します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: compute_pci_trackingOpenStackDataPlaneDeploymentCR の作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイ の データプレーンのデプロイ を参照してください。compute_pci_tracking_deploy.yamlで、デプロイするすべてのOpenStackDataPlaneNodeSetCR を含めるように nodeSets を指定します。前提条件として選択したOpenStackDataPlaneNodeSetCR が含まれていることを確認してください。このOpenStackDataPlaneNodeSetCR は、CPU ピニングに指定するノードを定義します。警告デプロイメントに複数のノードセットがある場合、ノードセットと
DataPlaneServicesがどのように設定されているかにより、nova-extra-config.yamlConfigMapへの変更が複数のノードセットに直接影響する可能性があります。ノードセットがnova-extra-configConfigMapを使用しているために再設定の影響を受けるかを確認するには、次の手順を実行します。-
ノードセットのサービスリストを確認し、nova を指す
DataPlaneServiceの名前を見つけます。 DataPlaneServiceのedpmServiceTypeフィールドの値がnovaに設定されていることを確認します。DataPlaneServiceの dataSources リストにnova-extra-configという名前の configMapRef が含まれている場合、このノードセットはこのConfigMapを使用し、その結果このConfigMapに加えた設定変更の影響を受けます。影響を受けるノードセットの一部を再設定しない場合は、これらのノードセットの別のConfigMapを指す新しい DataPlaneService を作成する必要があります。
apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: compute-pci_tracking spec: nodeSets: - openstack-edpm - compute-pci-alias - compute-pci_tracking - ... - <nodeSet_name>-
<nodeSet_name>は、データプレーンデプロイメントに含めるOpenStackDataPlaneNodeSetCR の名前に置き換えます。
-
ノードセットのサービスリストを確認し、nova を指す
-
compute_pci_tracking_deploy.yamlデプロイメントファイルを保存します。 データプレーンをデプロイします。
$ oc create -f compute_pci_tracking_deploy.yamlデータプレーンがデプロイされていることを確認します。
$ oc get openstackdataplanenodeset NAME STATUS MESSAGE compute-pci_tracking True Deployedopenstackclientのリモートシェルにアクセスし、デプロイされたコンピュートノードがコントロールプレーンに表示されることを確認します。$ oc rsh -n openstack openstackclient $ openstack resource provider list
10.3. コントロールプレーンで PCI デバイストラッキングを有効にする リンクのコピーリンクがクリップボードにコピーされました!
PCI デバイストラッキングを有効にするには、OpenStackControlPlane CR ファイル (openstack_control_plane.yaml) 内のサービス設定を更新し、その更新をコントロールプレーンに適用する必要があります。
前提条件
-
ocコマンドラインツールがワークステーションにインストールされている。 -
cluster-admin権限を持つユーザーとして、Red Hat OpenStack Services on OpenShift (RHOSO) にログインしている。
手順
ワークステーションで
OpenStackControlPlaneカスタムリソース (CR) ファイルopenstack_control_plane.yamlを開きます。. Add the following `[filter_scheduler] pci_in_placement` configuration to the `nova` service configuration: nova: template: apiServiceTemplate: customServiceConfig: | [filter_scheduler] pci_in_placement = true cellTemplates: cell0: conductorServiceTemplate: customServiceConfig: | [filter_scheduler] pci_in_placement = true cell1: conductorServiceTemplate: customServiceConfig: | [filter_scheduler] pci_in_placement = true schedulerServiceTemplate: customServiceConfig: | [filter_scheduler] pci_in_placement = true注記複数のセルが存在する場合は、各セルに
[filter_scheduler] pci_in_placement設定を適用する必要があります。コントロールプレーンを更新します。
$ oc apply -f openstack_control_plane.yaml -n openstackRHOCP が
OpenStackControlPlaneCR に関連するリソースを作成するまで待機します。次のコマンドを実行して、ステータスを確認します。$ oc get openstackcontrolplane -n openstackステータスが "Setup complete" であれば、
OpenStackControlPlaneリソースが作成されています。ヒントデプロイの進行状況を追跡するには、get コマンドの末尾に
-wオプションを追加します。オプション: 各セルの openstack namespace 内の Pod を確認して、コントロールプレーンがデプロイされていることを確認します。
$ oc get pods -n openstackすべての Pod が完了または実行中の状態であれば、コントロールプレーンがデプロイされています。
10.4. Placement サービスで PCI デバイスを予約する リンクのコピーリンクがクリップボードにコピーされました!
PCI デバイスを Compute スケジューラーサービスから削除するには、デバイスを見つけ、openstack コマンドを使用して Placement サービスでデバイスを予約することで、Compute スケジューラーサービスから削除する必要があります。予約されている間、Compute サービス (nova) は仮想マシンにデバイスを使用できません。デバイスを削除は、デバイスの修理やメンテナンスの実行など、さまざまな理由で必要になります。メンテナンス後は、逆の操作を実行してデバイスの予約を解除できます。
前提条件
- Placement で PCI トラッキングを有効にした。詳細は、Placement サービスで PCI デバイストラッキングを有効にする を参照してください。
手順
特定のデバイス (たとえば、compute1 上の PCI アドレス 0000:09:00.0 のデバイス) を予約するには、コマンドでデバイスリソースプロバイダー (RP) を使用して、デバイスの UUID を取得する必要があります。デバイス RP は、コンピュートノードのホスト名と GPU の PCI アドレスを組み合わせたものです (例:
compute1_0000:09:00.0)。$ openstack resource provider list --name compute1_0000:09:00.0 +--------------------------------------+-----------------------+------------+--------------------------------------+--------------------------------------+ | uuid | name | generation | root_provider_uuid | parent_provider_uuid | +--------------------------------------+-----------------------+------------+--------------------------------------+--------------------------------------+ | d3d0f3d7-8376-487f-8849-e43027c31582 | compute1_0000:09:00.0 | 2 | e909b54b-4cea-49f9-bfcb-17c833db51d1 | e909b54b-4cea-49f9-bfcb-17c833db51d1 | +--------------------------------------+-----------------------+------------+--------------------------------------+--------------------------------------+デバイスの
uuidを使用して、RP の現在のインベントリーを確認します。この例の UUID はd3d0f3d7-8376-487f-8849-e43027c31582です。$ openstack resource provider inventory list d3d0f3d7-8376-487f-8849-e43027c31582 +----------------------+------------------+----------+----------+----------+-----------+-------+------+ | resource_class | allocation_ratio | min_unit | max_unit | reserved | step_size | total | used | +----------------------+------------------+----------+----------+----------+-----------+-------+------+ | CUSTOM_PCI_8086_10C9 | 1.0 | 1 | 1 | 0 | 1 | 1 | 0 | +----------------------+------------------+----------+----------+----------+-----------+-------+------+注記デバイスを予約すると、Compute スケジューラーサービスは以降のスケジュールでそのデバイスを使用できなくなります。ただし、引き続きデバイスは既存の仮想マシンによって使用される場合があります。インベントリーリスト出力の
used列の値が 0 に設定されている場合、デバイスは既存の仮想マシンによって使用されていません。デバイスを予約するには、
reservedの値を 1 に設定します。openstack resource provider inventory set d3d0f3d7-8376-487f-8849-e43027c31582 --amend --resource CUSTOM_PCI_8086_10C9:reserved=1 +----------------------+------------------+----------+----------+----------+-----------+-------+ | resource_class | allocation_ratio | min_unit | max_unit | reserved | step_size | total | +----------------------+------------------+----------+----------+----------+-----------+-------+ | CUSTOM_PCI_8086_10C9 | 1.0 | 1 | 1 | 1 | 1 | 1 | +----------------------+------------------+----------+----------+----------+-----------+-------+デバイスの予約を解除し、Compute スケジューラーサービスで再度使用できるようにするには、
reservedの値を 0 に設定します。openstack resource provider inventory set d3d0f3d7-8376-487f-8849-e43027c31582 --amend --resource CUSTOM_PCI_8086_10C9:reserved=0 +----------------------+------------------+----------+----------+----------+-----------+-------+ | resource_class | allocation_ratio | min_unit | max_unit | reserved | step_size | total | +----------------------+------------------+----------+----------+----------+-----------+-------+ | CUSTOM_PCI_8086_10C9 | 1.0 | 1 | 1 | 0 | 1 | 1 | +----------------------+------------------+----------+----------+----------+-----------+-------+
第11章 インスタンス用の仮想 GPU の設定 リンクのコピーリンクがクリップボードにコピーされました!
インスタンスで GPU ベースのレンダリングをサポートするには、利用可能な物理 GPU デバイスおよびハイパーバイザーの種別に応じて、仮想 GPU (vGPU) リソースを定義し、管理できます。この設定を使用すると、すべての物理 GPU デバイス間でレンダリングワークロードを効果的に分散し、vGPU 対応インスタンスのスケジューリングを制御できます。
Compute サービス (nova) で vGPU を有効にするには、次のタスクを実行します。
- vGPU を設定するノードを特定します。
- 各コンピュートノード上の各物理 GPU の PCI アドレスを取得します。GPU が SR-IOV をサポートしている場合は、各 SR-IOV Virtual Function (VF) の PCI アドレスを取得します。
- 各コンピュートノードで GPU プロファイルを設定します。
設定されたコンピュートノードでホストされる各インスタンスは、物理 GPU デバイスに対応する仮想 GPU デバイスを使用して GPU ワークロードをサポートできます。
Compute サービス (nova) は、各ホストに定義する GPU プロファイルで利用可能な仮想 GPU デバイスの数を追跡します。Compute サービスは、これらのホストにインスタンスをスケジュールし、デバイスを接続し、仮想 GPU の使用状況を監視します。インスタンスが削除されると、Compute サービスは仮想 GPU デバイスを利用可能なプールに戻します。
Red Hat は、サポート例外を必要としない RHOSO で NVIDIA vGPU の使用を有効化します。ただし、Red Hat は、NVIDIA 仮想 GPU ドライバーのテクニカルサポートを提供しません。NVIDIA 仮想 GPU ドライバーは、NVIDIA により提供され、サポートされます。NVIDIA 仮想 GPU ソフトウェアの NVIDIA Enterprise サポートを取得するには、NVIDIA 認定サポートサービスサブスクリプションが必要です。サポートされるコンポーネントで問題を再現できない NVIDIA 仮想 GPU の使用から生じる問題には、以下のサポートポリシーが適用されます。
- サードパーティーコンポーネントが問題に関与していないと Red Hat が考える場合は、通常の サポート対象範囲 および Red Hat SLA が適用されます。
- サードパーティーコンポーネントが問題に関与していると Red Hat が考える場合は、お客様は Red Hat の サードパーティーサポートおよび認定ポリシー に従って NVIDIA に問い合わせを依頼されます。詳細は、ナレッジベースの記事 Obtaining Support from NVIDIA を参照してください。
11.1. vGPU デバイスでサポートされている設定と制限 リンクのコピーリンクがクリップボードにコピーされました!
- サポートされる GPU カード
- サポートされる NVIDIA GPU カードのリストは、NVIDIA の Web サイトで Virtual GPU Software Supported Products を参照してください。
- 仮想 GPU デバイスを使用する際の制限
- 各インスタンスが使用できる仮想 GPU のリソースは 1 つだけです。
- ホスト間の vGPU インスタンスのライブマイグレーションはサポートされていません。
- vGPU インスタンスの退避はサポートされていません。
仮想 GPU インスタンスをホストするコンピュートノードをリブートする必要がある場合、仮想 GPU は自動的に再作成されたインスタンスに再割り当てされません。コンピュートノードをリブートする前にインスタンスのコールドマイグレーションを行うか、リブート後に各仮想 GPU を正しいインスタンスに手動で割り当てる必要があります。各仮想 GPU を手動で割り当てるには、リブートする前にコンピュートノードで実行される各仮想 GPU インスタンスのインスタンス XML から
mdevUUID を取得する必要があります。以下のコマンドを使用して、各インスタンスのmdevUUID を検出することができます。# virsh dumpxml <instance_name> | grep mdev<instance_name>を、Compute API への/serversリクエストで返される libvirt インスタンス名 (OS-EXT-SRV-ATTR:instance_name) に置き換えます。- デフォルトでは、コンピュートホストの仮想 GPU の種別は API ユーザーに公開されません。コンピューティングホスト上の vGPU タイプを API ユーザーに公開するには、リソースプロバイダーの特性を設定し、その特性を必要とするフレーバーを作成する必要があります。また、vGPU タイプが 1 つしかない場合は、ホストをホストアグリゲートに追加することでアクセスを許可できます。詳細は、Creating and managing host aggregates を参照してください。
- NVIDIA アクセラレーターハードウェアを使用する場合は、NVIDIA ライセンス要件に従う必要があります。たとえば、NVIDIA vGPU GRID にはライセンスサーバーが必要です。NVIDIA のライセンス要件の詳細は、NVIDIA の Web サイトで NVIDIA License Server Release Notes を参照してください。
11.2. vGPU 用の Compute サービスを設定する準備 リンクのコピーリンクがクリップボードにコピーされました!
vGPU 用に Compute サービスを設定する前に、vGPU に使用するデータプレーンノードを準備し、NVIDIA デバイスドライバーをダウンロードしてインストールする必要があります。
手順
openstackclientのリモートシェルにアクセスします。$ oc rsh openstackclientvGPU に使用するノードを特定します。
vGPU に使用するコンピュートノードの IP アドレスを取得します。
$ openstack hypervisor listSSH を使用してデータプレーンノードに接続します。
$ ssh <node_ipaddress>-
/etc/modprobe.d/blacklist-nouveau.confファイルを作成します。 blacklist-nouveau.confに次の設定を追加して、nouveau ドライバーを無効にします。blacklist nouveau options nouveau modeset=0initramfsを再生成します。$ dracut --force $ grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline- NVIDIA ポータルから NVIDIA ドライバーをダウンロードしてインストールします。詳細は、NVIDIA DOCS HUB を参照してください。
ノードをリブートします。
$ sudo reboot
- vGPU インスタンスに割り当てるすべてのノードに対してこの手順を繰り返します。
11.3. vGPU 用の Compute サービスの設定 リンクのコピーリンクがクリップボードにコピーされました!
環境内の物理 GPU デバイスに対応する vGPU タイプを取得して割り当て、vGPU タイプを設定する必要があります。
ノードセット全体のみ設定できます。ノードセット内のノードのサブセットを再設定することはサポートされていません。ノードセット内のノードのサブセットを再設定する必要がある場合は、ノードセットをスケールダウンし、以前に削除したノードから新しいノードセットを作成する必要があります。
前提条件
-
ocコマンドラインツールがワークステーションにインストールされている。 -
cluster-admin権限を持つユーザーとして、Red Hat OpenStack Services on OpenShift (RHOSO) にログインしている。 -
vGPU を設定できるノードを定義する
OpenStackDataPlaneNodeSetCR を選択した。OpenStackDataPlaneNodeSetCR 作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイ ガイドの 事前プロビジョニングされたノードを使用した OpenStackDataPlaneNodeSet CR の作成 を参照してください。
手順
仮想 GPU は仲介デバイスです。各コンピュートノード上で仲介デバイスを作成できる各デバイスの PCI アドレスを取得します。
$ ls /sys/class/mdev_bus/注記GPU の PCI アドレス (または vGPU を作成できる GPU SR-IOV Virtual Function (VF)) が、デバイスドライバーディレクトリー名として使用されます (例: 0000:84:00.0)。この手順では、vGPU 対応リソースは mdev デバイスと呼ばれます。
注記最近の世代の NVIDIA カードでは SR-IOV がサポートされるようになりました。GPU が SR-IOV に対応しているか確認するには、NVIDIA のドキュメントを参照してください。
各コンピュートノードで利用可能な各 pGPU デバイスでサポートされている mdev タイプを確認して、利用可能な vGPU タイプを見つけます。
$ ls /sys/class/mdev_bus/<mdev_device>/mdev_supported_types<mdev_device> を mdev デバイスの PCI アドレス (例: 0000:84:00.0) に置き換えます。たとえば、次のコンピュートノードには 4 つの pGPU があり、各 pGPU は 11 個の同じ vGPU タイプをサポートしています。
[root@computegpu-0 ~]# ls /sys/class/mdev_bus/0000:84:00.0/mdev_supported_types: NVIDIA-35 NVIDIA-36 NVIDIA-37 NVIDIA-38 NVIDIA-39 NVIDIA-40 NVIDIA-41 NVIDIA-42 NVIDIA-43 NVIDIA-44 NVIDIA-45 [root@computegpu-0 ~]# ls /sys/class/mdev_bus/0000:85:00.0/mdev_supported_types: NVIDIA-35 NVIDIA-36 NVIDIA-37 NVIDIA-38 NVIDIA-39 NVIDIA-40 NVIDIA-41 NVIDIA-42 NVIDIA-43 NVIDIA-44 NVIDIA-45 [root@computegpu-0 ~]# ls /sys/class/mdev_bus/0000:86:00.0/mdev_supported_types: NVIDIA-35 NVIDIA-36 NVIDIA-37 NVIDIA-38 NVIDIA-39 NVIDIA-40 NVIDIA-41 NVIDIA-42 NVIDIA-43 NVIDIA-44 NVIDIA-45 [root@computegpu-0 ~]# ls /sys/class/mdev_bus/0000:87:00.0/mdev_supported_types: NVIDIA-35 NVIDIA-36 NVIDIA-37 NVIDIA-38 NVIDIA-39 NVIDIA-40 NVIDIA-41 NVIDIA-42 NVIDIA-43 NVIDIA-44 NVIDIA-45
nova-extra-config.yamlという名前のConfigMapCR を作成または更新し、[devices]の下にあるパラメーターの値を設定します。apiVersion: v1 kind: ConfigMap metadata: name: nova-extra-config namespace: openstack data: 34-nova-vgpu.conf: | [devices] enabled_mdev_types = nvidia-35, nvidia-36ConfigMapオブジェクトの作成の詳細は、config map の作成と使用 を参照してください。オプション: 複数の vGPU タイプを設定するには、サポートされる vGPU タイプを pGPU にマップします。
[devices] enabled_mdev_types = nvidia-35, nvidia-36 [mdev_nvidia-35] device_addresses = 0000:84:00.0,0000:85:00.0 [vgpu_nvidia-36] device_addresses = 0000:86:00.0nvidia-35 vGPU タイプは、PCI アドレス 0000:84:00.0 および 0000:85:00.0 にある pGPU によってサポートされます。nvidia-36 vGPU タイプは、PCI アドレス 0000:86:00.0 にある pGPU でのみサポートされます。
新しい
OpenStackDataPlaneDeploymentCR を作成して、データプレーンノード上のサービスを設定し、データプレーンをデプロイして、ワークステーション上のcompute_vgpu_deploy.yamlという名前のファイルに保存します。apiVersion: core.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: compute-vgpucompute_vgpu_deploy.yamlCR で、デプロイするすべてのOpenStackDataPlaneNodeSetCR を含めるようにnodeSetsを指定します。前提条件として選択したOpenStackDataPlaneNodeSetCR が含まれていることを確認してください。このOpenStackDataPlaneNodeSetCR は、vGPU に使用するノードを定義します。警告デプロイメントに複数のノードセットがある場合、ノードセットと
DataPlaneServicesがどのように設定されているかにより、nova-extra-config.yamlConfigMapへの変更が複数のノードセットに直接影響する可能性があります。ノードセットがnova-extra-configConfigMapを使用しているために再設定の影響を受けるかを確認するには、次の手順を実行します。-
ノードセットのサービスリストを確認し、nova を指す
DataPlaneServiceの名前を見つけます。 DataPlaneServiceのedpmServiceTypeフィールドの値がnovaに設定されていることを確認します。DataPlaneServiceのdataSourcesリストにnova-extra-configという名前のconfigMapRefが含まれている場合、このノードセットはこのConfigMapを使用し、その結果このConfigMapに加えた設定変更の影響を受けます。影響を受けるノードセットの一部を再設定しない場合は、これらのノードセットの別のConfigMapを指す新しいDataPlaneServiceを作成する必要があります。
apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: compute-vgpu spec: nodeSets: - openstack-edpm - compute-vgpu - ... - <nodeSet_name>-
<nodeSet_name>を、データプレーンデプロイメントに含める OpenStackDataPlaneNodeSet CR の名前に置き換えます。
-
ノードセットのサービスリストを確認し、nova を指す
-
compute_vgpu_deploy.yamlデプロイメントファイルを保存します。 データプレーンをデプロイします。
$ oc create -f compute_vgpu_deploy.yamlデータプレーンがデプロイされていることを確認します。
$ oc get openstackdataplanenodeset NAME STATUS MESSAGE compute-vgpu True Deployedヒントデプロイメントの進行状況を追跡するには、get コマンドの最後に -w オプションを追加します。
openstackclientのリモートシェルにアクセスし、デプロイされたコンピュートノードがコントロールプレーンに表示されることを確認します。$ oc rsh -n openstack openstackclient $ openstack hypervisor list- オプション: GPU の SR-IOV VF を有効にします。詳細は、NVIDIA DOCS HUB の Preparing virtual function for SRIOV vGPU を参照してください。
11.4. SR-IOV NVIDIA GPU が作成できる仮想 GPU の最大数を設定する リンクのコピーリンクがクリップボードにコピーされました!
NVIDIA SR-IOV GPU を使用している場合、Compute サービス (nova) は、それらの GPU が作成できる仮想 GPU (vGPU) の最大数を検出できません。そのため、この数を NVIDIA から手動で取得し、max_instances 設定オプションを設定して、SR-IOV NVIDIA GPU が作成できる仮想 GPU の最大数を定義する必要があります。
ノードセット内のノードのサブセットは再設定できません。そうする必要がある場合は、ノードセットをスケールダウンし、以前に削除したノードから新しいノードセットを作成する必要があります。
前提条件
- NVIDIA GPU が SR-IOV をサポートしているかどうか、サポートされる Virtual Function (VF) の数を把握している。たとえば、NVIDIA L4 GPU Accelerator は、32 個の VF に対して SR-IOV サポートを提供します。詳細は、www.nvidia.com を参照してください。
-
ワークステーションに
ocコマンドラインツールがインストール済みである。 -
cluster-admin権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。 -
SR-IOV NVIDIA GPU の仮想 GPU の最大数を設定するノードを定義する
OpenStackDataPlaneNodeSetCR を選択した。OpenStackDataPlaneNodeSetCR 作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイ の 事前プロビジョニングされたノードを使用した OpenStackDataPlaneNodeSet CR の作成 を参照してください。
手順
SR-IOV NVIDIA GPU が特定の仮想 GPU タイプに対して作成できる vGPU の最大数を定義するには、
nova-extra-config.yamlという名前のConfigMapCR を作成または更新します。仮想 GPU タイプの特定のmdevセクションで、enabled_mdev_typesパラメーターとmax_instancesパラメーターの値を設定する必要があります。この設定例は、最大 24 個の仮想 GPU を作成できる A40-2Q NVIDIA GPU タイプ用です。apiVersion: v1 kind: ConfigMap metadata: name: nova-extra-config namespace: openstack data: 36-nova-max-instances.conf: | [devices] enabled_mdev_types = nvidia-558 [mdev_nvidia-558] max_instances = 24ConfigMapオブジェクトの作成の詳細は、ノード の config map の作成と使用 を参照してください。-
nova-extra-config.yamlファイルを保存します。 新しい
OpenStackDataPlaneDeploymentCR を作成して、データプレーンノード上のサービスを設定し、データプレーンをデプロイして、ワークステーション上のcompute_vgpus_max_instance_deploy.yamlという名前のファイルに保存します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: compute_ vgpus_max_instancecompute_vgpus_max_instance_deploy.yamlで、デプロイするすべてのOpenStackDataPlaneNodeSetCR を含めるようにnodeSetsを指定します。前提条件として選択したOpenStackDataPlaneNodeSetCR が含まれていることを確認してください。警告デプロイメントに複数のノードセットがある場合、ノードセットと
DataPlaneServicesがどのように設定されているかにより、nova-extra-config.yamlConfigMap への変更が複数のノードセットに直接影響する可能性があります。ノードセットがnova-extra-configConfigMap を使用しているために再設定の影響を受けるかを確認するには、次の手順を実行します。-
ノードセットのサービスリストを確認し、
novaを指すDataPlaneServiceの名前を見つけます。DataPlaneServiceのedpmServiceTypeフィールドの値がnovaに設定されていることを確認します。 -
DataPlaneServiceのdataSourcesリストにnova-extra-configという名前のconfigMapRefが含まれている場合、このノードセットはこのConfigMapを使用し、その結果このConfigMapに加えた設定変更の影響を受けます。影響を受けるノードセットの一部を再設定しない場合は、これらのノードセットの別のConfigMapを指す新しいDataPlaneServiceを作成し、必要なノードセットでそのカスタムサービスを使用する必要があります。
apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: compute-vgpus_max_instance spec: nodeSets: - openstack-edpm - compute_vgpus_max_instance - ... - <nodeSet_name>-
<nodeSet_name>は、データプレーンデプロイメントに含めるOpenStackDataPlaneNodeSetCR の名前に置き換えます。
-
ノードセットのサービスリストを確認し、
-
compute_vgpus_max_instance_deploy.yamlデプロイメントファイルを保存します。 データプレーンをデプロイします。
$ oc create -f compute_vgpus_max_instance_deploy.yamlデータプレーンがデプロイされていることを確認します。
$ oc get openstackdataplanenodeset NAME STATUS MESSAGE compute_vgpus_max_instance True Deployedopenstackclientのリモートシェルにアクセスし、デプロイされたコンピュートノードがコントロールプレーンに表示されることを確認します。$ oc rsh -n openstack openstackclient $ openstack hypervisor list
11.5. NVIDIA GPU パススルー用のコンピュートノードを設定する リンクのコピーリンクがクリップボードにコピーされました!
PCI パススルー (NVIDIA GPU パススルー) を使用して、グラフィックカードなどの物理 PCI デバイスをインスタンスに割り当てることができます。デバイスに PCI パススルーを使用する場合、インスタンスはタスクを実行するためにデバイスへの排他的アクセスを確保し、ホストはデバイスを利用することができません。NVIDIA GPU パススルーを PCI パススルーとして使用するには、NVIDIA GPU パススルーに使用するデータプレーンノードを準備し、NVIDIA デバイスドライバーをダウンロードしてインストールする必要があります。
前提条件
- PCI パススルーを設定した。詳細は、PCI パススルーの設定 を参照してください。
- PCI パススルー設定の一部として PCI パススルーをサポートするために、コンピュートノードのサーバー BIOS で IOMMU を有効にした。詳細は、PCI パススルー用の OpenStackDataPlaneNodeSet CR の作成 を参照してください。
手順
openstackclientのリモートシェルにアクセスします。$ oc rsh openstackclientインスタンスを作成し、NVIDIA デバイスドライバーをインストールします。
$ openstack server create --flavor <flavor> \ --image <image> --network <network> \ --wait myInstanceFromImage-
<flavor>は、フレーバーの名前または ID に置き換えます。 -
<image>は、イメージの名前または ID に置き換えます。 <network>は、ネットワークの名前または ID に置き換えます。必要に応じて、--networkオプションを複数回使用して、インスタンスを複数のネットワークに接続することができます。インスタンスの作成の詳細は、インスタンスの作成と管理 の インスタンスの作成 を参照してください。
-
/etc/modprobe.d/blacklist-nouveau.confファイルを作成します。 blacklist-nouveau.confに次の設定を追加して、nouveau デバイスドライバーを無効にします。$ blacklist nouveau $ options nvidia modeset=0initramfsを再生成します。$ dracut --force $ grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline- 製品ポータルから NVIDIA デバイスドライバーをダウンロードしてインストールします。詳細は、NVIDIA DOCS HUB を参照してください。
ノードをリブートします。
$ sudo reboot
-
-
- GPU パススルーインスタンスに割り当てるすべてのインスタンスに対してこの手順を繰り返します。
検証
- GPU が PCI パススルー用に正しく設定されていることを確認するには、PCI パススルー用のノードセットの作成 を参照してください。
11.6. カスタム vGPU リソースプロバイダー特性の作成 リンクのコピーリンクがクリップボードにコピーされました!
RHOSO 環境がサポートする vGPU タイプごとにカスタムリソースプロバイダーの特性を作成できます。その後、クラウドユーザーがそれらのカスタム特性を持つホストでインスタンスを起動するのに使用できるフレーバーを作成できます。カスタム特性は大文字で定義し、接頭辞 CUSTOM_ で始まる必要があります。リソースプロバイダーの特性の詳細は、リソースプロバイダー特性による絞り込み を参照してください。
手順
新しい特性を作成します。
$ openstack --os-placement-api-version 1.6 trait \ create CUSTOM_<TRAIT_NAME>-
<TRAIT_NAME>を特性の名前に置き換えます。名前には、A から Z までの文字、0 から 9 までの数字、およびアンダースコア "_" だけを使用する必要があります。
-
各ホストの既存のリソースプロバイダー特性を収集します。
$ existing_traits=$(openstack --os-placement-api-version 1.6 resource provider trait list -f value <host_uuid> | sed 's/^/--trait /')既存のリソースプロバイダー特性に、ホストまたはホストアグリゲートに必要な特性があることを確認します。
$ echo $existing_traits必要な特性がまだリソースプロバイダーに追加されていない場合は、既存の特性と必要な特性を各ホストのリソースプロバイダーに追加してください。
$ openstack --os-placement-api-version 1.6 \ resource provider trait set $existing_traits \ --trait CUSTOM_<TRAIT_NAME> \ <host_uuid><TRAIT_NAME>を、リソースプロバイダーに追加する特性の名前に置き換えます。必要に応じて、--traitオプションを複数回使用して、さらに特性を追加することができます。注記このコマンドは、リソースプロバイダーの特性をすべて置き換えます。したがって、ホスト上の既存のリソースプロバイダー特性のリストを取得して、削除されないように再度設定する必要があります。
11.7. カスタム GPU インスタンスイメージの作成 リンクのコピーリンクがクリップボードにコピーされました!
クラウドユーザーが仮想 GPU (vGPU) を使用するインスタンスを作成できるようにするには、インスタンス起動用のカスタムの仮想 GPU 対応イメージを作成します。NVIDIA GRID ゲストドライバーおよびライセンスファイルを使用してカスタムの仮想 GPU 対応インスタンスイメージを作成するには、以下の手順を使用します。
前提条件
- GPU 対応のコンピュートノードと共にオーバークラウドを設定およびデプロイしている。
手順
仮想 GPU インスタンスが必要とするハードウェアおよびソフトウェアプロファイルでインスタンスを作成します。
$ openstack server create --flavor <flavor> \ --image <image> temp_vgpu_instance-
<flavor>を、仮想 GPU インスタンスが必要とするハードウェアプロファイルを持つフレーバーの名前または ID に置き換えてください。 -
<image>を、仮想 GPU インスタンスが必要とするソフトウェアプロファイルを持つイメージの名前または ID に置き換えてください。RHEL クラウドイメージのダウンロードの詳細は、イメージの作成と管理 の RHEL KVM または RHOSP 互換イメージの作成 を参照してください。
-
- クラウドユーザーとしてインスタンスにログインします。
-
NVIDIA のガイダンス (Licensing an NVIDIA vGPU on Linux by Using a Configuration File) に従って、インスタンス上に
gridd.confNVIDIA GRID ライセンスファイルを作成します。 インスタンスに GPU ドライバーをインストールします。NVIDIA ドライバーのインストールの詳細は、Installing the NVIDIA vGPU Software Graphics Driver on Linux を参照してください。
注記hw_video_modelイメージ属性を使用して GPU ドライバーの種別を定義します。仮想 GPU インスタンスのエミュレートされた GPU を無効にする場合は、noneを選択します。サポートされているドライバーについての詳しい情報は、イメージ設定パラメーター を参照してください。インスタンスのイメージスナップショットを作成します。
$ openstack server image create \ --name vgpu_image temp_vgpu_instance- オプション: インスタンスを削除します。
11.8. インスタンス用の仮想 GPU フレーバーの作成 リンクのコピーリンクがクリップボードにコピーされました!
クラウドユーザーが GPU 負荷用のインスタンスを作成できるようにするには、仮想 GPU インスタンスを起動するための GPU フレーバーを作成し、仮想 GPU のリソースをそのフレーバーに割り当てます。
前提条件
- GPU 対応コンピュートノードと共にオーバークラウドを設定およびデプロイしている。
手順
NVIDIA GPU フレーバーを作成します。以下に例を示します。
$ openstack --os-compute-api=2.86 flavor create --vcpus 6 \ --ram 8192 --disk 100 m1.small-gpuvGPU リソースをフレーバーに割り当てます。
$ openstack --os-compute-api=2.86 flavor set m1.small-gpu \ --property "resources:VGPU=1"注記各インスタンスに割り当てられる仮想 GPU は 1 つだけです。
オプション: 特定の vGPU タイプ用のフレーバーをカスタマイズするには、必要な特性をフレーバーに追加します。
$ openstack --os-compute-api=2.86 flavor set m1.small-gpu \ --property trait:CUSTOM_NVIDIA_11=required各 vGPU タイプのカスタムリソースプロバイダー特性を作成する方法については、カスタム vGPU リソースプロバイダー特性の作成 を参照してください。
11.9. 仮想 GPU インスタンスの起動 リンクのコピーリンクがクリップボードにコピーされました!
GPU 負荷用の GPU 対応インスタンスを作成することができます。
手順
GPU フレーバーおよびイメージを使用して、インスタンスを作成します。以下に例を示します。
$ openstack --os-compute-api=2.86 server create --flavor m1.small-gpu \ --image vgpu_image --security-group web --nic net-id=internal0 \ --key-name lambda vgpu-instance- cloud-user としてインスタンスにログインします。
インスタンスが GPU にアクセスできることを確認するには、インスタンスから以下のコマンドを入力します。
$ lspci -nn | grep <gpu_name>
第12章 インスタンスへのメタデータの追加 リンクのコピーリンクがクリップボードにコピーされました!
この機能の内容は、このリリースでは ドキュメントプレビュー として提供されているため、Red Hat で完全には検証していません。テスト用にのみ使用し、実稼働環境では使用しないでください。
Compute (nova) サービスは、メタデータを使用してインスタンスの起動時に設定情報を渡します。インスタンスは、コンフィグドライブまたはメタデータサービスを使用してメタデータにアクセスすることができます。
- コンフィグドライブ
- デフォルトでは、すべてのインスタンスにコンフィグドライブがあります。コンフィグドライブは、インスタンスのブート時にアタッチすることのできる特別なドライブです。コンフィグドライブは読み取り専用ドライブとしてインスタンスに提示されます。インスタンスはこのドライブをマウントしてそこからファイルを読み取り、通常メタデータサービスから利用する情報を取得することができます。コンフィグドライブを無効にするには、コンフィグドライブの無効化 を参照してください。
- メタデータサービス
-
Compute サービスは、REST API としてメタデータサービスを提供します。これを使用して、インスタンス固有のデータを取得することができます。インスタンスは、
169.254.169.254またはfe80::a9fe:a9feからこのサービスにアクセスします。
12.1. インスタンスメタデータの種別 リンクのコピーリンクがクリップボードにコピーされました!
クラウドユーザー、クラウド管理者、および Compute サービスは、メタデータをインスタンスに渡すことができます。
- クラウドユーザーが提供するデータ
- クラウドユーザーは、インスタンスがブート時に実行するシェルスクリプトなど、インスタンスを起動する際に使用する追加データを指定することができます。クラウドユーザーは、インスタンスを作成または更新する際に、ユーザーデータ機能を使用し、キー/値のペアを必要な属性として渡すことで、データをインスタンスに渡すことができます。
- クラウド管理者が提供するデータ
Red Hat OpenStack Services on OpenShift (RHOSO) 管理者は、vendordata 機能を使用してデータをインスタンスに渡します。Compute サービスの提供するベンダーデータモジュール
StaticJSONおよびDynamicJSONにより、管理者はメタデータをインスタンスに渡すことができます。-
StaticJSON:(デフォルト) 全インスタンスで共通のメタデータに使用します。 -
DynamicJSON: 各インスタンスで異なるメタデータに使用します。このモジュールは外部の REST サービスにリクエストを行い、インスタンスに追加するメタデータを決定します。
ベンダーデータの設定は、インスタンスの以下の読み取り専用ファイルのいずれかにあります。
-
/openstack/{version}/vendor_data.json -
/openstack/{version}/vendor_data2.json
-
- Compute サービスが提供するデータ
- Compute サービスはメタデータサービスの内部実装を使用して、要求されたインスタンスのホスト名やインスタンスが属するアベイラビリティーゾーン等の情報をインスタンスに渡します。この操作はデフォルトで実施され、クラウドユーザーまたは管理者が設定を行う必要はありません。
12.2. コンフィグドライブの無効化 リンクのコピーリンクがクリップボードにコピーされました!
インスタンスの起動時にコンフィグドライブのアタッチを無効にするには、force_config_drive パラメーターを false に設定する必要があります。
ノードセット全体のみ設定できます。ノードセット内のノードのサブセットを再設定することはサポートされていません。ノードセット内のノードのサブセットを再設定する必要がある場合は、ノードセットをスケールダウンし、以前に削除したノードから新しいノードセットを作成する必要があります。
前提条件
-
ocコマンドラインツールがワークステーションにインストールされている。 -
cluster-admin権限を持つユーザーとして、Red Hat OpenStack Services on OpenShift (RHOSO) にログインしている。 -
コンフィグドライブを無効にするノードを定義する
OpenStackDataPlaneNodeSetカスタムリソース (CR) を選択した。OpenStackDataPlaneNodeSetCR 作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイ の 事前プロビジョニングされたノードを使用した OpenStackDataPlaneNodeSet CR の作成 を参照してください。
手順
名前が
nova-extra-config.yamlのConfigMapCR を作成または更新し、[DEFAULT]のforce_config_driveの値をfalseに設定します。apiVersion: v1 kind: ConfigMap metadata: name: nova-extra-config namespace: openstack data: 35-nova-config-drive.conf: | [DEFAULT] force_config_drive = falseConfigMapオブジェクトの作成の詳細は、ノード の config map の作成と使用 を参照してください。データプレーンノード上のサービスを設定するために新しい
OpenStackDataPlaneDeploymentCR を作成してデータプレーンをデプロイし、ワークステーション上のcompute_config_drive_deploy.yamlという名前のファイルに保存します。apiVersion: core.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: compute-config-drivecompute_config_drive_deploy.yamlCR で、デプロイするすべてのOpenStackDataPlaneNodeSetCR を含めるようにnodeSetsを指定します。前提条件として選択したOpenStackDataPlaneNodeSetCR が含まれていることを確認してください。このOpenStackDataPlaneNodeSetCR は、どのノードでコンフィグドライブを無効にするかを定義します。警告デプロイメントに複数のノードセットがある場合、ノードセットと
DataPlaneServicesがどのように設定されているかにより、nova-extra-config.yamlConfigMapへの変更が複数のノードセットに直接影響する可能性があります。ノードセットがnova-extra-configConfigMapを使用しているために再設定の影響を受けるかを確認するには、次の手順を実行します。-
ノードセットのサービスリストを確認し、nova を指す
DataPlaneServiceの名前を見つけます。 DataPlaneServiceのedpmServiceTypeフィールドの値がnovaに設定されていることを確認します。DataPlaneServiceのdataSourcesリストにnova-extra-configという名前のconfigMapRefが含まれている場合、このノードセットはnova-extra-config.yamlConfigMapを使用するため、このConfigMapの設定変更の影響を受けます。影響を受けるノードセットの一部を再設定しない場合は、これらのノードセットの別のConfigMapを指す新しいDataPlaneServiceを作成する必要があります。
apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: compute-config-drive spec: nodeSets: - openstack-edpm - compute-config-drive - ... - <nodeSet_name>-
<nodeSet_name>は、データプレーンデプロイメントに含めるOpenStackDataPlaneNodeSetCR の名前に置き換えます。
-
ノードセットのサービスリストを確認し、nova を指す
-
compute_config_drive_deploy.yamlデプロイメントファイルを保存します。 データプレーンをデプロイします。
$ oc create -f compute_config_drive_deploy.yamlデータプレーンがデプロイされていることを確認します。
$ oc get openstackdataplanenodeset NAME STATUS MESSAGE compute-config-drive True Deployedヒントデプロイの進行状況を追跡するには、get コマンドの末尾に
-wオプションを追加します。openstackclientのリモートシェルにアクセスし、デプロイされたコンピュートノードがコントロールプレーンに表示されることを確認します。$ oc rsh -n openstack openstackclient $ openstack hypervisor list
第13章 インスタンスのセキュリティーを設定する リンクのコピーリンクがクリップボードにコピーされました!
この機能の内容は、このリリースでは ドキュメントプレビュー として提供されているため、Red Hat で完全には検証していません。テスト用にのみ使用し、実稼働環境では使用しないでください。
クラウド管理者は、クラウド上で実行されるインスタンスに対して、次のセキュリティー機能を設定できます。
-
UEFI Secure boot: プロパティーキー
os:secure_bootを有効にして、UEFI Secure Boot フレーバーを作成できます。クラウドユーザーは、このフレーバーを使用して、UEFI Secure Boot で保護されたインスタンスを作成できます。
- Emulated virtual Trusted Platform Module (vTPM): クラウド管理者は、エミュレートされた vTPM デバイスを持つインスタンスを作成できる機能をクラウドユーザーに提供できます。
- SEV: クラウドユーザーが、メモリー暗号化を使用するインスタンスを作成できるようにするために使用します。
第14章 データベースのクリーニング リンクのコピーリンクがクリップボードにコピーされました!
この機能の内容は、このリリースでは ドキュメントプレビュー として提供されているため、Red Hat で完全には検証していません。テスト用にのみ使用し、実稼働環境では使用しないでください。
Compute サービスには管理ツール nova-manage が含まれています。このツールを使用して、データベーススキーマの適用、アップグレード中のオンラインデータ移行の実行、データベースの管理およびクリーンアップ等の、デプロイメント、アップグレード、クリーンアップ、およびメンテナンス関連のタスクを実行することができます。
デフォルトでは、次のデータベース管理タスクが実行されます。
- 削除された行を実稼働テーブルからシャドウテーブルに移動して、削除されたインスタンスレコードをアーカイブする。
- アーカイブ処理が完了した後に、シャドウテーブルから削除された行をパージする。
第15章 コンピュートノード間の仮想マシンインスタンスの移行 リンクのコピーリンクがクリップボードにコピーされました!
メンテナンスを実行する場合やワークロードのリバランスを行う場合、あるいは障害が発生した/障害が発生しつつあるノードを置き換える場合に、あるコンピュートノードからデータプレイン内の別のコンピュートノードにインスタンスを移行しなければならない場合があります。
- コンピュートノードのメンテナンス
- ハードウェアのメンテナンスや修理、カーネルのアップグレードおよびソフトウェアの更新を行うなどの理由により、コンピュートノードを一時的に停止する必要がある場合、コンピュートノード上で実行中のインスタンスを別のコンピュートノードに移行することができます。
- 障害が発生しつつあるコンピュートノード
- コンピュートノードで障害が発生する可能性があり、ノードのサービスまたは置き換えが必要な場合、障害が発生しつつあるコンピュートノードから正常なコンピュートノードにインスタンスを移行することができます。
- 障害が発生したコンピュートノード
- コンピュートノードですでに障害が発生している場合には、インスタンスを退避させることができます。同じ名前、UUID、ネットワークアドレス、およびコンピュートノードに障害が発生する前にインスタンスに割り当てられていたその他すべてのリソースを使用して、元のイメージから別のコンピュートノードにインスタンスを再ビルドすることができます。
- ワークロードのリバランス
- ワークロードをリバランスするために、1 つまたは複数のインスタンスを別のコンピュートノードに移行することができます。たとえば、コンピュートノード上のインスタンスを 1 つにまとめて電力を節約する、他のネットワークリソースに物理的に近いコンピュートノードにインスタンスを移行してレイテンシーを低減する、インスタンスを全コンピュートノードに分散してホットスポットをなくし復元力を向上させる、等が可能です。
すべてのコンピュートノードはセキュアな移行を提供します。すべてのコンピュートノードには、移行プロセス中それぞれのホストのユーザーが他のコンピュートノードにアクセスできるように、共有 SSH キーも必要です。
15.1. 移行の種別 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenStack Services on OpenShift (RHOSO) は、次のタイプの移行をサポートしています。
- コールドマイグレーション
コールドマイグレーション (あるいは、非ライブマイグレーション) では、動作中のインスタンスをシャットダウンしてから、移行元コンピュートノードから移行先コンピュートノードに移行します。
コールドマイグレーションでは、インスタンスに多少のダウンタイムが発生します。移行したインスタンスは、引き続き同じボリュームおよび IP アドレスにアクセスすることができます。
注記コールドマイグレーションを行うためには、移行元および移行先両方のコンピュートノードが動作状態になければなりません。
- ライブマイグレーション
ライブマイグレーションでは、インスタンスをシャットダウンせずに、動作状態を維持しながら移行元コンピュートノードから移行先コンピュートノードに移行します。
インスタンスのライブマイグレーションを行う場合、ダウンタイムはほとんど発生しません。ただし、ライブマイグレーションは、移行操作中のパフォーマンスに影響を及ぼします。したがって、移行中のインスタンスは重要なパスから除外する必要があります。
重要ライブマイグレーションは、移動されるワークロードのパフォーマンスに影響を与えます。Red Hat は、ライブマイグレーション中のパケット損失、ネットワーク遅延、メモリー遅延の増加、またはネットワーク帯域幅、メモリー帯域幅、ストレージ IO、または CPU パフォーマンスの低下をサポートしません。
注記ライブマイグレーションを行うためには、移行元および移行先両方のコンピュートノードが動作状態になければなりません。
- 退避
- コンピュートノードですでに障害が発生しているためインスタンスを移行する必要がある場合、インスタンスを退避させることができます。
15.2. 移行の制約 リンクのコピーリンクがクリップボードにコピーされました!
移行の制約は通常、ブロックマイグレーション、設定ディスク、またはいずれかのインスタンスがコンピュートノード上の物理ハードウェアにアクセスする場合に生じます。
- CPU に関する制約
移行元および移行先コンピュートノードの CPU アーキテクチャーは、同一であることが必須です。たとえば、Red Hat では、
ppc64leCPU からx86_64CPU へのインスタンスの移行をサポートしません。異なる CPU モデル間の移行はサポートされていません。CPU ホストパススルーを使用するインスタンス等の場合には、移行元および移行先コンピュートノードの CPU は、完全に同一でなければなりません。すべてのケースで、移行先ノードの CPU 機能は、移行元ノードの CPU 機能の上位セットであることが必須です。
- メモリーに関する制約
- 移行先コンピュートノードでは、十分な RAM が利用可能でなければなりません。メモリーのオーバーサブスクリプションが、移行失敗の原因となる可能性があります。
- ブロックマイグレーションに関する制約
インスタンスの使用するディスクがコンピュートノード上にローカルに格納されている場合、その移行には、共有ストレージ (Red Hat Ceph Storage 等) を使用するボリュームベースのインスタンスよりもはるかに長い時間がかかります。このレイテンシーは、OpenStack Compute (nova) がコンピュートノード間でローカルディスクをブロックごとに移行するために発生します。この処理は、デフォルトではコントロールプレーンネットワークを通じて行われます。これとは対照的に、Red Hat Ceph Storage 等の共有ストレージを使用するボリュームベースのインスタンスでは、ボリュームを移行する必要がありません。それぞれのコンピュートノードが、共有ストレージにアクセスできるためです。
注記大量の RAM を消費するローカルディスクまたはインスタンスの移行により、コントロールプレーンネットワークに輻輳が生じ、コントロールプレーンネットワークを使用する他のシステム (RabbitMQ 等) のパフォーマンスに悪影響を及ぼす場合があります。
- 読み取り専用ドライブの移行に関する制約
-
ドライブの移行は、ドライブに読み取りおよび書き込み両方の機能がある場合に限りサポートされます。たとえば、OpenStack Compute (nova) は CD-ROM ドライブまたは読み取り専用のコンフィグドライブを移行することはできません。ただし、OpenStack Compute (nova) は、読み取り機能と書き込み機能の両方を備えたドライブを移行できます。設定ドライブ
vfatは、OpenStack Compute (nova) が移行できる唯一の設定ドライブ形式です。 - ライブマイグレーションに関する制約
インスタンスのライブマイグレーションでは、さらに制約が生じる場合があります。
重要ライブマイグレーションは、移動されるワークロードのパフォーマンスに影響を与えます。Red Hat は、ライブマイグレーション中のパケット損失、ネットワーク遅延、メモリー遅延の増加、またはネットワーク帯域幅、メモリー帯域幅、ストレージ IO、または CPU パフォーマンスの低下をサポートしません。
移行中に新しい操作を行うことができない
移行元および移行先ノードのインスタンスのコピー間で状態の整合性を確保するために、RHOSP ではライブマイグレーション中の新規操作を拒否する必要があります。拒否しないと、ライブマイグレーションでメモリーの状態を複製する前にメモリーへの書き込みが行われた場合、ライブマイグレーションに長い時間がかかる状況や、永久に完了しない状況が発生する可能性があります。
NUMA を使用した CPU ピニング
OpenStackControlPlane カスタマーリソース (CR) の
[filter_scheduler]設定のenabled_filtersパラメーターには、AggregateInstanceExtraSpecsFilterとNUMATopologyFilterの値が含まれていなければなりません。マルチセルクラウド
マルチセルクラウドでは、同じセル内の別のホストにインスタンスのライブマイグレーションを行うことができますが、セル全体では移行できません。
フローティングインスタンス
共有 (フローティング) インスタンスを移行する場合は、移行先と移行元のコンピュートノード間の
cpu_shared_setフィールドの値が一致している必要があります。これにより、移行先の共有 (固定されていない) インスタンス用に設定された CPU にインスタンスが割り当てられます。したがって、フローティングインスタンスをライブマイグレーションする必要がある場合は、すべてのコンピュートノードで専用 (固定) インスタンスと共有インスタンスの CPU マッピングが同じであることを確認するか、共有インスタンスにホストアグリゲートを使用します。移行先コンピュートノードの容量
移行先コンピュートノードには、移行するインスタンスをホストするのに十分な空き容量が必要です。
SR-IOV ライブマイグレーション
SR-IOV ベースのネットワークインターフェイスを使用するインスタンスは、ライブマイグレーションが可能です。ダイレクトモードの SR-IOV ネットワークインターフェイスを持つインスタンスのライブマイグレーションでは、ネットワークのダウンタイムが発生します。これは、移行時に、ダイレクトモードのインターフェイスの接続を解除し再び接続する必要があるためです。
ML2/OVS デプロイメントでのライブマイグレーション
ライブマイグレーションプロセス中に、移行先ホストで仮想マシンの一時停止が解除されると、メタデータサーバープロキシーがまだ生成されていないため、メタデータサービスが利用できない可能性があります。この利用できない状態は長く続きません。すぐにサービスは利用可能になり、ライブマイグレーションは成功します。
ライブマイグレーションの妨げとなる制約
以下の機能を使用するインスタンスのライブマイグレーションを行うことはできません。
PCI パススルー
QEMU/KVM ハイパーバイザーでは、コンピュートノード上の PCI デバイスをインスタンスにアタッチすることができます。PCI パススルーを使用すると、インスタンスは PCI デバイスに排他的にアクセスすることができ、これらのデバイスがインスタンスのオペレーティングシステムに物理的に接続されているかのように表示され、動作します。ただし、PCI パススルーには物理デバイスへの直接アクセスが必要なため、QEMU/KVM は PCI パススルーを使用するインスタンスのライブマイグレーションをサポートしません。
15.3. 移行の準備 リンクのコピーリンクがクリップボードにコピーされました!
1 つまたは複数のインスタンスを移行する前に、コンピュートノード名および移行するインスタンスの ID を把握する必要があります。
前提条件
-
cluster-admin権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。 -
ocコマンドラインツールがワークステーションにインストールされます。
手順
ワークステーションから
OpenStackClientPod のリモートシェルにアクセスします。$ oc rsh -n openstack openstackclient移行元コンピュートノード上のインスタンスをリスト表示し、移行するインスタンスの ID を特定します。
$ openstack server list --host <source> --all-projects<source>を移行元コンピュートノードの名前または ID に置き換えてください。オプション: ノードのメンテナンスを行うためにインスタンスを移行元コンピュートノードから移行する場合、ノードを無効にして、メンテナンス中にスケジューラーがノードに新規インスタンスを割り当てるのを防ぐ必要があります。
$ openstack compute service set <source> nova-compute --disable<source>を移行元コンピュートノードのホスト名に置き換えてください。OpenStackClientPod を終了します。$ exit
次のステップ
これで移行を行う準備が整いました。Cold migrating an instance または Live migrating an instance で詳しく説明されている必須手順に従います。
15.4. インスタンスのコールドマイグレーション リンクのコピーリンクがクリップボードにコピーされました!
インスタンスのコールドマイグレーションでは、インスタンスを停止して別のコンピュートノードに移動します。コールドマイグレーションは、PCI パススルーを使用するインスタンスの移行など、ライブマイグレーションでは対応することのできない移行シナリオに対応します。移行先コンピュートノードは、スケジューラーにより自動的に選択されます。詳細は、移行の制約 を参照してください。
手順
ワークステーションから
OpenStackClientPod のリモートシェルにアクセスします。$ oc rsh -n openstack openstackclientインスタンスのコールドマイグレーションを行うには、以下のコマンドを入力してインスタンスの電源をオフにして移動します。
$ openstack server migrate <instance> --wait-
<instance>を移行するインスタンスの名前または ID に置き換えてください。 -
ローカルに確保されたボリュームを移行する場合には、
--block-migrationフラグを指定します。 -
移行が完了するまで待機する必要があることを示すには、
--waitフラグを指定します。
-
- インスタンスの移行が完了するのを待つ間に、別のターミナルウィンドウを開いて移行のステータスを確認できます。詳細は、Checking migration status を参照してください。
インスタンスのステータスを確認します。
$ openstack server list --all-projectsステータスが "VERIFY_RESIZE" と表示される場合は、移行を確認する、または元に戻す必要があることを示しています。
予想どおりに機能している場合は、移行を確認します。
$ openstack server resize --confirm <instance><instance>を移行するインスタンスの名前または ID に置き換えてください。ステータスが "ACTIVE" と表示される場合は、インスタンスを使用する準備が整っていることを示しています。予想どおりに機能していない場合は、移行を元に戻します。
$ openstack server resize --revert <instance><instance>をインスタンスの名前または ID に置き換えてください。
インスタンスを再起動します。
$ openstack server start <instance><instance>をインスタンスの名前または ID に置き換えてください。オプション: メンテナンスのために移行元コンピュートノードを無効にした場合は、新規インスタンスがノードに割り当てられるようにノードを再度有効にする必要があります。
$ openstack compute service set <source> nova-compute --enable<source>を移行元コンピュートノードのホスト名に置き換えてください。OpenStackClientPod を終了します。$ exit
15.5. インスタンスのライブマイグレーション リンクのコピーリンクがクリップボードにコピーされました!
ライブマイグレーションでは、ダウンタイムを最小限に抑えて、インスタンスを移行元コンピュートノードから移行先コンピュートノードに移動します。ライブマイグレーションがすべてのインスタンスに適しているとは限りません。詳細は、移行の制約 を参照してください。
手順
ワークステーションから
OpenStackClientPod のリモートシェルにアクセスします。$ oc rsh -n openstack openstackclientインスタンスのライブマイグレーションを行うには、インスタンスおよび移行先コンピュートノードを指定します。
$ openstack server migrate <instance> --live-migration [--host <dest>] --wait-
<instance>をインスタンスの名前または ID に置き換えてください。 <dest>を移行先コンピュートノードの名前または ID に置き換えてください。注記openstack server migrateコマンドは、共有ストレージを持つインスタンスの移行が対象です。これがデフォルトの設定です。ローカルに確保されたボリュームを移行するには、--block-migrationフラグを指定します。$ openstack server migrate <instance> --live-migration [--host <dest>] --wait --block-migration
-
インスタンスが移行されていることを確認します。
$ openstack server show <instance> +----------------------+--------------------------------------+ | Field | Value | +----------------------+--------------------------------------+ | ... | ... | | status | MIGRATING | | ... | ... | +----------------------+--------------------------------------+- 移行が完了するまで待ちます。インスタンスの移行が完了するのを待つ間、移行のステータスを確認することができます。詳細は、Checking migration status を参照してください。
インスタンスのステータスをチェックして、移行が成功したかどうかを確認します。
$ openstack server list --host <dest> --all-projects<dest>を移行先コンピュートノードの名前または ID に置き換えてください。オプション: メンテナンスのために移行元コンピュートノードを無効にした場合は、新規インスタンスがノードに割り当てられるようにノードを再度有効にする必要があります。
$ openstack compute service set <source> nova-compute --enable<source>を移行元コンピュートノードのホスト名に置き換えてください。OpenStackClientPod を終了します。$ exit
15.6. 移行ステータスの確認 リンクのコピーリンクがクリップボードにコピーされました!
移行が完了するまでに、さまざまな移行状態を遷移します。正常な移行では、通常、移行状態は以下のように遷移します。
- Queued: Compute サービスはインスタンス移行の要求を受け入れ、移行は保留中です。
- Preparing: Compute サービスはインスタンス移行の準備中です。
- Running: Compute サービスはインスタンスを移行中です。
- Post-migrating: Compute サービスはインスタンスを移行先コンピュートノードにビルドし、移行元コンピュートノードのリソースを解放しています。
- Completed: Compute サービスはインスタンスの移行を完了し、移行元コンピュートノードのリソース解放を終了しています。
手順
ワークステーションから
OpenStackClientPod のリモートシェルにアクセスします。$ oc rsh -n openstack openstackclientインスタンスの移行 ID のリストを取得します。
$ openstack server migration list --server <instance> +----+-------------+----------- (...) | Id | Source Node | Dest Node | (...) +----+-------------+-----------+ (...) | 2 | - | - | (...) +----+-------------+-----------+ (...)<instance>をインスタンスの名前または ID に置き換えてください。移行のステータスを表示します。
$ openstack server migration show <instance> <migration_id>-
<instance>をインスタンスの名前または ID に置き換えてください。 <migration_id>を移行の ID に置き換えてください。openstack server migration showコマンドを実行すると、次の出力例が返されます。+------------------------+--------------------------------------+ | Property | Value | +------------------------+--------------------------------------+ | created_at | 2017-03-08T02:53:06.000000 | | dest_compute | controller | | dest_host | - | | dest_node | - | | disk_processed_bytes | 0 | | disk_remaining_bytes | 0 | | disk_total_bytes | 0 | | id | 2 | | memory_processed_bytes | 65502513 | | memory_remaining_bytes | 786427904 | | memory_total_bytes | 1091379200 | | server_uuid | d1df1b5a-70c4-4fed-98b7-423362f2c47c | | source_compute | compute2 | | source_node | - | | status | running | | updated_at | 2017-03-08T02:53:47.000000 | +------------------------+--------------------------------------+ヒントCompute サービスは、コピーする残りのメモリーのバイト数によって移行の進捗を測定します。時間が経過してもこの数字が減少しない場合、移行を完了することができず、Compute サービスは移行を中止する可能性があります。
-
OpenStackClientPod を終了します。$ exitインスタンスの移行に長い時間がかったり、エラーが発生したりする場合があります。詳細は、Troubleshooting migration を参照してください。
15.7. インスタンスの退避 リンクのコピーリンクがクリップボードにコピーされました!
障害が発生した、またはシャットダウンしたコンピュートノードから同じ環境内の新しいホストにインスタンスを移動する場合は、インスタンスを退避できます。
退避プロセスにより元のインスタンスは破棄され、元のイメージ、インスタンス名、UUID、ネットワークアドレス、およびインスタンスに割り当てられていたその他すべてのリソースを使用して、別のコンピュートノードに元のインスタンスが再ビルドされます。
インスタンスが共有ストレージを使用する場合、インスタンスのルートディスクは退避プロセス中に再ビルドされません。移行先コンピュートノードが引き続きこのディスクにアクセス可能なためです。インスタンスが共有ストレージを使用しない場合は、インスタンスのルートディスクも移行先コンピュートノードに再ビルドされます。
-
コンピュートノードがフェンシングされ、API が報告するコンピュートノードの状態が "down" または "forced-down" である場合に限り、退避を行うことができます。コンピュートノードが "down" または "forced-down" と報告されない場合、
evacuateコマンドは失敗します。 - クラウド管理者でなければ、退避を行うことはできません。
15.7.1. インスタンスの退避 リンクのコピーリンクがクリップボードにコピーされました!
ホスト上のすべてのインスタンスを退避するには、一度に 1 つずつ退避する必要があります。
手順
ワークステーションから
OpenStackClientPod のリモートシェルにアクセスします。$ oc rsh -n openstack openstackclientインスタンスが実行されていないことを確認します。
$ openstack server list --host <node> --all-projects-
<node>をインスタンスをホストするコンピュートノードの名前または UUID に置き換えます。
-
インスタンスタスクの状態を確認します。
$ openstack server show <instance> +----------------------+--------------------------------------+ | Field | Value | +----------------------+--------------------------------------+ | ... | ... | | status | NONE | | ... | ... | +----------------------+--------------------------------------+-
<instance>を、退避するインスタンスの名前または UUID に置き換えます。
注記インスタンスタスクの状態が "NONE" でない場合は、退避が失敗する可能性があります。
-
ホストコンピュートノードのフェンシングまたはシャットダウンを確認します。
$ openstack baremetal node show <node>-
<node>を退避するインスタンスをホストするコンピュートノードの名前または UUID に置き換えます。退避を実行するには、コンピュートノードのステータスがdownまたはforced-downである必要があります。
-
コンピュートノードを無効にします。
$ openstack compute service set \ <node> nova-compute --disable --disable-reason <disable_host_reason>-
<node>をインスタンスの退避元となるコンピュートノードの名前に置き換えてください。 -
<disable_host_reason>をコンピュートノードを無効にした理由の詳細に置き換えます。
-
インスタンスを退避させます。
$ openstack server evacuate [--host <dest>] \ [--password <password>] <instance>オプション:
<dest>をインスタンスの退避先となるコンピュートノードの名前に置き換えます。退避先コンピュートノードを指定しなかった場合には、Compute スケジューラーがノードを選択します。退避先に指定可能なコンピュートノードを確認するには、以下のコマンドを使用します。$ openstack hypervisor listオプション:
<password>を、退避したインスタンスにアクセスするのに必要な管理者パスワードに置き換えます。パスワードを指定しなかった場合には、無作為に生成され、退避の完了時に出力されます。注記パスワードは、一時インスタンスディスクがローカルのハイパーバイザーディスクに保存されている場合にのみ変更されます。インスタンスが共有ストレージでホストされる場合、または Block Storage ボリュームが割り当てられている場合はパスワードは変更されず、パスワードが変更されなかったことを通知するエラーメッセージは表示されません。
-
<instance>を退避させるインスタンスの名前または ID に置き換えてください。
注記退避が失敗し、インスタンスのタスク状態が "NONE" でない場合は、インスタンスの回復について Red Hat サポートにお問い合わせください。
オプション: コンピューティングノードは、復元されたら有効化します。
$ openstack compute service set \ <node> nova-compute --enable-
<node>を、有効化するコンピューティングノードの名前に置き換えます。
-
OpenStackClientPod を終了します。$ exit
15.8. 移行に関するトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
インスタンスの移行時に、以下の問題が発生する可能性があります。
- 移行プロセスでエラーが生じる。
- 移行プロセスが終了しない。
- 移行後にインスタンスのパフォーマンスが低下する。
移行中のエラー
以下の問題が発生すると、移行操作が error 状態に遷移します。
- Compute サービスが停止している。
- 競合状態が発生する。
ライブマイグレーションが failed 状態に移行すると、通常は error 状態になります。failed 状態の原因となる可能性のある典型的な問題を以下に示します。
- 移行先コンピュートホストが利用可能な状態にない。
- スケジューラーの例外が発生する。
- コンピューティングリソースが不十分なため、再ビルドプロセスに失敗する。
- サーバーグループの確認に失敗する。
- 移行先コンピュートノードへの移行が完了する前に、移行元コンピュートノードのインスタンスが削除される。
ライブマイグレーションのスタック
ライブマイグレーションは、完了に失敗すると永続的な running 状態のままになります。これは、ゲスト OS からソースコンピュートノードで実行しているインスタンスへの要求によって、Compute サービスが宛先コンピュートノードに複製するよりも速く変更が行われた場合に発生する可能性があります。
この状況に対処するには、以下のいずれかの方法を使用します。
- ライブマイグレーションを中止する。
- ライブマイグレーションを強制的に完了させる。
15.8.1. ライブマイグレーションの中止 リンクのコピーリンクがクリップボードにコピーされました!
移行プロセスがインスタンスの状態の変化を移行先ノードにコピーするより早くインスタンスの状態が変化する状況で、インスタンスの動作を一時的に中断したくない場合には、ライブマイグレーションを中止することができます。
手順
ワークステーションから
OpenStackClientPod のリモートシェルにアクセスします。$ oc rsh -n openstack openstackclientインスタンスの移行のリストを取得します。
$ openstack server migration list --server <instance><instance>をインスタンスの名前または ID に置き換えてください。ライブマイグレーションを中止します。
$ openstack server migration abort <instance> <migration_id>-
<instance>をインスタンスの名前または ID に置き換えてください。 -
<migration_id>を移行の ID に置き換えてください。
-
OpenStackClientPod を終了します。$ exit
15.8.2. ライブマイグレーション完了の強制 リンクのコピーリンクがクリップボードにコピーされました!
移行プロセスがインスタンスの状態の変化を移行先ノードにコピーするより早くインスタンスの状態が変化する状況で、インスタンスの動作を一時的に中断して移行を強制的に完了させたい場合には、ライブマイグレーションの手順を強制的に完了させることができます。
ライブマイグレーションを強制的に完了させると、かなりのダウンタイムが発生する可能性があります。
手順
ワークステーションから
OpenStackClientPod のリモートシェルにアクセスします。$ oc rsh -n openstack openstackclientインスタンスの移行のリストを取得します。
$ openstack server migration list --server <instance><instance>をインスタンスの名前または ID に置き換えてください。ライブマイグレーションを強制的に完了させます。
$ openstack server migration force complete <instance> <migration_id>-
<instance>をインスタンスの名前または ID に置き換えてください。 -
<migration_id>を移行の ID に置き換えてください。
-
OpenStackClientPod を終了します。$ exit