6.3. ノード配置の制御
director のデフォルトの動作は、通常プロファイルタグをもとに、各ロールにノードが無作為に選択されますが、director には、固有のノード配置を定義する機能も備えられています。この手法は、以下の作業に役立ちます。
controller-0
、controller-1
などの固有のノード ID を割り当てる- カスタムのホスト名の割り当て
- 特定の IP アドレスの割り当て
- 特定の仮想 IP アドレスの割り当て
注記
予測可能な IP アドレス、仮想 IP アドレス、ネットワークのポートを手動で設定すると、割り当てプールの必要性が軽減されますが、新規ノードがスケーリングされた場合に対応できるように各ネットワーク用の割り当てプールは維持することを推奨します。静的に定義された IP アドレスは、必ず割り当てプール外となるようにしてください。割り当てプールの設定に関する詳しい情報は、「ネットワーク環境ファイルの作成」を参照してください。
6.3.1. 特定のノード ID の割り当て
以下の手順では、特定のノードにノード ID を割り当てます。ノード ID には、
controller-0
、controller-1
、compute-0
、compute-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
注記
プロファイル照合よりもノードの配置が優先されます。スケジューリングが機能しなくならないように、プロファイル照合用に設計されたフレーバー (
compute
、control
など) ではなく、デプロイメントにデフォルトの 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 つ選択します。