第10章 Open Virtual Network (OVN) の使用
Open Virtual Network (OVN) は、Open vSwitch ベースの SDN で、インスタンスにネットワークサービスを提供します。本章では、director を使用して OVN をデプロイするために必要な手順について説明します。
OVN は、現在テクノロジープレビュー機能として提供されています。テクノロジープレビューとして提供されている機能のサポートスコープに関する詳しい情報は、https://access.redhat.com/support/offerings/techpreview/ を参照してください。
OVN を ML2 メカニズムドライバーとして使用するデプロイメントの場合は、外部ネットワークに接続可能なノードのみが、その上でルーターゲートウェイポートをスケジューリングする対象になります。 ただし、現在既知の問題があり、全ノードが対象となってしまうため、コンピュートノードが外部に接続できない場合には問題となります。その結果、ルーターゲートウェイポートが外部に接続できないコンピュートノード上でスケジュールされている場合には、外部ネットワークの受信および送信の接続は機能せず、その場合には、ルーターゲートウェイポートをコントローラーノードに再スケジュールする必要があります。回避策として、全コンピュートノードに接続を提供することができます。また、NeutronBridgeMappings
を削除するか、datacentre:br-ex
に設定することを検討できます。詳しい情報は、https://bugzilla.redhat.com/show_bug.cgi?id=1525520 と https://bugzilla.redhat.com/show_bug.cgi?id=1510879 を参照してください。
10.1. OVN ベースプロファイルのデプロイ
ベースプロファイルをデプロイするには、environments/neutron-ml2-ovn.yaml
ファイルを openstack overcloud deploy
に渡します。以下に例を示します。
$ openstack overcloud deploy \ --templates /usr/share/openstack-tripleo-heat-templates \ ... -e /usr/share/openstack-tripleo-heat-templates/environments/neutron-ml2-ovn.yaml ....
10.2. OVN HA プロファイルのデプロイ
Pacemaker HA プロファイルをデプロイするには、openstack overcloud deploy
コマンドに environments/neutron-ml2-ovn-ha.yaml
ファイルを渡す必要があります。以下に例を示します。
$ openstack overcloud deploy \ --templates /usr/share/openstack-tripleo-heat-templates \ ... -e /usr/share/openstack-tripleo-heat-templates/environments/neutron-ml2-ovn-ha.yaml ....
10.3. OVN コンポーネント
OVN には、以下のコンポーネントとサービスが必要です。
-
OVN Northbound (NB) データベースサーバー。コントローラーノード上で実行され、TCP ポート
6641
をリッスンします。 -
OVN Southbound (SB) データベースサーバー。コントローラーノード上で実行され、TCP ポート
6642
をリッスンします。 -
ovn-northd
: コントローラーノード上で実行されます。 -
ovn-controller
:OS::Tripleo::Services::OVNController
が定義されているすべてのコントローラーノードとコンピュートノード上で実行されます。OVN SB データベースサーバーに接続します。 -
ovn
ML2 メカニズムドライバー。OVN NB および SB のデータベースサーバーに接続します。
10.4. パッケージと依存関係
OVN には以下のパッケージが必要です。
-
openvswitch-ovn-common
-
openvswitch-ovn-central
-
openvswitch-ovn-host
メインの openvswitch
パッケージにはサブパッケージがあります。必要な最小バージョンは OVS 2.7.2 です。これらのパッケージは overcloud-full.qcow2
イメージですでに含まれているはずです。
10.5. director を使用した OVN のデプロイ
director を使用して OVN をデプロイする場合は、以下のステップを実行してください。
- OVN ML2 メカニズムドライバーを有効化して、必要な設定オプションを生成します。
-
コントローラーノードに OVN データベースサーバーと
ovn-northd
をデプロイします。 -
各コンピュートノードに
ovn-controller
をデプロイします。
以下の director コンポーネントが使用されます。
-
tripleo-heat-templates
-
puppet-tripleo
-
puppet-neutron
-
puppet-ovn
およびpuppet-vswitch
(OVN サービスをデプロイするため)
OVN を使用するには、director のデプロイメントで VXLAN ではなく、geneve
カプセル化を使用する必要があります。
10.6. OVN コンポーザブルサービス
director には、ovn-dbs
という名前の OVN 用コンポーザブルサービスがあり、ベースプロファイルとペースメーカー HA プロファイルに 2 つがあります。OVN の Northbound および Southbound データベースは、ovsdb-server
サービスによりホストされます。同様に、ovsdb-server
プロセスは、ovs-vswitchd
と並行して実行され、OVS データベース (conf.db
) をホスティングします。
NB データベースのスキーマファイルは /usr/share/openvswitch/ovn-nb.ovsschema
に、SB データベースのスキーマファイルは /usr/share/openvswitch/ovn-sb.ovsschema
にあります。
10.7. 高可用性
ovsdb-server
サービスは現在 active-active モードをサポートしていませんが、master-slave モードでの HA はサポートしています。これは、pacemaker によって、リソースエージェント OCF スクリプトを使用して管理されます。ovsdb-server
を master モードで実行すると、データベースへの書き込みアクセスが許可されますが、その他のスレーブの ovsdb-server
サービスはすべて master からローカルにデータベースを複製し、書き込みアクセスは許可しません。
この理由から、ベースプロファイルと HA プロファイルは両シナリオをサポートするために提供されます。ベースプロファイルを使用する場合には、OVN データベースサーバーはブートストラップコントローラーでのみ起動されます (デプロイメントに複数のコントローラーがある場合)。HA プロファイルが有効化されている場合には、OVN データベースサーバーは全コントローラーで起動され、次に pacemaker は master ロールとして機能するコントローラーを 1 つ選択します。
10.8. ベースプロファイルの使用
ベースプロファイル用の YAML ファイルは tripleo-heat-templates/puppet/services/ovn-dbs.yaml
にあります。このサービスが有効化されると、OVN データベースはブートストラップコントローラーでのみ起動されます。
たとえば、デプロイメントに 3 つのコントローラー (controller-0
、controller-1
、controller-2
) がある場合には、OVN データベースサーバーは controller-0
で起動されます。controller-0
が停止すると、OVN データベースサーバーも利用できなくなり、他のコントローラーでは起動されません。これは単一障害点です。
director は、コントローラーノードの 1 つでアクティブとなる内部ネットワーク用の仮想 IP アドレスを作成します。この仮想 IP は OVN_DBS_VIP
にマップされます。OVN ML2 ドライバーと ovn-controller
サービスが OVN データベースに接続できるようにするために、puppet-tripleo
は以下の HAproxy 設定を各コントローラーノードの haproxy.cfg
に生成します。
OVN NB データベースサーバー:
Front end : tcp:OVN_DBS_VIP:6641 Backend: tcp:Controller-0-IP:6641 tcp:Controller-1-IP:6641 tcp:Controller-2-IP:6641
OVN SB データベースサーバー:
Front end : tcp:OVN_DBS_VIP:6642 Backend: tcp:Controller-0-IP:6642 tcp:Controller-1-IP:6642 tcp:Controller-2-IP:6642
OVN ML2 メカニズムドライバーは、OVN_DBS_VIP
に接続するように (ml2_conf.ini
の [ovn]
セクションで) 設定されます。
OVN データベースサーバーは controller-1
と controller-2
では起動されないので、HAproxy は常に、controller-0
上で実行されている OVN データベースサーバーにトラフィックをリダイレクトします。
10.9. Pacemaker HA プロファイルの使用
このプロファイル用の YAML ファイルは tripleo-heat-templates/puppet/services/pacemaker/ovn-dbs.yaml
にあります。有効化すると、OVN データベースサーバーは Pacemaker によって管理され、puppet-tripleo
は ovn:ovndb-servers
という名前の pacemaker OCF リソースを作成します。
OVN データベースサーバーは各コントローラーノードで起動し、仮想 IP アドレス (OVN_DBS_VIP
) を所有するコントローラーは OVN DB サーバーを master モードで実行します。OVN ML2 メカニズムドライバーと ovn-controller
は次に OVN_DBS_VIP
値を使用してデータベースサーバーに接続します。フェイルオーバーが発生した場合には、Pacemaker がこの仮想 IP アドレス (OVN_DBS_VIP
) を別のコントローラーに移動し、またそのノードで実行されている OVN データベースサーバーを master に昇格します。
Pacemaker HA プロファイルには OVS バージョン 2.7.2 が必要です。フェイルオーバー機能は、2.7.4 で利用可能になる見込みです。詳しい情報は、https://bugzilla.redhat.com/show_bug.cgi?id=1512568 を参照してください。
10.10. ovn-controller の設定
ovn-controller
サービスは各コンピュートノードで実行され、OVN SB データベースサーバーに接続して論理フローを取得します。次にその論理フローを物理 OF フローに変換して、OVS ブリッジ (br-int
) に追加します。ovs-vswitchd
と通信して OF フローをインストールするために、ovn-controller
は ovn-controller
の起動時に渡された UNIX ソケットパス (例: unix:/var/run/openvswitch/db.sock
) を使用して (conf.db
をホストする) ローカルの ovsdb-server
に接続します。
ovn-controller
サービスは、「Open_vSwitch」テーブルの external_ids
コラムに特定のキーと値のペアがあることを想定します。puppet-ovn
は puppet-vswitch
を使用してこれらのフィールドにデータを読み込みます。puppet-vswitch が external_ids
コラムに設定するキーと値のペアは以下のとおりです。
hostname=<HOST NAME> ovn-encap-ip=<IP OF THE NODE> ovn-encap-type=geneve ovn-remote=tcp:OVN_DBS_VIP:6642
10.11. 既知の制限事項
本項では、OVN のテクノロジープレビューでの既知の問題または既知の制限事項について説明します。
- Open vSwitch バージョン: Red Hat OpenStack Platform には OVS バージョン 2.7 が同梱されています。
- メタデータ API: この機能には OVS バージョン 2.8 が必要です。
-
L3 ゲートウェイ HA: この機能には OVS バージョン 2.8 が必要です。また、将来のリリースで予定されている
networking-ovn
に対する更新も必要です。 - 新規デプロイメントのみ: OVN は新規デプロイメントでのみ利用可能です。既存のデプロイメントには、OVN への移行パスは現在ありません。これは将来のリリースで提供されるようになる予定です。
- IPv6 ルーター: 現在、論理ポートステータスの特定で既知の問題があります。この問題は、OVS バージョン 2.7.4 で対処される予定です。詳しい情報は、https://bugs.launchpad.net/networking-ovn/+bug/1715126 を参照してください。