OpenStack Placement 詳説 第2回

OpenStack Placementの機能 その1

Takashi Natsume
nttlabs
7 min readFeb 5, 2019

--

こんにちは。NTTソフトウェアイノベーションセンタの夏目です。第1回目はいかがでしたでしょうか。概要を述べたので細かいところまではよく分からなかったという方もいらっしゃると思います。そこで第2回目はOpenStack® Placementの機能を詳細に見ていきたいと思います。(ここではstable/rockyおよびlibvirtの使用を前提として説明します。)

リソース・プロバイダ(Resource Provider)

第1回目でも説明したとおり、リソース・プロバイダはリソースを提供する主体であり、コンピュート・ノード(ハイパーバイザ)や共有ストレージなどが該当します。

Placementではリソース・プロバイダごとにインベントリ(Inventory)とアロケーション(Allocation)を管理しています(図1)。インベントリとは、リソース・プロバイダにおけるリソース・クラス(後述)ごとの合計の個数・容量(total)、予約された個数・容量(reserved)、割り当て比率(allocation_ratio)、使用する際の制約(最大割り当て量(max_unit)、最小割り当て量(min_unit)、割り当て単位(step_size))の情報のことです。アロケーションとは、リソース・プロバイダにおけるリソース・クラスの使用量のことです。

図1. リソース・プロバイダに対応するインベントリ、アロケーション、トレイト

コンピュート・ノードのnova-computeプロセスが起動する時に、(リソース・クラスがVCPU、MEMORY_MB、DISK_GB、VGPUについて)インベントリが自動で作成されます。

ここでは詳述しませんが、リソース・プロバイダにはCreate/List/Show/Update/Deleteの各APIが用意されています。また、インベントリを操作するためのAPIアロケーションに関するAPIも用意されています。また、リソース・プロバイダにはトレイト(後述)Placementアグリゲート(第3回で説明します)を設定することができ、そのためのAPIも用意されています。

リソース・クラス(Resource Class)

リソース・クラスはvCPU、メモリ、ディスクなどのリソースを表します。

標準的なリソース・クラス(Standard Resource Class)とカスタム・リソース・クラスがあり、標準的なリソース・クラスは以下のとおりとなっています。

・VCPU
・MEMORY_MB
・DISK_GB
・PCI_DEVICE
・SRIOV_NET_VF
・NUMA_SOCKET
・NUMA_CORE
・NUMA_THREAD
・NUMA_MEMORY_MB
・IPV4_ADDRESS
・VGPU
・VGPU_DISPLAY_HEAD

カスタム・リソース・クラスはCreate resource class API(POST /resource_classes)やopenstack CLIで作成することができます。カスタム・リソース・クラスの名前は以下の条件を満たす必要があります。

  1. 「CUSTOM_」で始まる。
  2. 「CUSTOM_」より後は英大文字、数字、_(アンダースコア)から成る文字列(「CUSTOM_」を除いて1文字以上)である。
  3. 合計で255文字以下である。

カスタム・リソース・クラスにより、Placementを利用するコンポーネントから、そのコンポーネントが必要とするリソース・クラスを定義できます。

NovaにおいてはVCPU、MEMORY_MB、DISK_GB以外のリソース・クラス(カスタム・リソース・クラスを含む)は、フレーバ(Flavor)のExtra specsに以下のように定義します。CLIでは openstack flavor setコマンド( — propertyオプション)で設定します。

また、ベアメタル・サーバのスケジューリング(Ironic連携)のために、VCPU、MEMORY_MB、DISK_GBを上書きしたい場合もExtra specsに設定します。

リソース・クラスに関するAPIは上述のCreate resource class API(POST /resource_classes)以外にList/Show/Update/DeleteのAPIが用意されています。

トレイト(Traits)

トレイトとは第1回でも説明したとおり、SSDなどの特徴を表すものです。トレイトはos-traitsというプロジェクトで定義されており、Novaはそのパッケージを利用しています。

トレイトにも標準的なトレイト(Standard Traits)とカスタム・トレイトがあり、標準的なトレイトには以下の種類があります。

・CPUの命令セット(例: HW_CPU_X86_SSE2)
・GPUのAPI(例: HW_GPU_API_DIRECTX_V12)
・NICのアクセラレータ(例: HW_NIC_ACCEL_TLS)
・ディスクの種類(例: STORAGE_DISK_SSD)
・共有ディスク(例: MISC_SHARES_VIA_AGGREGATE)
・ボリュームのアタッチ (例: COMPUTE_VOLUME_MULTI_ATTACH)
・NICのアタッチ (例: COMPUTE_NET_ATTACH_INTERFACE)

カスタム・トレイトはUpdate traits API(PUT /traits/{name})で作成することができます(トレイトに関するAPIはこちらを参照してください)。カスタム・トレイトの名前は以下の条件を満たす必要があります。

  1. 「CUSTOM_」で始まる。
  2. 「CUSTOM_」より後は英大文字、数字、_(アンダースコア)から成る文字列(「CUSTOM_」を除いて1文字以上)である。
  3. 合計で255文字以下である。

トレイトの使用方法ですが、GlanceイメージのプロパティまたはフレーバのExtra specsに指定します。その指定により、仮想サーバの配置先が選択されることになります。具体的な指定方法は以下の2つの方法となります。

a. フレーバ
Extra specsに「trait:トレイト名=required」を設定します。例は以下のとおりです。

b. Glanceイメージ
Glanceイメージのプロパティに「trait:トレイト名=required」を設定します。CLIではopenstack image setコマンド( — propertyオプション)で設定します。

なお、コンピュート・ノードのnova-computeプロセスが起動する時に、CPUに関するトレイトは自動でそのコンピュート・ノードのリソース・プロバイダに登録されます。

フォービドン・トレイト(Forbidden Traits)

フォービドン・トレイトとは、トレイトの除外指定になります。要するにスケジューリングにおいて、このトレイトを持つリソース・プロバイダーは選択しないという指定を行なうということになります。具体的な指定方法は以下のとおりになります。

a. フレーバ
Extra specsに「trait:トレイト名=forbidden」を設定します。例は以下のとおりです。

なお、Glanceイメージのプロパティでの設定は今のところサポートされていません。

さて第3回目はOpenStack Placementの機能 その2ということで、さらに他の機能を見ていきたいと思います。

--

--