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 セクションを使用してください。

上記の例では、NeutronEnableForceMetadataNeutronMechanismDriversNeutronServicePlugins のパラメーターは、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 サービス の設定時には、複数のパラメーターを設定することができます。

OpenDaylightPort

ノースバウンドの通信に使用するポートを設定します。デフォルトは 8081 です。

OpenDaylightUsername

OpenDaylight のログインユーザー名を設定します。デフォルトは admin です。

OpenDaylightPassword

OpenDaylight のログインパスワードを設定します。デフォルトは admin です。

OpenDaylightEnableDHCP

OpenDaylight を有効化して、DHCP サービスとして機能するようにします。デフォルトは false です。

OpenDaylightFeatures

OpenDaylight で起動する機能のコンマ区切りリスト。デフォルトは [odl-netvirt-openstack, odl-netvirt-ui, odl-jolokia] です。

OpenDaylightConnectionProtocol

REST のアクセスに使用する L7 プロトコルを設定します。デフォルトは http です。

OpenDaylightManageRepositories

OpenDaylight リポジトリーを管理するかどうかを設定します。デフォルトは false です。

OpenDaylightSNATMechanism

OpenDaylight が SNAT メカニズムを使用するように設定します。conntrackcontroller のいずれかを選択することができます。デフォルト値は conntrack です。

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 サービス の設定時には、複数のパラメーターを指定することができます。

OpenDaylightPort

OpenDaylight へのノースバウンドの通信に使用するポートを設定します。デフォルトは 8081 です。OVS サービスはノースバウンドで OpenDaylight に対してクエリーを実行し、接続の前に完全に稼動状態であることを確認します。

OpenDaylightConnectionProtocol

REST アクセスに使用するレイヤー 7 プロトコル。デフォルトは http です。現在 OpenDaylight でサポートされているプロトコルは http のみとなっています。

OpenDaylightCheckURL

OVS が接続する前に OpenDaylight が完全に稼働していることを確認するのに使用する URL。デフォルトは restconf/operational/network-topology:network-topology/topology/netvirt:1 です。

OpenDaylightProviderMappings

論理ネットワークと物理インターフェースの間のマッピングのコンマ区切りリスト。この設定は、VLAN デプロイメントに必要です。デフォルトは datacentre:br-ex です。

Username

OpenDaylight OVS サービスのカスタムユーザー名を設定可能にします。

Password

OpenDaylight OVS サービスのカスタムパスワードを設定可能にします。

HostAllowedNetworkTypes

この OVS ホストに許可されているネットワーク種別。nova インスタンスとネットワークのスケジュール先となるホストを制限するために、ホストまたはロールによって異なる場合があります。デフォルトは ['local', 'vlan', 'vxlan', 'gre'] です。

OvsEnableDpdk

OVS で DPDK を有効化するかどうかを選択します。デフォルト値は false です。

OvsVhostuserMode

vhostuser ポート作成での OVS のモードを指定します。クライアントモードでは、ハイパーバイザーが vhostuser ソケットを作成する役割を果たします。サーバーモードでは、OVS が vhostuser を作成します。デフォルト値は client です。

VhostuserSocketDir

vhostuser ソケットを使用するディレクトリーを指定します。デフォルト値は /var/run/openvswitch です。

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 環境ファイルの準備

作業を開始する前に

手順

  1. アンダークラウドにログオンして、admin の認証情報を読み込みます。

    $ source ~/stackrc
  2. オーバークラウドのインストールに使用される 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
  3. 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
  4. オーバークラウドをデプロイするための環境の作成が正常に完了し、「OpenDaylight を実装するオーバークラウドのインストール」に記載のインストールを開始する準備が整いました。

詳細情報

openstack overcloud image prepare コマンドは、オーバークラウドと OpenDaylight のインストール用のコンテナーイメージ環境ファイルを準備します。このコマンドでは、以下のオプションを使用します。

-e
OpenDaylight、OVS など、その環境に必要な特定のコンテナーイメージを追加するためのサービス環境ファイルを指定します。
--env-file
インストールに使用されるコンテナーイメージの一覧を記載した新規コンテナーイメージの環境ファイルを作成します。
--pull-source
Docker コンテナーレジストリーの場所を設定します。
--namespace
Docker コンテナーのバージョンを設定します。
--prefix
イメージ名にプレフィックスを追加します。
--suffix
イメージ名にサフィックスを追加します。
--tag
イメージのリリースを定義します。

3.2.2. OpenDaylight を実装するオーバークラウドのインストール

作業を開始する前に

手順

  1. アンダークラウドにログオンして、admin の認証情報を読み込みます。

    $ source ~/stackrc
  2. 事前に作成した環境ファイルを使用してオーバークラウドをデプロイします。

    $ 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
  • 上記のコマンドでロール名を引数として渡すことによって、ロールファイルをカスタマイズして一部のロールのみが含まれるようにすることができます。ControllerComputeTelemetry ロールで 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

手順

  1. デフォルトのロールファイルを新規ディレクトリーにコピーします。元のファイルは、フォールバックする場合の解決方法として保管してください。

    $ mkdir ~/roles
    $ cp /usr/share/openstack-tripleo-heat-templates/roles/* ~/roles
  2. コントローラーノードで OpenDaylightAPI サービスをスイッチオフします。そのためには、~/roles にある Controller.yaml ファイルでデフォルトのコントローラーロールを編集し、そのファイルから OpenDaylightApi の行を削除します。

       - name: Controller
         CountDefault: 1
         ServicesDefault:
          - OS::TripleO::Services::TripleoFirewall
          - OS::TripleO::Services::OpenDaylightApi #<--Remove this
          - OS::TripleO::Services::OpenDaylightOvs
  3. ~/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
  4. ファイルを保存します。
  5. OpenDaylight をカスタムロールで実装する OpenStack オーバークラウドのデプロイに使用する新規ロールファイルを生成します。

    $ openstack overcloud roles generate --roles-path ~/roles -o ~/roles_data.yaml Controller Compute OpenDaylight

3.3.3. OpenDaylight をカスタムロールで実装するオーバークラウドのインストール

作業を開始する前に

手順

  1. -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 インストールの検証

作業を開始する前に

手順

  1. 既存のインスタンスを一覧表示します。

    $ openstack server list
  2. 結果を確認し、新規 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 ベースのインスタンスを作成できるようにする必要があります。

作業を開始する前に

手順

  1. デフォルトのロールファイルを新規ディレクトリーにコピーします。元のファイルは、フォールバックする場合の解決方法として保管してください。

    $ mkdir ~/roles
    $ cp /usr/share/openstack-tripleo-heat-templates/roles/* ~/roles
  2. ~/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
  3. ファイルを保存します。
  4. NeutronSriovAgent および NeutronSriovHostConfig のサービスをデフォルトの Compute ロールから削除し、対応するロールファイルを保存します。

         - OS::TripleO::Services::NeutronSriovHostConfig
         - OS::TripleO::Services::NeutronSriovAgent
  5. 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 機能を有効化するために必要な設定を記載します。

NovaSchedulerDefaultFilters

SR-IOV 用の PCI パススルーを使用できるようにします。このパラメーターは、環境ファイル内でコメント解除して、PciPassthroughFilter を追加する必要があります。

NovaSchedulerAvailableFilters

Nova のデフォルトフィルターに PCI パススルーフィルターを指定できるようにします。このパラメーターは必須で、nova.scheduler.filters.all_filters を追加する必要があります。

NeutronPhysicalDevMappings

neutron の論理ネットワークをホストのネットワークインターフェースにマッピングします。neutron が仮想ネットワークを物理ポートにバインドできるようにするには、このパラメーターを指定する必要があります。

NeutronSriovNumVFs

ホストのネットワークインターフェース用に作成する VF 数。構文: <Interface name>:<number of VFs>

NovaPCIPassthrough

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 のインストール

作業を開始する前に

手順

  1. -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 サービスを設定することができます。

TunedProfileName

IRQ のピニングを有効化して、OVS-DPDK で使用する CPU コアから分離します。デフォルトプロファイル: cpu-partitioning

IsolCpusList

CPU コアの一覧を指定し、カーネルスケジューラーがそれらのコアを使用しないようにして、代わりに OVS-DPDK に割り当てて専用にすることができます。書式は、個々のコアのコンマ区切りリストまたは範囲で指定します (例: 1,2,3,4-8,10-12)。

KernelArgs

ブート時にカーネルに渡す引数をリストします。OVS-DPDK の場合は、IOMMUHugepages を有効にする必要があります。以下に例を示します。

---- intel_iommu=on iommu=pt default_hugepagesz=1GB hugepagesz=1G hugepages=60 ----

上記で指定している RAM の容量はヒュージページ用の 60 GB であることに注意してください。この値を設定する場合には、コンピュートノードで利用可能な RAM 容量を考慮することが重要です。

OvsDpdkSocketMemory

各 NUMA ノードに割り当てるヒュージページメモリーの容量を (MB 単位で) 指定します。パフォーマンスを最大限にするには、DPDK NIC に最も近いソケットにメモリーを割り当てます。ソケットあたりのメモリーをリストする形式は以下のようになります。

---- "<socket 0 mem MB>,<socket 1 mem MB>" ----

例: "1024,0"

OvsDpdkDriverType

PMD スレッドに使用する UIO ドライバーの種別を指定します。DPDK NIC がサポートしているドライバーを指定する必要があります。種別には vfio-pciuio_pci_generic などがあります。

OvsPmdCoreList

PMD スレッドのピニング先となる個々のコアまたは範囲をリストします。ここで指定するコアは、OvsDpdkSocketMemory の設定でメモリーが割り当てられているのと同じ NUMA ノード上にある必要があります。ハイパースレッディングが使用される場合には、ホスト上の物理コアを構成する論理コアを指定する必要があります。

OvsDpdkMemoryChannels

ソケットあたりのメモリーチャネルの数を指定します。

NovaVcpuPinSet

libvirtd で nova インスタンスをピニングするコア。パフォーマンスを最適にするには、OVS PMD コアがピニングされているのと同じソケット上のコアを使用してください。

3.5.3. OVS-DPDK を実装する OpenDaylight のインストール

作業を開始する前に

手順

  1. 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 ファイルの値を変更することによって設定することができます。

NeutronServicePlugins

neutron.service_plugins 名前空間から読み込まれるサービスプラグインのエンドポイントのコンマ区切りリスト。デフォルトは router です。

L2gwServiceProvider

このサービスを提供するのに使用すべきプロバイダーを定義します。デフォルトは L2GW:OpenDaylight:networking_odl.l2gateway.driver.OpenDaylightL2gwDriver:default です。

L2gwServiceDefaultInterfaceName

デフォルトのインターフェースの名前を設定します。

L2gwServiceDefaultDeviceName

デフォルトのデバイスの名前を設定します。

L2gwServiceQuotaL2Gateway

L2 ゲートウェイ用のサービスクォータを指定します。デフォルトは 10 です。

L2gwServicePeriodicMonitoringInterval

L2GW サービスのモニタリング間隔を指定します。

3.6.3. L2GW を実装する OpenDaylight のインストール

作業を開始する前に

手順

  1. 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>
注記

後に指定する環境ファイルのパラメーターにより、前の環境ファイルのパラメーターが上書きされます。パラメーターが誤って上書きされるのを防ぐために、環境ファイルの指定順序には注意を払う必要があります。

ヒント

変更するパラメーターのみを設定する最小限の環境ファイルを作成して、デフォルトの環境ファイルと組み合わせることにより、一部のパラメーターは簡単に上書きすることができます。