7.3. Compute スケジューラーのフィルター

インスタンスをホストするのに適切なコンピュートノードを選択する際に Compute スケジューラーが適用しなければならないフィルターを指定するには、Compute 環境ファイルの NovaSchedulerDefaultFilters パラメーターを設定します。デフォルト設定では、以下のフィルターが適用されます。

  • AvailabilityZoneFilter: コンピュートノードは要求されたアベイラビリティーゾーンに属していなければならない。
  • ComputeFilter: コンピュートノードは要求に対応することができる。
  • ComputeCapabilitiesFilter: コンピュートノードはフレーバーの追加スペックを満足する。
  • ImagePropertiesFilter: コンピュートノードは要求されたイメージ属性を満足する。
  • ServerGroupAntiAffinityFilter: コンピュートノードは、まだ指定されたグループに属するインスタンスをホストしていない。
  • ServerGroupAffinityFilter: コンピュートノードは、すでに指定されたグループに属するインスタンスをホストしている。

フィルターを追加および削除することができます。利用可能なすべてのフィルターの詳細を以下の表に示します。

表7.1 Compute スケジューラーのフィルター

フィルター説明

AggregateImagePropertiesIsolation

このフィルターを使用して、インスタンスのイメージメタデータとホストアグリゲートのメタデータを照合します。いずれかのホストアグリゲートのメタデータがイメージのメタデータと一致する場合は、そのホストアグリゲートに属するコンピュートノードはそのイメージからインスタンスを起動する候補となります。スケジューラーは、有効なイメージメタデータ属性のみを認識します。有効なイメージメタデータ属性に関する詳細は、Image metadata properties を参照してください。

AggregateInstanceExtraSpecsFilter

このフィルターを使用して、インスタンスのフレーバー追加スペックで定義された名前空間属性とホストアグリゲートのメタデータを照合します。

フレーバー extra_specs キーのスコープは、aggregate_instance_extra_specs: namespace の前に付けて定義する必要があります。

いずれかのホストアグリゲートのメタデータがフレーバー追加スペックのメタデータと一致する場合は、そのホストアグリゲートに属するコンピュートノードはそのイメージからインスタンスを起動する候補となります。

AggregateIoOpsFilter

このフィルターを使用して、ホストアグリゲートごとの filter_scheduler/max_io_ops_per_host 値を条件に I/O 操作でホストを絞り込みます。ホストアグリゲートごとの値が確認されない場合は、値はグローバル設定にフォールバックします。ホストが複数のアグリゲートに属し、複数の値が確認された場合、スケジューラーは最小の値を使用します。

AggregateMultiTenancyIsolation

このフィルターを使用して、プロジェクト分離ホストアグリゲートに属するコンピュートノードの可用性を、指定したプロジェクトのセットに制限します。filter_tenant_id メタデータキーを使用して指定したプロジェクトだけが、ホストアグリゲートに属するコンピュートノードでインスタンスを起動することができます。詳しくは、Creating a project-isolated host aggregate を参照してください。

注記

プロジェクトが他のホストにインスタンスを配置することは可能です。これを制限するには、NovaSchedulerPlacementAggregateRequiredForTenants パラメーターを使用します。

AggregateNumInstancesFilter

このフィルターを使用して、アグリゲートに属する各コンピュートノードでホスト可能なインスタンスの数を制限します。filter_scheduler/max_instances_per_host パラメーターを使用して、ホストアグリゲートごとのインスタンスの最大数を設定することができます。ホストアグリゲートごとの値が確認されない場合は、値はグローバル設定にフォールバックします。コンピュートノードが複数のホストアグリゲートに属する場合、スケジューラーは最小の max_instances_per_host 値を使用します。

AggregateTypeAffinityFilter

フレーバーメタデータキーが設定されていない場合や、フレーバーアグリゲートメタデータの値に要求するフレーバーの名前が含まれる場合には、このフィルターを使用してホスト渡します。フレーバーメタデータエントリーの値は、単一のフレーバー名またはフレーバー名のコンマ区切りリストのいずれかを含む文字列です (例: m1.nano または m1.nano,m1.small)。

AllHostsFilter

このフィルターを使用して、利用可能なすべてのコンピュートノードをインスタンスのスケジューリング対象として考慮します。

注記

このフィルターを使用しても、他のフィルターは無効になりません。

AvailabilityZoneFilter

このフィルターを使用して、インスタンスが指定するアベイラビリティーゾーンに属するコンピュートノードでインスタンスを起動します。

ComputeCapabilitiesFilter

このフィルターを使用して、インスタンスのフレーバー追加スペックで定義した名前空間属性とコンピュートノードのケイパビリティーを照合します。フレーバーの追加スペックに capabilities: 名前空間の接頭辞を指定する必要があります。

ComputeCapabilitiesFilter フィルターを使用するよりも効率的な方法は、フレーバーで CPU 特性を使用することです。これは、Placement サービスに報告されます。特性により、CPU 機能に一貫性のある名前が付けられます。詳細は、Filtering by using resource provider traits を参照してください。

ComputeFilter

このフィルターを使用して、稼働中で有効なすべてのコンピュートノードを渡します。このフィルターは常に設定されている必要があります。

DifferentHostFilter

このフィルターを使用して、特定のインスタンスセットとは異なるコンピュートノードへのインスタンスのスケジューリングを有効にします。インスタンスの起動時にこれらのインスタンスを指定するには、--hint 引数を使用して different_host およびインスタンスの UUID をキー/値のペアとして指定します。

$ openstack server create --image cedef40a-ed67-4d10-800e-17455edce175 \
  --flavor 1 --hint different_host=a0cf03a5-d921-4877-bb5c-86d26cf818e1 \
  --hint different_host=8c19174f-4220-44f0-824a-cd1eeef10287 server-1

ImagePropertiesFilter

このフィルターを使用して、インスタンスイメージで定義された以下の属性に基づいてコンピュートノードを絞り込みます。

  • hw_architecture: ホストのアーキテクチャーを定義します (例: x86、ARM、および Power)。
  • img_hv_type: ハイパーバイザーの種別を定義します (例: KVM、QEMU、Xen、および LXC)。
  • img_hv_requested_version: Compute サービスが報告するハイパーバイザーのバージョンを定義します。
  • hw_vm_mode: ハイパーバイザーの種別を定義します (例: hvm、xen、uml、または exe)。

インスタンスに含まれる指定のイメージ属性をサポートできるコンピュートノードが、スケジューラーに渡されます。イメージの属性に関する詳細は、Image metadata properties を参照してください。

IsolatedHostsFilter

このフィルターを使用して、分離したコンピュートノード上で分離したイメージだけを使用してインスタンスをスケジュールします。また、filter_scheduler/restrict_isolated_hosts_to_isolated_images を設定して、分離したコンピュートノード上でのインスタンスのビルドに分離していないイメージが使用されるのを防ぐこともできます。

分離されたイメージとホストのセットを指定するには、filter_scheduler/isolated_hosts および filter_scheduler/isolated_images 設定オプションを使用します。以下に例を示します。

parameter_defaults:
  ComputeExtraConfig:
    nova::config::nova_config:
      filter_scheduler/isolated_hosts:
        value: server1, server2
      filter_scheduler/isolated_images:
        value: 342b492c-128f-4a42-8d3a-c5088cf27d13, ebd267a6-ca86-4d6c-9a0e-bd132d6b7d09

IoOpsFilter

このフィルターを使用して、(ホストで実行可能な高 I/O 負荷インスタンスの最大数を指定する) filter_scheduler/max_io_ops_per_host の設定値を超える同時 I/O 操作があるホストを除外します。

MetricsFilter

このフィルターを使用して、metrics/weight_setting を使用して設定されたメトリックを報告するコンピュートノードにスケジューリングを制限します。

このフィルターを使用するには、Compute 環境ファイルに以下の設定を追加します。

parameter_defaults:
  ComputeExtraConfig:
    nova::config::nova_config:
      DEFAULT/compute_monitors:
        value: 'cpu.virt_driver'

デフォルトでは、Compute スケジューラーサービスは 60 秒ごとにメトリックを更新します。メトリックが最新の状態になるようにするには、update_resources_interval 設定オプションを使用してメトリックデータの更新頻度を上げることができます。たとえば、以下の設定を使用すると、2 秒ごとにメトリックデータが更新されます。

parameter_defaults:
  ComputeExtraConfig:
    nova::config::nova_config:
      DEFAULT/update_resources_interval:
        value: '2'

NUMATopologyFilter

このフィルターを使用して、NUMA 対応コンピュートノードに NUMA トポロジーが設定されたインスタンスをスケジュールします。フレーバー extra_specs およびイメージ属性を使用して、インスタンスの NUMA トポロジーを指定します。このフィルターは、各ホストの NUMA セルのオーバーサブスクリプション限度を考慮して、インスタンスの NUMA トポロジーをコンピュートノードのトポロジーに一致させることを試みます。

NumInstancesFilter

このフィルターを使用して、max_instances_per_host オプションで指定した以上のインスタンスを実行中のコンピュートノードを除外します。

PciPassthroughFilter

このフィルターを使用して、フレーバー extra_specs を使用してインスタンスが要求するデバイスを持つコンピュートノードにインスタンスをスケジュールします。

(通常高価で使用が制限される) PCI デバイスを要求するインスタンス用に、そのデバイスを持つノードを確保する場合に、このフィルターを使用します。

SameHostFilter

このフィルターを使用して、特定のインスタンスセットと同じコンピュートノードへのインスタンスのスケジューリングを有効にします。インスタンスの起動時にこれらのインスタンスを指定するには、--hint 引数を使用して same_host およびインスタンスの UUID をキー/値のペアとして指定します。

$ openstack server create --image cedef40a-ed67-4d10-800e-17455edce175 \
  --flavor 1 --hint same_host=a0cf03a5-d921-4877-bb5c-86d26cf818e1 \
  --hint same_host=8c19174f-4220-44f0-824a-cd1eeef10287 server-1

ServerGroupAffinityFilter

このフィルターを使用して、同じコンピュートノード上でアフィニティーサーバーグループに属するインスタンスをスケジュールします。サーバーグループを作成するには、以下のコマンドを入力します。

$ openstack server group create --policy affinity <group_name>

このグループに属するインスタンスを起動するには、--hint 引数を使用して group およびグループの UUID をキー/値のペアとして指定します。

$ openstack server create --image <image> \
  --flavor <flavor> \
  --hint group=<group_uuid> <instance_name>

ServerGroupAntiAffinityFilter

このフィルターを使用して、異なるコンピュートノード上で非アフィニティーサーバーグループに属するインスタンスをスケジュールします。サーバーグループを作成するには、以下のコマンドを入力します。

$ openstack server group create --policy anti-affinity <group_name>

このグループに属するインスタンスを起動するには、--hint 引数を使用して group およびグループの UUID をキー/値のペアとして指定します。

$ openstack server create --image <image> \
  --flavor <flavor> \
  --hint group=<group_uuid> <instance_name>

SimpleCIDRAffinityFilter

このフィルターを使用して、特定の IP サブネット範囲を持つコンピュートノードにインスタンスをスケジュールします。必要な範囲を指定するには、--hint 引数を使用してインスタンスの起動時にキー build_near_host_ip および cidr を渡します。

$ openstack server create --image <image> \
  --flavor <flavor> \
  --hint build_near_host_ip=<ip_address> \
  --hint cidr=<subnet_mask> <instance_name>