Red Hat Training
A Red Hat training course is available for Red Hat OpenStack Platform
第3章 オーバークラウドへの OpenDaylight のインストール
本ガイドには、OpenDaylight のインストールを中心とした内容を記載しています。OpenDaylight をデプロイする前には、アンダークラウド環境が正常に機能しており、オーバークラウドノードが物理ネットワークに接続されていることを確認する必要があります。
『director のインストールと使用方法』で、アンダークラウドとオーバークラウドのデプロイに必要な手順を説明している「アンダークラウドのインストール」および「CLI ツールを使用した基本的なオーバークラウドの設定」の項を参照してください。
Red Hat OpenStack platform で OpenDaylight をインストールするには、いくつかの方法があります。次の章では、OpenDaylight の最も役立つシナリオとインストールの方法を紹介します。
3.1. デフォルトの設定と設定値のカスタマイズ
OpenDaylight のインストールの推奨される方法は、デフォルトの環境ファイル neutron-opendaylight.yaml
を使用して、そのファイルをアンダークラウドでデプロイメントコマンドに引数として渡す方法です。これにより、OpenDaylight のデフォルトのインストール環境がデプロイされます。
OpenDaylight インストールと設定のその他のシナリオは、このインストールの方法をベースとしています。基本的には、デプロイメントコマンドに特定の環境ファイルを指定するだけで、さまざまな異なるシナリオで OpenDaylight をデプロイすることができます。
3.1.1. デフォルトの環境ファイルについての理解
デフォルトの環境ファイルは neutron-opendaylight.yaml
という名前で、/usr/share/openstack-tripleo-heat-templates/environments/services-docker/
ディレクトリーにあります。このファイルで、OpenDaylight がサポートして使用するサービスを有効化/無効化します。また、デプロイメント中に director が設定する必須パラメーターを定義することもできます。
以下は、Docker ベースのデプロイメントに使用することのできる neutron-opendaylight.yaml
ファイルの例です。
# A Heat environment that can be used to deploy OpenDaylight with L3 DVR using Docker containers resource_registry: OS::TripleO::Services::NeutronOvsAgent: OS::Heat::None OS::TripleO::Services::ComputeNeutronOvsAgent: OS::Heat::None OS::TripleO::Services::ComputeNeutronCorePlugin: OS::Heat::None OS::TripleO::Services::OpenDaylightApi: ../../docker/services/opendaylight-api.yaml OS::TripleO::Services::OpenDaylightOvs: ../../puppet/services/opendaylight-ovs.yaml OS::TripleO::Services::NeutronL3Agent: OS::Heat::None OS::TripleO::Docker::NeutronMl2PluginBase: ../../puppet/services/neutron-plugin-ml2-odl.yaml parameter_defaults: NeutronEnableForceMetadata: true NeutronPluginExtensions: 'port_security' NeutronMechanismDrivers: 'opendaylight_v2' NeutronServicePlugins: 'odl-router_v2,trunk'
Red Hat OpenStack Platform director では、resource_registry
は、デプロイメントのリソースを対応するリソース定義の yaml ファイルにマッピングするのに使用されます。サービスは、マッピング可能なリソースの一種です。特定のサービスを無効にする必要がある場合には、OS::Heat::None
オプションに値を設定すると、そのサービスは、OpenDaylight 環境では使用されなくなります。デフォルトファイルには、OpenDaylightApi および OpenDaylightOvs のサービスが有効化されていますが、デフォルトの neutron エージェントの機能は OpenDaylight が取って代わるため、明示的に無効化されています。
Heat パラメーターは、director を使用したデプロイメントの設定値を設定するために使用されます。デフォルト値を上書きするには、環境ファイルの parameter_defaults
セクションを使用してください。
上記の例では、NeutronEnableForceMetadata
、NeutronMechanismDrivers
、NeutronServicePlugins
のパラメーターは、OpenDaylight を有効化するように設定しています。
その他のサービスとそれらの設定オプションは、本書の後半に記載しています。
3.1.2. OpenDaylight API サービスの設定
/usr/share/openstack-tripleo-heat-templates/puppet/services
ディレクトリーにある opendaylight-api.yaml
ファイルで保存されているデフォルト値を変更して、必要に応じて OpenDaylight API サービスを設定することができます。ただし、このファイルの設定は決して直接変更すべきではありません。このファイルはフォールバックする場合の解決方法として保管しておくのが賢明なので、この環境ファイルのコピーを作成して parameter_defaults
セクション内の必要な値を設定した方がよいでしょう。これは後でデプロイメントのコマンドで渡します。
デプロイメントのコマンドでは、前述した環境ファイルで指定されている全設定が、後に示す環境ファイルの設定に置き換えられます。このため、環境ファイルの順番は重要で、注意を払う必要があります。
3.1.2.1. 設定可能なオプション
OpenDaylight API サービス の設定時には、複数のパラメーターを設定することができます。
|
ノースバウンドの通信に使用するポートを設定します。デフォルトは |
|
OpenDaylight のログインユーザー名を設定します。デフォルトは |
|
OpenDaylight のログインパスワードを設定します。デフォルトは |
|
OpenDaylight を有効化して、DHCP サービスとして機能するようにします。デフォルトは |
|
OpenDaylight で起動する機能のコンマ区切りリスト。デフォルトは |
|
REST のアクセスに使用する L7 プロトコルを設定します。デフォルトは |
|
OpenDaylight リポジトリーを管理するかどうかを設定します。デフォルトは |
|
OpenDaylight が SNAT メカニズムを使用するように設定します。 |
3.1.3. OpenDaylight OVS サービスの設定
OpenDaylight OVS サービス は、/usr/share/openstack-tripleo-heat-templates/puppet/services
ディレクトリーにある opendaylight-ovs.yaml
ファイルでパラメーターとデフォルト値を参照することによって設定することができます。ただし、このファイルディレクトリーの設定は決して変更すべきではありません。このファイルはフォールバックする場合の解決方法として保管しておくのが賢明なので、この環境ファイルのコピーを作成して parameter_defaults
セクション内の必要な値を設定した方がよいでしょう。これは後でデプロイメントのコマンドで渡します。
デプロイメントのコマンドでは、前述した環境ファイルで指定されている全設定が、後に示す環境ファイルの設定に置き換えられます。このため、環境ファイルの順番は重要で、注意を払う必要があります。
3.1.3.1. 設定可能なオプション
OpenDaylight OVS サービス の設定時には、複数のパラメーターを指定することができます。
|
OpenDaylight へのノースバウンドの通信に使用するポートを設定します。デフォルトは |
|
REST アクセスに使用するレイヤー 7 プロトコル。デフォルトは |
|
OVS が接続する前に OpenDaylight が完全に稼働していることを確認するのに使用する URL。デフォルトは |
|
論理ネットワークと物理インターフェースの間のマッピングのコンマ区切りリスト。この設定は、VLAN デプロイメントに必要です。デフォルトは |
|
OpenDaylight OVS サービスのカスタムユーザー名を設定可能にします。 |
|
OpenDaylight OVS サービスのカスタムパスワードを設定可能にします。 |
|
この OVS ホストに許可されているネットワーク種別。nova インスタンスとネットワークのスケジュール先となるホストを制限するために、ホストまたはロールによって異なる場合があります。デフォルトは |
|
OVS で DPDK を有効化するかどうかを選択します。デフォルト値は |
|
vhostuser ポート作成での OVS のモードを指定します。クライアントモードでは、ハイパーバイザーが vhostuser ソケットを作成する役割を果たします。サーバーモードでは、OVS が vhostuser を作成します。デフォルト値は |
|
vhostuser ソケットを使用するディレクトリーを指定します。デフォルト値は |
3.1.4. OpenDaylight での neutron メタデーターサービスの使用
OpenStack Compute サービスにより、特定のアドレス 169.254.169.254 に対して Web 要求を実行することによって、仮想マシンはそれらに関連付けられたメタデータのクエリーを行うことができます。OpenStack Networking は、分離されたネットワークまたは重複する IP アドレスを使用する複数のネットワークから要求が実行された場合でも、そのような nova-api に対する要求をプロキシーします。
メタデータサービスは、neutron L3 エージェントルーターを使用して、 メタデータ要求または DHCP エージェントインスタンスに対応します。レイヤー 3 のルーティングプラグインを有効化して OpenDaylight をデプロイすると、neutron L3 エージェントが無効化されます。このため、テナントネットワークにルーターがある場合でも、メタデータは DHCP インスタンスを通過するように設定する必要があります。この機能は、デフォルトの環境ファイル neutron-opendaylight.yaml
で有効化されます。無効にするには、NeutronEnableForceMetadata
を false に設定してください。
仮想マシンインスタンスには、169.254.169.254/32
に DHCP オプション 121 を使用する静的なホストルートがインストールされます。この静的なルートが配置されていると、169.254.169.254:80
へのメタデータ要求は、DHCP ネットワーク名前空間内のメタデータ名前サーバープロキシーに送信されます。名前空間のプロキシーは、次に HTTP ヘッダーをインスタンスの IP と共に要求に追加し、Unix ドメインソケットを介して、メタデータエージェントに接続します。メタデータエージェントは、neutron にクエリーを実行し、送信元の IP とネットワーク ID に対応するインスタンス ID を要求し、それを nova メタデータサービスにプロキシーします。追加の HTTP ヘッダーは、テナント間の分離を維持し、重複する IP をサポートできるようにするのに必要です。
3.1.5. ネットワーク設定と NIC テンプレートについての理解
Red Hat OpenStack Platform director では、物理的な neutron ネットワークのデータセンターは、デフォルトで br-ex という名前の OVS ブリッジにマッピングされます。これは、OpenDaylight の統合と常に同じです。デフォルトの OpenDaylightProviderMappings
を使用して flat または VLAN _External ネットワークを作成する予定の場合には、コンピュートノード用の NIC テンプレートで OVS br-ex ブリッジを設定する必要があります。レイヤー 3 プラグインは、これらのノードに対して分散ルーティングを使用するので、Controller ロールの NIC テンプレートでは br-ex を設定する必要はなくなります。
br-ex ブリッジは、ネットワーク分離内の任意のネットワークにマッピングすることができますが、例に示したように、通常は外部ネットワークにマッピングされます。
type: ovs_bridge name: {get_input: bridge_name} use_dhcp: false members: - type: interface name: nic3 # force the MAC address of the bridge to this interface primary: true dns_servers: {get_param: DnsServers} addresses: - ip_netmask: {get_param: ExternalIpSubnet} routes: - default: true ip_netmask: 0.0.0.0/0 next_hop: {get_param: ExternalInterfaceDefaultRoute}
DPDK では、別の OVS ブリッジを作成する必要があります。これは、通常は br-phy という名前で、ovs-dpdk ポートと共に指定します。ブリッジの IP アドレスは、VXLAN オーバーレイネットワークトンネル向けに設定されます。
type: ovs_user_bridge name: br-phy use_dhcp: false addresses: - ip_netmask: {get_param: TenantIpSubnet} members: - type: ovs_dpdk_port name: dpdk0 driver: uio_pci_generic members: - type: interface name: nic1 # force the MAC address of the bridge to this interface primary: true
ネットワーク分離を使用する場合には、コンピュートノード上のこのブリッジには IP アドレスまたはデフォルトのルートを配置する必要はありません。
また、br-ex
ブリッジを完全に使用することなく、外部ネットワークアクセスを設定することが可能です。このメソッドを使用するには、オーバークラウドのコンピュートノードのインターフェース名を前もって確認しておく必要があります。たとえば、コンピュートノード上の 3 番目のインターフェースの確定的な名前が eth3 の場合には、コンピュートノード用の NIC テンプレートでインターフェースを指定するのにその名前を使用することができます。
- type: interface name: eth3 use_dhcp: false
3.2. OpenDaylight の基本インストール
本項では、標準の環境ファイルを使用して OpenDaylight をデプロイする方法を説明します。
3.2.1. オーバークラウド用の OpenDaylight 環境ファイルの準備
作業を開始する前に
- アンダークラウドをインストールします (「アンダークラウドのインストール」 を参照)。
- オプションで、オーバークラウドと OpenDaylight のインストール中に使用するコンテナーイメージが含まれたローカルレジストリーを作成します。作成方法については、『director のインストールと使用方法』ガイドの「コンテナーレジストリー情報の設定」を参照してください。
手順
アンダークラウドにログオンして、admin の認証情報を読み込みます。
$ source ~/stackrc
オーバークラウドのインストールに使用される docker コンテナーイメージへの参照が記載されたレジストリーファイル
docker-images.yaml
を作成します。$ openstack overcloud container image prepare --pull-source registry.access.redhat.com --namespace rhosp12 \ --prefix=openstack- --suffix=-docker --tag latest \ -e /usr/share/openstack-tripleo-heat-templates/environments/docker.yaml \ --env-file /home/stack/templates/docker-images.yaml
OpenDaylight インストール用の docker コンテナーイメージへの参照が記載されたレジストリーファイル
odl-images.yaml
を作成します。$ openstack overcloud container image prepare --pull-source registry.access.redhat.com --namespace rhosp12 \ --prefix=openstack- --suffix=-docker --tag latest \ -e /usr/share/openstack-tripleo-heat-templates/environments/services-docker/neutron-opendaylight.yaml \ --env-file /home/stack/templates/odl-images.yaml
- オーバークラウドをデプロイするための環境の作成が正常に完了し、「OpenDaylight を実装するオーバークラウドのインストール」に記載のインストールを開始する準備が整いました。
詳細情報
openstack overcloud image prepare
コマンドは、オーバークラウドと OpenDaylight のインストール用のコンテナーイメージ環境ファイルを準備します。このコマンドでは、以下のオプションを使用します。
- -e
- OpenDaylight、OVS など、その環境に必要な特定のコンテナーイメージを追加するためのサービス環境ファイルを指定します。
- --env-file
- インストールに使用されるコンテナーイメージの一覧を記載した新規コンテナーイメージの環境ファイルを作成します。
- --pull-source
- Docker コンテナーレジストリーの場所を設定します。
- --namespace
- Docker コンテナーのバージョンを設定します。
- --prefix
- イメージ名にプレフィックスを追加します。
- --suffix
- イメージ名にサフィックスを追加します。
- --tag
- イメージのリリースを定義します。
3.2.2. OpenDaylight を実装するオーバークラウドのインストール
作業を開始する前に
- 「オーバークラウド用の OpenDaylight 環境ファイルの準備」の手順に従って、デプロイメントに必要な環境ファイルを作成します。
手順
アンダークラウドにログオンして、admin の認証情報を読み込みます。
$ source ~/stackrc
事前に作成した環境ファイルを使用してオーバークラウドをデプロイします。
$ openstack overcloud deploy --templates /usr/share/openstack-tripleo-heat-templates \ -e /usr/share/openstack-tripleo-heat-templates/environments/docker.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/services-docker/neutron-opendaylight.yaml \ -e /home/stack/templates/docker-images.yaml \ -e /home/stack/templates/odl-images.yaml -e <other needed environment files>
複数の環境ファイルで同じパラメーターが記述されている場合には、先に適用される環境ファイルの設定は、後で適用される環境ファイルによって上書きされます。パラメーターが誤って設定されるのを防ぐために、環境ファイルの指定順序には注意を払う必要があります。
変更するパラメーターのみを設定する最小限の環境ファイルを作成して、デフォルトの環境ファイルと組み合わせることにより、一部のパラメーターは簡単に上書きすることができます。
詳細情報
オーバークラウドと OpenDaylight をデプロイする上記の openstack overcloud deploy
コマンドには、以下のオプションを使用します。
- --templates
- Heat テンプレートが保管されているディレクトリーのパスを定義します。
- -e
- 読み込む環境ファイルを指定します。
3.3. カスタムロールでの OpenDaylight のインストール
カスタムロールで OpenDaylight をインストールすると、OpenDaylightApi サービスが分離されて、コントローラーノードとは異なる、指定の OpenDaylight ノードで実行されます。
OpenDaylight 用のカスタムロールを使用するには、ノードのレイアウトと機能を設定するロールファイルを作成する必要があります。
3.3.1. デフォルトロールをベースとするロールファイルのカスタマイズ
OpenStack では、ユーザー定義のロールリストを使用してデプロイするオプションが提供されています。各ロールはユーザー定義のサービスリストを実行します (ここで「ロール」とは、「Controller」などのノードグループを意味し、「service」は「nova API」などの個別のサービスまたは設定を指します)。ロールの例は openstack-tripleo-heat-templates
で提供されています。
これらのロールを使用して、オーバークラウドノードに必要なロールが記載された roles_data.yaml
ファイルを作成することができます。また、ディレクトリー内に個別のファイルを作成し、それらを使用して新しい roles_data.yaml
を生成することによって、個人のカスタムロールを作成することも可能です。
特定の OpenStack ロールのみをインストールするカスタマイズされた環境ファイルを作成するには、以下の手順に従います。
手順
admin の認証情報を読み込みます。
$ source ~/stackrc
後でデプロイメントに使用する
roles_data.yaml
ファイルを生成するのに使用可能なデフォルトロールを一覧表示します。$ openstack overcloud role list
これらの全ロールを使用する場合には、以下のコマンドを実行して
roles_data.yaml
ファイルを生成します。$ openstack overcloud roles generate -o roles_data.yaml
上記のコマンドでロール名を引数として渡すことによって、ロールファイルをカスタマイズして一部のロールのみが含まれるようにすることができます。Controller、Compute、Telemetry ロールで
roles_data.yaml
ファイルを作成するには、以下のコマンドを実行します。$ openstack overcloud roles generate - roles_data.yaml Controller Compute Telemetry
3.3.2. OpenDaylight 用のカスタムロールの作成
カスタムロールを作成するには、そのロールを定義する新規ロールファイルを作成する必要があります。次にそのファイルを他のロールファイルが保管されているディレクトリーに配置してから、新規作成するロールの含まれた roles_data.yaml
ファイルを生成します。特定のロールのみが含まれる特定のロールファイルがカスタムロールごとに必要となります。ファイル名はロール名と一致する必要があります。
このファイルでは、少なくとも以下のパラメーターを定義する必要があります。
Name:
ロール名を定義します。この名前は、必ず空にせず、一意の文字列する必要があります。- Name: Custom_role
ServicesDefault:
このロールで使用するサービスをリストします。サービスを使用しない場合には、この変数は空のままにすることができます。以下に書式の例を示します。ServicesDefault: - OS::TripleO::Services::AuditD - OS::TripleO::Services::CACerts - OS::TripleO::Services::CertmongerUser - OS::TripleO::Services::Collectd - OS::TripleO::Services::Docker
必須のパラメーター以外に、他の設定も定義することができます。
CountDefault:
デフォルトのノード数を定義します。空の場合には、デフォルトでゼロに設定されます。CountDefault: 1
HostnameFormatDefault:
ホスト名の書式文字列を定義します。この値は任意です。HostnameFormatDefault: '%stackname%-computeovsdpdk-%index%'
Description:
ロールを説明し、それについての情報を追加します。Description: Compute OvS DPDK Role
手順
デフォルトのロールファイルを新規ディレクトリーにコピーします。元のファイルは、フォールバックする場合の解決方法として保管してください。
$ mkdir ~/roles $ cp /usr/share/openstack-tripleo-heat-templates/roles/* ~/roles
コントローラーノードで OpenDaylightAPI サービスをスイッチオフします。そのためには、
~/roles
にあるController.yaml
ファイルでデフォルトのコントローラーロールを編集し、そのファイルからOpenDaylightApi
の行を削除します。- name: Controller CountDefault: 1 ServicesDefault: - OS::TripleO::Services::TripleoFirewall - OS::TripleO::Services::OpenDaylightApi #<--Remove this - OS::TripleO::Services::OpenDaylightOvs
~/roles
ディレクトリーに新しいOpenDaylight.yaml
ファイルを作成し、OpenDaylight ロールの説明を追加します。- name: OpenDaylight CountDefault: 1 ServicesDefault: - OS::TripleO::Services::Kernel - OS::TripleO::Services::Ntp - OS::TripleO::Services::OpenDaylightApi - OS::TripleO::Services::TripleoPackages - OS::TripleO::Services::TripleoFirewall - OS::TripleO::Services::Docker - OS::TripleO::Services::Sshd
- ファイルを保存します。
OpenDaylight をカスタムロールで実装する OpenStack オーバークラウドのデプロイに使用する新規ロールファイルを生成します。
$ openstack overcloud roles generate --roles-path ~/roles -o ~/roles_data.yaml Controller Compute OpenDaylight
3.3.3. OpenDaylight をカスタムロールで実装するオーバークラウドのインストール
作業を開始する前に
- アンダークラウドをインストールします (「アンダークラウドのインストール」 を参照)。
- オーバークラウドのコンテナーイメージへのリンクを記載した環境ファイルを作成します (「オーバークラウド用の OpenDaylight 環境ファイルの準備」を参照)。
- カスタムロールで OpenDaylight を設定するためのロールファイルを作成します (「OpenDaylight 用のカスタムロールの作成」を参照)。
手順
-r 引数を指定してデプロイメントコマンドを実行し、デフォルトのロール定義を上書きします。 このオプションは、カスタマイズされたロールが設定されている別の
roles_data.yaml
を使用するようにデプロイメントコマンドに指示します。以下の例では、ironic ノードが合計で 3 つあり、その中の 1 つがカスタムの OpenDaylight ロール用に確保されます。$ openstack overcloud deploy --templates /usr/share/openstack-tripleo-heat-templates -e /usr/share/openstack-tripleo-heat-templates/environments/docker.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/services-docker/neutron-opendaylight.yaml -e network-environment.yaml --compute-scale 1 --ntp-server 0.se.pool.ntp.org --control-flavor control --compute-flavor compute -r ~/roles_data.yaml -e /home/stack/templates/docker-images.yaml -e /home/stack/templates/odl-images.yaml
後に指定する環境ファイルのパラメーターにより、前の環境ファイルのパラメーターが上書きされます。パラメーターが誤って上書きされるのを防ぐために、環境ファイルの指定順序には注意を払う必要があります。
変更するパラメーターのみを設定する最小限の環境ファイルを作成して、デフォルトの環境ファイルと組み合わせることにより、一部のパラメーターは簡単に上書きすることができます。
詳細情報
この引数は、Red Hat OpenStack Platform director 内のロール定義をインストール時に上書きするのに使用されます。
-r <roles_data>.yaml
- カスタムロールを使用するには、インストール中にそのカスタムロール用に使用する追加の ironic ノードが必要となります。
3.3.4. カスタムロールでの OpenDaylight インストールの検証
作業を開始する前に
- カスタムロールで OpenDaylight を実装するオーバークラウドをインストールします (「 OpenDaylight をカスタムロールで実装するオーバークラウドのインストール」を参照)。
手順
既存のインスタンスを一覧表示します。
$ openstack server list
結果を確認し、新規 OpenDaylight ロールが 1 つのインスタンスとして専用になっていることを確認します。
+--------------------------------------+--------------------------+--------+------------+-------------+--------------------+ | ID | Name | Status | Task State | Power State | Networks | +--------------------------------------+--------------------------+--------+------------+-------------+--------------------+ | 360fb1a6-b5f0-4385-b68a-ff19bcf11bc9 | overcloud-controller-0 | BUILD | spawning | NOSTATE | ctlplane=192.0.2.4 | | e38dde02-82da-4ba2-b5ad-d329a6ceaef1 | overcloud-novacompute-0 | BUILD | spawning | NOSTATE | ctlplane=192.0.2.5 | | c85ca64a-77f7-4c2c-a22e-b71d849a72e8 | overcloud-opendaylight-0 | BUILD | spawning | NOSTATE | ctlplane=192.0.2.8 | +--------------------------------------+--------------------------+--------+------------+-------------+--------------------+
3.4. SR-IOV 対応の OpenDaylight のインストール
OpenDaylight は、Single Root Input/Output Virtualization (SR-IOV) 対応のコンピュートノードと共にデプロイすることができます。このデプロイメントでは、コンピュートノードは、SR-IOV のみの専用ノードで稼働する必要があり、OVS をベースとする nova インスタンスを混在させるべきではありません。単一の OpenDaylight デプロイメント内で OVS と SR-IOV のコンピュートノードの両方をデプロイすることは可能です。
本項では、上記のシナリオに沿ってカスタムの SR-IOV コンピュートロールを使用してこのタイプのデプロイメントを行います。
SR-IOV のデプロイメントでは、neutron SR-IOV エージェントを使用して、Virtual Function (VF) を設定する必要があります。これは、デプロイ時に Compute インスタンスに直接渡されて、そこでネットワークポートとして機能します。VF はコンピュートノード上のホスト NIC から派生するので、デプロイメントを開始する前に、ホストのインターフェースに関する情報が必要となります。
3.4.1. SR-IOV コンピュートロールの準備
「カスタムロールでの OpenDaylight のインストール」に記載したのと同じ方法に従って、SR-IOV コンピュートノード用のカスタムロールを作成し、デフォルトの Compute ロールが OVS ベースの nova インスタンスに対応する一方で、SR-IOV ベースのインスタンスを作成できるようにする必要があります。
作業を開始する前に
- 「カスタムロールでの OpenDaylight のインストール」の章を参照してください。
手順
デフォルトのロールファイルを新規ディレクトリーにコピーします。元のファイルは、フォールバックする場合の解決方法として保管してください。
$ mkdir ~/roles $ cp /usr/share/openstack-tripleo-heat-templates/roles/* ~/roles
~/roles
ディレクトリーに新しいComputeSriov.yaml
ファイルを作成して、ロールの説明を追加します。- name: ComputeSRIOV CountDefault: 1 ServicesDefault: - OS::TripleO::Services::Kernel - OS::TripleO::Services::Ntp - OS::TripleO::Services::NeutronSriovHostConfig - OS::TripleO::Services::NeutronSriovAgent - OS::TripleO::Services::TripleoPackages - OS::TripleO::Services::TripleoFirewall - OS::TripleO::Services::Sshd - OS::TripleO::Services::NovaCompute - OS::TripleO::Services::NovaLibvirt - OS::TripleO::Services::NovaMigrationTarget - OS::TripleO::Services::Timezone - OS::TripleO::Services::ComputeNeutronCorePlugin - OS::TripleO::Services::Securetty
- ファイルを保存します。
NeutronSriovAgent
およびNeutronSriovHostConfig
のサービスをデフォルトの Compute ロールから削除し、対応するロールファイルを保存します。- OS::TripleO::Services::NeutronSriovHostConfig - OS::TripleO::Services::NeutronSriovAgent
OpenStack オーバークラウドでデプロイする、OpenDaylight の SR-IOV 対応のコンピュートに使用する新規ロールファイルを生成します。
$ openstack overcloud roles generate --roles-path ~/roles -o ~/roles_data.yaml Controller Compute ComputeSriov
3.4.2. SR-IOV エージェントサービスの設定
SR-IOV 対応の OpenDaylight をデプロイするには、neutron-opendaylight.yaml
ファイルで設定されているデフォルトのパラメーターを上書きする必要があります。標準の SR-IOV 環境ファイルは /usr/share/openstack-tripleo-heat-templates
にあります。ただし、元のファイルは編集しないのがグッドプラクティスです。このため、元の環境ファイルのコピーを作成して、そのコピー内で必要なパラメーターを変更する必要があります。
また、変更するパラメーターのみを指定する新規環境ファイルを作成して、両方のファイルをデプロイメントに使用することができます。カスタマイズされた OpenDaylight をデプロイするには、デプロイメントコマンドに両方のファイルを渡します。後で指定する環境ファイルが前の設定を上書きするので、正しい順序 (最初に neutron-opendaylight.yaml
ファイル、次に neutron-opendaylight-sriov.yaml
ファイルの順序) で使用する必要があります。
OpenDaylight と SR-IOV をデフォルト設定でデプロイする場合には、Red Hat で提供している neutron-opendaylight-sriov.yaml
を使用することができます。パラメーターを変更または追加する必要がある場合には、デフォルトの SR-IOV 環境ファイルのコピーを作成して、その新規作成されたファイルを編集してください。
カスタマイズされた neutron-opendaylight-sriov.yaml
ファイルの例を以下に示します。
# A Heat environment that can be used to deploy OpenDaylight with SRIOV resource_registry: OS::TripleO::Services::NeutronOvsAgent: OS::Heat::None OS::TripleO::Services::ComputeNeutronOvsAgent: OS::Heat::None OS::TripleO::Services::ComputeNeutronCorePlugin: ../puppet/services/neutron-plugin-ml2.yaml OS::TripleO::Services::NeutronCorePlugin: ../puppet/services/neutron-plugin-ml2-odl.yaml OS::TripleO::Services::OpenDaylightApi: ../docker/services/opendaylight-api.yaml OS::TripleO::Services::OpenDaylightOvs: ../puppet/services/opendaylight-ovs.yaml OS::TripleO::Services::NeutronSriovAgent: ../puppet/services/neutron-sriov-agent.yaml OS::TripleO::Services::NeutronL3Agent: OS::Heat::None parameter_defaults: NeutronEnableForceMetadata: true NeutronPluginExtensions: 'port_security' NeutronMechanismDrivers: ['sriovnicswitch','opendaylight_v2'] NeutronServicePlugins: 'odl-router_v2,trunk' # Add PciPassthroughFilter to the scheduler default filters #NovaSchedulerDefaultFilters: ['RetryFilter','AvailabilityZoneFilter','RamFilter','ComputeFilter','ComputeCapabilitiesFilter', 'ImagePropertiesFilter','ServerGroupAntiAffinityFilter','ServerGroupAffinityFilter','PciPassthroughFilter'] #NovaSchedulerAvailableFilters: ["nova.scheduler.filters.all_filters","nova.scheduler.filters.pci_passthrough_filter.PciPassthroughFilter"] #NeutronPhysicalDevMappings: "datacentre:ens20f2" # Number of VFs that needs to be configured for a physical interface #NeutronSriovNumVFs: "ens20f2:5" #NovaPCIPassthrough: # - devname: "ens20f2" # physical_network: "datacentre"
詳細情報
前述の yaml ファイルでは、以下のオプションを設定することができます。以下の表には、各オプションについての説明と、SR-IOV 機能を有効化するために必要な設定を記載します。
|
SR-IOV 用の PCI パススルーを使用できるようにします。このパラメーターは、環境ファイル内でコメント解除して、 |
|
Nova のデフォルトフィルターに PCI パススルーフィルターを指定できるようにします。このパラメーターは必須で、 |
|
neutron の論理ネットワークをホストのネットワークインターフェースにマッピングします。neutron が仮想ネットワークを物理ポートにバインドできるようにするには、このパラメーターを指定する必要があります。 |
|
ホストのネットワークインターフェース用に作成する VF 数。構文: |
|
PCI パススルーでの使用を許可する nova の PCI デバイスのホワイトリストを一覧形式で設定します。以下に例を示します。 NovaPCIPassthrough: - vendor_id: "8086" product_id: "154c" address: "0000:05:00.0" physical_network: "datacentre" 特定のハードウェア属性の代わりに単に論理デバイス名を使用することもできます。 NovaPCIPassthrough: - devname: "ens20f2" physical_network: "datacentre" |
3.4.3. SR-IOV 対応の OpenDaylight のインストール
作業を開始する前に
- アンダークラウドをインストールします (「アンダークラウドのインストール」 を参照)。
- オーバークラウドのコンテナーイメージへのリンクを記載した環境ファイルを作成します (「オーバークラウド用の OpenDaylight 環境ファイルの準備」を参照)。
- カスタムロールで SR-IOV 対応の OpenDaylight を設定するためのロールファイルを作成します (「SR-IOV コンピュートロールの準備」を参照)。
手順
-r
引数を使用してデプロイメントコマンドを実行し、カスタマイズしたロールファイルと OpenDaylight で SR-IOV 機能を設定するのに必要な環境ファイルを指定します。$ openstack overcloud deploy --templates /usr/share/openstack-tripleo-heat-templates -e /usr/share/openstack-tripleo-heat-templates/environments/docker.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/services-docker/neutron-opendaylight.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/services-docker/neutron-opendaylight-sriov.yaml -e network-environment.yaml --compute-scale 1 --ntp-server 0.se.pool.ntp.org --control-flavor control --compute-flavor compute -r my_roles_data.yaml -e /home/stack/templates/docker-images.yaml -e /home/stack/templates/odl-images.yaml -e <other needed environment files>
後に指定する環境ファイルのパラメーターにより、前の環境ファイルのパラメーターが上書きされます。パラメーターが誤って上書きされるのを防ぐために、環境ファイルの指定順序には注意を払う必要があります。
変更するパラメーターのみを設定する最小限の環境ファイルを作成して、デフォルトの環境ファイルと組み合わせることにより、一部のパラメーターは簡単に上書きすることができます。
詳細情報
インストール時にロールの定義を上書きするには、
-r
オプションを使用します。-r <roles_data>.yaml
- カスタムロールを使用するには、インストール中にそのカスタムロール用に使用する追加の ironic ノードが必要となります。
3.5. OVS-DPDK 対応の OpenDaylight のインストール
OpenDaylight は、director を使用して Open vSwitch Data Plane Development Kit (DPDK) アクセラレーションに対応するようにデプロイすることができます。このデプロイメントでは、カーネル空間ではなくユーザー空間でパケットが処理されるために、データプレーンパフォーマンスが向上します。OVS-DPDK 対応のデプロイメントには、潜在的なパフォーマンスを引き出すために、各コンピュートノードのハードウェア物理レイアウトに関する知識が必要です。
特に次の点を考慮すべきです。
- ホスト上のネットワークインターフェースが DPDK をサポートしていること
- コンピュートノードの NUMA ノードのトポロジー (ソケット数、CPU コア、1 ソケットあたりのメモリー容量)
- DPDK NIC PCI バスが各 NUMA ノードに近いこと
- コンピュートノード上で使用可能な RAM 容量
- 『ネットワーク機能仮想化 (NFV) のプランニングおよび設定ガイド』を参照すること
3.5.1. OVS-DPDK デプロイメントファイルの準備
OVS-DPDK をデプロイするには、異なる環境ファイルを使用します。このファイルは、/usr/share/openstack-tripleo-heat-templates/environments/services-docker
ディレクトリーにある neutron-opendaylight.yaml
ファイルで設定されている一部のパラメーターを上書きします。ただし、元のファイルは変更すべきではありません。代わりに新規環境ファイル (例: neutron-opendaylight-dpdk.yaml
) を作成して、そこで必要なパラメーターを設定することができます。
デフォルトの設定を使用して OVS-DPDK 対応の OpenDaylight をデプロイするには、Red Hat で提供している neutron-opendaylight-dpdk.yaml
を使用することができます。このファイルは、/usr/share/openstack-tripleo-heat-templates/environments/services-docker
ディレクトリーにあります。
デフォルトのファイルには、以下の値が含まれています。
# A Heat environment that can be used to deploy OpenDaylight with L3 DVR and DPDK. # This file is to be used with neutron-opendaylight.yaml parameter_defaults: NovaSchedulerDefaultFilters: "RamFilter,ComputeFilter,AvailabilityZoneFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,NUMATopologyFilter" OpenDaylightSNATMechanism: 'controller' ComputeOvsDpdkParameters: OvsEnableDpdk: True ## Host configuration Parameters #TunedProfileName: "cpu-partitioning" #IsolCpusList: "" # Logical CPUs list to be isolated from the host process (applied via cpu-partitioning tuned). # It is mandatory to provide isolated cpus for tuned to achive optimal performance. # Example: "3-8,12-15,18" #KernelArgs: "" # Space separated kernel args to configure hugepage and IOMMU. # Deploying DPDK requires enabling hugepages for the overcloud compute nodes. # It also requires enabling IOMMU when using the VFIO (vfio-pci) OvsDpdkDriverType. # This should be done by configuring parameters via host-config-and-reboot.yaml environment file. ## Attempting to deploy DPDK without appropriate values for the below parameters may lead to unstable deployments ## due to CPU contention of DPDK PMD threads. ## It is highly recommended to to enable isolcpus (via KernelArgs) on compute overcloud nodes and set the following parameters: #OvsDpdkSocketMemory: "" # Sets the amount of hugepage memory to assign per NUMA node. # It is recommended to use the socket closest to the PCIe slot used for the # desired DPDK NIC. Format should be comma separated per socket string such as: # "<socket 0 mem MB>,<socket 1 mem MB>", for example: "1024,0". #OvsDpdkDriverType: "vfio-pci" # Ensure the Overcloud NIC to be used for DPDK supports this UIO/PMD driver. #OvsPmdCoreList: "" # List or range of CPU cores for PMD threads to be pinned to. Note, NIC # location to cores on socket, number of hyper-threaded logical cores, and # desired number of PMD threads can all play a role in configuring this setting. # These cores should be on the same socket where OvsDpdkSocketMemory is assigned. # If using hyperthreading then specify both logical cores that would equal the # physical core. Also, specifying more than one core will trigger multiple PMD # threads to be spawned, which may improve dataplane performance. #NovaVcpuPinSet: "" # Cores to pin Nova instances to. For maximum performance, select cores # on the same NUMA node(s) selected for previous settings.
3.5.2. OVS-DPDK デプロイメントの設定
neutron-opendaylight-dpdk.yaml
の値を変更して、 OVS-DPDK サービスを設定することができます。
|
IRQ のピニングを有効化して、OVS-DPDK で使用する CPU コアから分離します。デフォルトプロファイル: |
|
CPU コアの一覧を指定し、カーネルスケジューラーがそれらのコアを使用しないようにして、代わりに OVS-DPDK に割り当てて専用にすることができます。書式は、個々のコアのコンマ区切りリストまたは範囲で指定します (例: |
|
ブート時にカーネルに渡す引数をリストします。OVS-DPDK の場合は、
---- 上記で指定している RAM の容量はヒュージページ用の 60 GB であることに注意してください。この値を設定する場合には、コンピュートノードで利用可能な RAM 容量を考慮することが重要です。 |
|
各 NUMA ノードに割り当てるヒュージページメモリーの容量を (MB 単位で) 指定します。パフォーマンスを最大限にするには、DPDK NIC に最も近いソケットにメモリーを割り当てます。ソケットあたりのメモリーをリストする形式は以下のようになります。 ---- "<socket 0 mem MB>,<socket 1 mem MB>" ---- 例: "1024,0" |
|
PMD スレッドに使用する UIO ドライバーの種別を指定します。DPDK NIC がサポートしているドライバーを指定する必要があります。種別には |
|
PMD スレッドのピニング先となる個々のコアまたは範囲をリストします。ここで指定するコアは、 |
|
ソケットあたりのメモリーチャネルの数を指定します。 |
|
libvirtd で nova インスタンスをピニングするコア。パフォーマンスを最適にするには、OVS PMD コアがピニングされているのと同じソケット上のコアを使用してください。 |
3.5.3. OVS-DPDK を実装する OpenDaylight のインストール
作業を開始する前に
- アンダークラウドをインストールします (「アンダークラウドのインストール」 を参照)。
- オーバークラウドのコンテナーイメージへのリンクを記載した環境ファイルを作成します (「オーバークラウド用の OpenDaylight 環境ファイルの準備」を参照)。
- カスタムロールで SR-IOV 対応の OpenDaylight を設定するためのロールファイルを作成します ( 「OVS-DPDK デプロイメントファイルの準備」を参照)。
手順
- OpenDaylight で DPDK 機能を設定するのに必要な環境ファイルを使用してデプロイメントコマンドを実行します。
$ openstack overcloud deploy --templates /usr/share/openstack-tripleo-heat-templates -e /usr/share/openstack-tripleo-heat-templates/environments/docker.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/services-docker/neutron-opendaylight.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/services-docker/neutron-opendaylight-dpdk.yaml -e network-environment.yaml --compute-scale 1 --ntp-server 0.se.pool.ntp.org --control-flavor control --compute-flavor compute -r my_roles_data.yaml -e /home/stack/templates/docker-images.yaml -e /home/stack/templates/odl-images.yaml -e <other environmental files>
後に指定する環境ファイルのパラメーターにより、前の環境ファイルのパラメーターが上書きされます。パラメーターが誤って上書きされるのを防ぐために、環境ファイルの指定順序には注意を払う必要があります。
変更するパラメーターのみを設定する最小限の環境ファイルを作成して、デフォルトの環境ファイルと組み合わせることにより、一部のパラメーターは簡単に上書きすることができます。
3.6. L2GW 対応の OpenDaylight のインストール
レイヤー 2 ゲートウェイサービスにより、テナントの仮想ネットワークを物理ネットワークにブリッジングすることができます。この統合により、ルーティングされたレイヤー 3 の接続ではなく、レイヤー 2 のネットワーク接続で物理サーバー上のリソースにアクセスすることができます。これは、L3 や Floating IP を経由する代わりにレイヤー 2 のブロードキャストドメインを拡張することを意味します。
3.6.1. L2GW デプロイメントファイルの準備
L2GW 対応の OpenDaylight をデプロイするには、/usr/share/openstack-tripleo-heat-templates/environments
ディレクトリーにある neutron-l2gw-opendaylight.yaml
ファイルを使用します。そのファイルで設定を変更する必要がある場合には、その環境ファイルの新しいコピーを作成して、そこで必要なパラメーターを設定します。
OpenDaylight と L2GW をデフォルトの設定でデプロイする場合には、Red Hat で提供している neutron-l2gw-opendaylight.yaml
を使用します。このファイルは /usr/share/openstack-tripleo-heat-templates/environments/services-docker
ディレクトリーにあります。
デフォルトのファイルには、以下の値が含まれています。
# A Heat environment file that can be used to deploy Neutron L2 Gateway service # # Currently there are only two service provider for Neutron L2 Gateway # This file enables L2GW service with OpenDaylight as driver. # # - OpenDaylight: L2GW:OpenDaylight:networking_odl.l2gateway.driver.OpenDaylightL2gwDriver:default resource_registry: OS::TripleO::Services::NeutronL2gwApi: ../puppet/services/neutron-l2gw-api.yaml parameter_defaults: NeutronServicePlugins: "networking_l2gw.services.l2gateway.plugin.L2GatewayPlugin" L2gwServiceProvider: ['L2GW:OpenDaylight:networking_odl.l2gateway.driver.OpenDaylightL2gwDriver:default'] # Optional # L2gwServiceDefaultInterfaceName: "FortyGigE1/0/1" # L2gwServiceDefaultDeviceName: "Switch1" # L2gwServiceQuotaL2Gateway: 10 # L2gwServicePeriodicMonitoringInterval: 5
3.6.2. OpenDaylight L2GW デプロイメントの設定
このサービスは、neutron-l2gw-opendaylight.yaml
ファイルの値を変更することによって設定することができます。
|
|
|
このサービスを提供するのに使用すべきプロバイダーを定義します。デフォルトは |
|
デフォルトのインターフェースの名前を設定します。 |
|
デフォルトのデバイスの名前を設定します。 |
|
L2 ゲートウェイ用のサービスクォータを指定します。デフォルトは |
|
L2GW サービスのモニタリング間隔を指定します。 |
3.6.3. L2GW を実装する OpenDaylight のインストール
作業を開始する前に
- アンダークラウドをインストールします (「アンダークラウドのインストール」 を参照)。
- オーバークラウドのコンテナーイメージへのリンクを記載した環境ファイルを作成します (「オーバークラウド用の OpenDaylight 環境ファイルの準備」を参照)。
- SR-IOV 対応のカスタムロールで OpenDaylight を設定するためのロールファイルを作成します (「L2GW デプロイメントファイルの準備」を参照)。
手順
- OpenDaylight で L2GW 機能を設定するのに必要な環境ファイルを使用してデプロイメントコマンドを実行します。
$ openstack overcloud deploy --templates /usr/share/openstack-tripleo-heat-templates -e /usr/share/openstack-tripleo-heat-templates/environments/docker.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/services-docker/neutron-opendaylight.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/services-docker/neutron-l2gw-opendaylight.yaml -e /home/stack/templates/docker-images.yaml -e /home/stack/templates/odl-images.yaml -e <other environmental files>
後に指定する環境ファイルのパラメーターにより、前の環境ファイルのパラメーターが上書きされます。パラメーターが誤って上書きされるのを防ぐために、環境ファイルの指定順序には注意を払う必要があります。
変更するパラメーターのみを設定する最小限の環境ファイルを作成して、デフォルトの環境ファイルと組み合わせることにより、一部のパラメーターは簡単に上書きすることができます。