Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

6.3. ノード配置の制御

director のデフォルトの動作は、通常プロファイルタグをもとに、各ロールにノードが無作為に選択されますが、director には、固有のノード配置を定義する機能も備えられています。この手法は、以下の作業に役立ちます。
  • controller-0controller-1 などの固有のノード ID を割り当てる
  • カスタムのホスト名の割り当て
  • 特定の IP アドレスの割り当て
  • 特定の仮想 IP アドレスの割り当て

注記

予測可能な IP アドレス、仮想 IP アドレス、ネットワークのポートを手動で設定すると、割り当てプールの必要性が軽減されますが、新規ノードがスケーリングされた場合に対応できるように各ネットワーク用の割り当てプールは維持することを推奨します。静的に定義された IP アドレスは、必ず割り当てプール外となるようにしてください。割り当てプールの設定に関する詳しい情報は、「ネットワーク環境ファイルの作成」を参照してください。

6.3.1. 特定のノード ID の割り当て

以下の手順では、特定のノードにノード ID を割り当てます。ノード ID には、controller-0controller-1compute-0compute-1 などがあります。
最初のステップでは、デプロイメント時に Nova スケジューラーが照合するノード別ケイパビリティーとしてこの ID を割り当てます。以下に例を示します。
ironic node-update <id> replace properties/capabilities='node:controller-0,boot_option:local'
これにより、node:controller-0 の機能をノードに割り当てます。0 から開始するユニークな連続インデックスを使用して、すべてのノードに対してこのパターンを繰り返します。特定のロール (コントローラー、コンピュート、各ストレージロール) にすべてのノードが同じようにタグ付けされるようにします。そうでない場合は、このケイパビリティーは Nova スケジューラーにより正しく照合されません。
次のステップでは、Heat 環境ファイル (例: scheduler_hints_env.yaml) を作成します。このファイルは、スケジューラーヒントを使用して、各ノードのケイパビリティーと照合します。以下に例を示します。
parameter_defaults:
  ControllerSchedulerHints:
    'capabilities:node': 'controller-%index%'
これらのスケジューラーヒントを使用するには、オーバークラウドの作成時に、overcloud deploy command scheduler_hints_env.yaml 環境ファイルを追加します。
これらのパラメーターを使用してロールごとに、同じアプローチを使用することができます。
  • コントローラーノードの ControllerSchedulerHints
  • コンピュートノードの NovaComputeSchedulerHints
  • Block Storage ノードの BlockStorageSchedulerHints
  • Object Storage ノードの ObjectStorageSchedulerHints
  • Ceph Storage ノードの CephStorageSchedulerHints

注記

プロファイル照合よりもノードの配置が優先されます。スケジューリングが機能しなくならないように、プロファイル照合用に設計されたフレーバー (computecontrol など) ではなく、デプロイメントにデフォルトの baremetal フレーバーを使用します。以下に例を示します。
$ openstack overcloud deploy ... --control-flavor baremetal --compute-flavor baremetal ...

6.3.2. カスタムのホスト名の割り当て

「特定のノード ID の割り当て」 のノード ID の設定と組み合わせて、director は特定のカスタムホスト名を各ノードに割り当てることもできます。システムの場所 (例: rack2-row12) を定義する必要がある場合や、インベントリー ID を照合する必要がある場合、またはカスタムのホスト名が必要となるその他の状況において、カスタムのホスト名は便利です。
ノードのホスト名をカスタマイズするには、「特定のノード ID の割り当て」からの scheduler_hints_env.yaml ファイルなどの環境ファイルで HostnameMap パラメーターを使用します。以下に例を示します。
parameter_defaults:
  ControllerSchedulerHints:
    'capabilities:node': 'controller-%index%'
  NovaComputeSchedulerHints:
    'capabilities:node': 'compute-%index%'
  HostnameMap:
    overcloud-controller-0: overcloud-controller-prod-123-0
    overcloud-controller-1: overcloud-controller-prod-456-0
    overcloud-controller-2: overcloud-controller-prod-789-0
    overcloud-compute-0: overcloud-compute-prod-abc-0
parameter_defaults セクションで HostnameMap を定義し、各マッピングは、HostnameFormat パラメーターを使用して Heat が定義する元のホスト名に設定します (例: overcloud-controller-0)。また、2 つ目の値は、ノードに指定するカスタムのホスト名 (例: overcloud-controller-prod-123-0) にします。
ノード ID の配置と合わせてこの手法を使用することで、各ノードにカスタムのホスト名が指定されるようにします。

6.3.3. 予測可能な IP の割り当て

作成された環境でさらに制御を行う場合には、director はオーバークラウドノードに各ネットワークの固有の IP を割り当てることもできます。コアの Heat テンプレートコレクションにある environments/ips-from-pool-all.yaml 環境ファイルを使用します。このファイルを stack ユーザーの templates ディレクトリーにコピーしてください。
$ cp /usr/share/openstack-tripleo-heat-templates/environments/ips-from-pool-all.yaml ~/templates/.
ips-from-pool-all.yaml ファイルには、主に 2 つのセクションがあります。
1 番目のセクションは、デフォルトよりも優先される resource_registry の参照セットです。この参照では、director に対して、ノード種別のある特定のポートに特定の IP を使用するように指示を出します。適切なテンプレートの絶対パスを使用するように各リソースを編集してください。以下に例を示します。
  OS::TripleO::Controller::Ports::ExternalPort: /usr/share/openstack-tripleo-heat-templates/network/ports/external_from_pool.yaml
  OS::TripleO::Controller::Ports::InternalApiPort: /usr/share/openstack-tripleo-heat-templates/network/ports/internal_api_from_pool.yaml
  OS::TripleO::Controller::Ports::StoragePort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage_from_pool.yaml
  OS::TripleO::Controller::Ports::StorageMgmtPort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage_mgmt_from_pool.yaml
  OS::TripleO::Controller::Ports::TenantPort: /usr/share/openstack-tripleo-heat-templates/network/ports/tenant_from_pool.yaml
デフォルトの設定では、全ノード種別上にあるすべてのネットワークが、事前に割り当てられた IP を使用するように設定します。特定のネットワークやノード種別がデフォルトの IP 割り当てを使用するように許可するには、環境ファイルからノード種別やネットワークに関連する resource_registry のエントリーを削除するだけです。
2 番目のセクションは、実際の IP アドレスを割り当てる parameter_defaults です。各ノード種別には、関連するパラメーターが指定されます。
  • コントローラーノードの ControllerIPs
  • コンピュートノードの NovaComputeIPs
  • Ceph Storage ノードの CephStorageIPs
  • Block Storage ノードの BlockStorageIPs
  • Object Storage ノードの SwiftStorageIPs
各パラメーターは、アドレスの一覧へのネットワーク名のマッピングです。各ネットワーク種別には、そのネットワークにあるノード数と同じ数のアドレスが最低でも必要です。director はアドレスを順番に割り当てます。各種別の最初のノードは、適切な一覧にある最初のアドレスが割り当てられ、2 番目のノードは 2 番目のアドレスというように割り当てられていきます。
たとえば、オーバークラウドに 3 つの Ceph Storage ノードが含まれる場合には、CephStorageIPs パラメーターは以下のようになります。
CephStorageIPs:
  storage:
  - 172.16.1.100
  - 172.16.1.101
  - 172.16.1.102
  storage_mgmt:
  - 172.16.3.100
  - 172.16.3.101
  - 172.16.3.102
最初の Ceph Storage ノードは 172.16.1.100 と 172.16.3.100 の 2 つのアドレスを取得し、2 番目は 172.16.1.101 と 172.16.3.101、3 番目は 172.16.1.102 と 172.16.3.102 を取得します。他のノード種別でも同じパターンが適用されます。
選択した IP アドレスは、ネットワーク環境ファイルで定義されている各ネットワークの割り当てプールの範囲に入らないようにしてください (「ネットワーク環境ファイルの作成」 参照)。たとえば、internal_api の割り当ては InternalApiAllocationPools の範囲外となるようにします。これにより、自動的に選択される IP アドレスと競合が発生しないようになります。また同様に、IP アドレスの割り当てが標準の予測可能な仮想 IP 配置 (「予測可能な仮想 IP の割り当て」を参照) または外部のロードバランシング (「外部の負荷分散機能の設定」を参照) のいずれでも、仮想 IP 設定と競合しないようにしてください。
デプロイメント中にこの設定を適用するには、openstack overcloud deploy コマンドで環境ファイルを指定してください。ネットワーク分離の機能を使用する場合には (「「ネットワークの分離」」を参照)、このファイルを network-isolation.yaml ファイルの後に追加します。以下に例を示します。
$ openstack overcloud deploy --templates -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml -e ~/templates/ips-from-pool-all.yaml [OTHER OPTIONS]

6.3.4. 予測可能な仮想 IP の割り当て

director は、各ノードの予測可能な IP アドレスの定義に加えて、クラスター化されたサービス向けに予測可能な仮想 IP (VIP) を定義する同様の機能も提供します。この定義を行うには、「ネットワーク環境ファイルの作成」で作成したネットワークの環境ファイルを編集して、parameter_defaults セクションに仮想 IP のパラメーターを追加します。
parameter_defaults:
  ...
  ControlFixedIPs: [{'ip_address':'192.168.201.101'}]
  InternalApiVirtualFixedIPs: [{'ip_address':'172.16.0.9'}]
  PublicVirtualFixedIPs: [{'ip_address':'10.1.1.9'}]
  StorageVirtualFixedIPs: [{'ip_address':'172.18.0.9'}]
  StorageMgmtVirtualFixedIPs: [{'ip_address':'172.19.0.9'}]
  RedisVirtualFixedIPs: [{'ip_address':'172.16.0.8'}]
それぞれの割り当てプール範囲外の IP アドレスを選択します。たとえば、InternalApiAllocationPools の範囲外から、InternalApiVirtualFixedIPs の IP アドレスを 1 つ選択します。