3.3. ML2/OVS から ML2/OVN への移行の準備

環境の評価と準備は、移行を成功させるために重要です。Red Hat Technical Account Manager または Global Professional Services は、以下の手順の実施をガイドします。

前提条件

  • 移行前のデプロイメントが、Red Hat OpenStack Platform (RHOSP) 16.1 以降である。
  • 移行前のデプロイメントが、iptables_hybrid ファイアウォールドライバーを使用していない。iptables_hybrid デプロイメントで使用される中間 linux_bridge インターフェースは、移行ツールと互換性がありません。
  • RHOSP のデプロイメントが最新化されている。つまり、OpenStack バージョンのアップグレードまたは更新が必要な場合は、まずアップグレードまたは更新を実行し、続いて ML2/OVS から ML2/OVN への移行を実施します。
  • アンダークラウドおよびオーバークラウドノードに container-tools パッケージがインストールされている。RHOSP 13 から RHOSP 16.1.1 へのアップグレードフレームワーク (FFU) を実行した場合には、このパッケージがインストールされない可能性があります。podman --help コマンドを試行します。コマンドが見つからない場合は、container -tools パッケージをインストールします( sudo dnf install -y @container-tools )。
  • Red Hat Technical Account Manager または Global Professional Services と連携して移行を計画し、事前サポートケースを作成している。

手順

アンダークラウドで、以下のステップを実行します。

  1. ML2/OVS デプロイメントで VXLAN または GRE プロジェクトネットワークを使用する場合は、setup-mtu-t1 のステップ後に最大 24 時間待機します。

    • この待機時間により、仮想マシンインスタンスは DHCP リースを更新し、新しい MTU 値を受け取ることができます。この間に、一部のインスタンスに MTU を手動で設定し、一部のインスタンスを再起動する必要がある場合があります。
    • 24 時間はデフォルト設定の 86400 秒に基づいた時間です。実際の時間は、/var/lib/config-data/puppet-generated/neutron/etc/neutron/dhcp_agent.ini dhcp_renewal_time および /var/lib/config-data/puppet-generated/neutron/etc/neutron/neutron.conf dhcp_lease_duration のパラメーターにより異なります。
  2. python3-networking-ovn-migration-tool をインストールします。

    sudo dnf install python3-networking-ovn-migration-tool
  3. アンダークラウドにディレクトリーを作成し、Ansible Playbook をコピーします。

    mkdir ~/ovn_migration
    cd ~/ovn_migration
    cp -rfp /usr/share/ansible/networking-ovn-migration/playbooks .
  4. overcloud-deploy-ovn.sh スクリプトを作成します。デプロイメントが Fast Forward Upgrade (FFU) を使用して RHOSP 13 からアップグレードされたかどうかに基づいて、適切な手順を選択します。

    デプロイメントが FFU によりアップグレードされた場合
    • FFU で使用されていた overcloud_upgrade_prepare.sh ファイルを overcloud-deploy-ovn.sh にコピーします。
    • overcloud-deploy-ovn.sh を編集して、openstack overcloud upgrade prepare の各インスタンスを openstack overcloud deploy に置き換えます。
    • オーバークラウドの認証情報を使用して openstack endpoint list | grep cinder を実行して、種別 ボリュームの エンドポイントおよびサービスが存在しないことを確認します。volumev2 および volumev3 サービスのみが存在するはずです。
    • サービス種別 volume のサービスが存在する場合は、これを削除します。以下のコマンドは、種別の volume: openstack service delete volume のエンドポイントをすべて削除します。
    • ボリュームの削除結果を確認します (openstack endpoint list | grep cinder)。
    デプロイメントが FFU によりアップグレードされなかった場合
    • 元のデプロイメントスクリプトのコピーを作成します(例: overcloud_deploy.sh)。コピーに overcloud-deploy-ovn.sh という名前を指定して、元のディレクトリーと同じディレクトリーに保存します。
  5. overcloud-deploy-ovn.sh スクリプトをクリーンアップします。

    1. スクリプトは、stackrc ファイルを読み込む source コマンドで始めるようにします。たとえば、source ~/stackrc です。
    2. neutron-ovs-dvr.yamlneutron-ovs-dpdk.yaml などの neutron OVS に固有のファイルへの参照をすべて削除し、デプロイメントで SR-IOV を使用している場合は neutron-sriov.yaml を削除します。
    3. vxlan プロジェクトネットワークを geneve に変更します。そのためには、カスタム heat テンプレートまたは環境ファイルで以下のように設定します。

      • NeutronTunnelTypesgeneve に設定されている。
      • NeutronNetworkType の値の一覧には geneve が含まれており、vxlan は含まれません

        NeutronTunnelTypes: 'geneve'
        NeutronNetworkType: ['geneve', 'vlan', 'flat']

  6. 以下の一覧で移行シナリオを確認し、overcloud-deploy-ovn.shopenstack deploy コマンドをカスタマイズするための適切な手順を実施します。

    シナリオ 1: DVR から DVR へ コンピュートノードが外部ネットワークに接続できる
    • 以下の環境ファイルを overcloud-deploy-ovn.sh の openstack deploy コマンドに追加します。環境ファイルは以下の順序で追加します。このコマンドの例では、デフォルトの neutron-ovn-dvr-ha.yaml ファイルを使用します。別のファイルを使用する場合は、コマンドのファイル名を置き換えます。

      -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovn-dvr-ha.yaml \
      -e $HOME/ovn-extras.yaml
    シナリオ 2: 集中ルーティングから集中ルーティングへ (DVR なし)
    • デプロイメントで SR-IOV を使用する場合は、サービス定義の OS::TripleO::Services::OVNMetadataAgent をファイル roles_data.yaml の Controller ロールに追加します。
    • 移行前のカスタムブリッジマッピングを維持します。

      • コントローラーノードで以下のコマンドを実行し、現在のブリッジマッピングを取得します。

        sudo podman exec -it neutron_api crudini --get /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs bridge_mappings

        出力例

        datacentre:br-ex,tenant:br-isolated
      • アンダークラウドで、ブリッジマッピング用の環境ファイル( /home/stack/neutron_bridge_mappings.yaml )を作成します。
      • 環境ファイルでデフォルト値を設定します。以下に例を示します。

        parameter_defaults:
          ComputeParameters:
            NeutronBridgeMappings: "datacentre:br-ex,tenant:br-isolated"
    • 以下の環境ファイルを overcloud-deploy-ovn.sh の openstack deploy コマンドに追加します。環境ファイルは以下の順序で追加します。お使いの環境で SR-IOV が使用されない場合は、neutron-ovn-sriov.yaml ファイルを省略します。ovn-extras.yaml ファイルは存在していませんが、openstack deploy コマンドを実行する前に ovn_migration.sh スクリプトにより作成されます。

      -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovn-ha.yaml \
      -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovn-sriov.yaml \
      -e /home/stack/ovn-extras.yaml  \
      -e /home/stack/neutron_bridge_mappings.yaml
    • カスタムのネットワーク変更は、移行前と同じままにします。
    シナリオ 3: 集中ルーティングから DVR へ (Geneve タイプドライバーおよび br-ex 経由で外部ネットワークに接続されたコンピュートノードを使用)
    警告

    ML2/OVS デプロイメントで集中ルーティングおよび VLAN プロジェクト (テナント) ネットワークが使用される場合は、DVR を使用する ML2/OVN に移行しないでください。集中ルーティングを使用する ML2/OVN に移行することができます。この制限の進捗を追跡するには、Bug 1766930 を参照してください。

    • コンピュートノードが br-ex ブリッジを介して外部ネットワークに接続されていることを確認します。たとえば、compute-dvr.yaml 等の環境ファイルで以下のように設定します。

      type: ovs_bridge
          # Defaults to br-ex, anything else requires specific # bridge mapping entries for it to be used.
          name: bridge_name
          use_dhcp: false
          members:
           -
            type: interface
            name: nic3
            # force the MAC address of the bridge to this interface
            primary: true
  7. すべてのユーザーに overcloud-deploy-ovn.sh ファイルの実行権限があることを確認します。このスクリプトには、移行プロセス中に実行権限が必要です。

    $ chmod a+x ~/overcloud-deploy-ovn.sh
  8. export コマンドを使用して、以下の移行関連の環境変数を設定します。以下に例を示します。

    $ export PUBLIC_NETWORK_NAME=my-public-network
    • STACKRC_FILE: アンダークラウドの stackrc ファイル

      デフォルト: ~/stackrc

    • OVERCLOUDRC_FILE: アンダークラウドの overcloudrc ファイル

      デフォルト: ~/overcloudrc

    • OVERCLOUD_OVN_DEPLOY_SCRIPT: デプロイメントスクリプト

      デフォルト: ~/overcloud-deploy-ovn.sh

    • PUBLIC_NETWORK_NAME: パブリックネットワークの名前

      デフォルト: public

    • IMAGE_NAME: テストサーバーのブートに使用する glance イメージの名前または ID

      デフォルト: cirros

      イメージは、検証前/検証後のプロセス時に自動的にダウンロードされます。

    • VALIDATE_MIGRATION: 移行リソースを作成して移行を検証します。移行スクリプトは、移行開始前にサーバーを起動し、移行後にサーバーが到達可能であることを検証します。

      デフォルト: True

      警告

      移行の検証には、少なくとも 2 つの利用可能な Floating IP アドレス、2 つのネットワーク、2 つのサブネット、2 つのインスタンス、および 2 つの admin ルーターが必要です。

      また、PUBLIC_NETWORK_NAME で指定されるネットワークには、利用可能な Floating IP アドレスが必要で、アンダークラウドから ping できる必要があります。

      お使いの環境がこれらの要件を満たさない場合には、VALIDATE_MIGRATION を False に設定します。

    • SERVER_USER_NAME: 移行インスタンスへのロギングに使用するユーザー名。

      デフォルト: cirros

    • DHCP_RENEWAL_TIME: DHCP エージェント設定ファイルで設定する DHCP 更新時間 (秒単位)。

      デフォルト: 30

  9. ovn-migration ディレクトリーにあり、ovn _migration.sh generate-inventory コマンドを実行して、インベントリーファイル hosts_for_migration および ansible.cfg ファイルを生成します。

    $ ovn_migration.sh generate-inventory   | sudo tee -a /var/log/ovn_migration_output.txt
  10. hosts_for_migration ファイルで正確性を確認してください。

    1. 一覧がお使いの環境と一致していることを確認します。
    2. 各ノードに ovn コントローラーがあることを確認します。
    3. リスト見出し([ovn-controllers] など)がリスト項目に含まれていないことを確認します。
    4. ovn 移行ディレクトリーから、ansible -i hosts_for_migration -m コマンドをすべて pingします。
  11. 元の OVS デプロイメントで VLAN プロジェクトネットワークを使用している場合には、ステップ 18 に進みます。
  12. ovn_migration.sh setup-mtu-t1 を実行します。これにより、DHCP エージェントが実行しているすべてのノードで、/var/lib/config-data/puppet-generated/neutron/etc/neutron/dhcp_agent.ini 内の dhcp_renewal_time を設定する内部 neutron DHCP サーバーの T1 パラメーターは短くなります。

    $ ovn_migration.sh setup-mtu-t1   | sudo tee -a /var/log/ovn_migration_output.txt
  13. 元の OVS デプロイメントで VXLAN または GRE プロジェクトネットワークを使用している場合には、DHCP リースがすべての仮想マシンインスタンスで更新されるまでお待ちください。リース更新設定およびインスタンス数によっては、最大 24 時間かかる場合があります。
  14. VXLAN または GRE プロジェクトネットワークに静的 IP を割り当てるインスタンスがある場合は、それらのインスタンスの設定を手動で変更し、新しい Geneve MTU (現在の VXLAN MTU から 8 バイト減) を設定する必要があります。たとえば、VXLAN ベースの MTU が 1450 の場合は、これを 1442 に変更します。

    注記

    このステップは、VXLAN または GRE プロジェクトネットワークに静的 IP の割り当てと MTU 設定を手動で提供している場合にのみ行います。デフォルトでは、DHCP が IP 割り当てと MTU 設定を提供します。

  15. T1 パラメーターが既存の仮想マシンに伝播されていることを確認します。

    • コンピュートノードのいずれかに接続します。
    • プロジェクトネットワークに接続された仮想マシンタップのいずれかで tcpdump を実行します。

      T1 が正常に伝搬された場合、約 30 秒間隔で要求が実行されるはずです。

      [heat-admin@overcloud-novacompute-0 ~]$ sudo tcpdump -i tap52e872c2-e6 port 67 or port 68 -n
      tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
      listening on tap52e872c2-e6, link-type EN10MB (Ethernet), capture size 262144 bytes
      13:17:28.954675 IP 192.168.99.5.bootpc > 192.168.99.3.bootps: BOOTP/DHCP, Request from fa:16:3e:6b:41:3d, length 300
      13:17:28.961321 IP 192.168.99.3.bootps > 192.168.99.5.bootpc: BOOTP/DHCP, Reply, length 355
      13:17:56.241156 IP 192.168.99.5.bootpc > 192.168.99.3.bootps: BOOTP/DHCP, Request from fa:16:3e:6b:41:3d, length 30013:17:56.249899 IP 192.168.99.3.bootps > 192.168.99.5.bootpc: BOOTP/DHCP, Reply, length 355
      注記

      cirros 仮想マシンでは、この検証はできません。cirros udhcpc 実装は、DHCP オプション 58 (T1) に応答しません。完全な Linux 仮想マシンに属するポートで、この検証を試みます。Red Hat では、お使いのシステムが実行するさまざまなタイプのワークロードを確認することを推奨しています (Windows、Linux の異なるフレーバーなど)。

  16. DHCP の T1 パラメーターへの変更を反映するように仮想マシンインスタンスが更新されていない場合は、再起動します。
  17. 移行前の VXLAN および GRE ネットワークの MTU を減らします。

    $ ovn_migration.sh reduce-mtu   | sudo tee -a /var/log/ovn_migration_output.txt

    このステップでは、ネットワークごとに MTU を減らし、adapted_mtu で完了したネットワークにタグを付けます。このツールは、VXLAN/GRE 以外のネットワークを無視します。そのため、プロジェクトネットワークに VLAN を使用しても、このステップでは値を変更することは想定されていません。

  18. ML2/OVN への移行後に使用する新しいコンテナーイメージを準備します。

    1. ホームディレクトリーに containers-prepare-parameter.yaml ファイルがない場合は作成します。

      $ test -f $HOME/containers-prepare-parameter.yaml || sudo openstack tripleo container image prepare default \
      --output-env-file $HOME/containers-prepare-parameter.yaml
    2. containers-prepare-parameter.yaml が $HOME/overcloud-deploy-ovn.sh ファイルおよび $HOME/overcloud-deploy.sh ファイルの末尾にあることを確認します。
    3. containers-prepare-parameter.yaml ファイルの neutron_driver を ovn に変更します。

      $ sed -i -E 's/neutron_driver:([ ]\w+)/neutron_driver: ovn/' $HOME/containers-prepare-parameter.yaml
    4. neutron_driver への変更を確認します。

      $ grep neutron_driver $HOME/containers-prepare-parameter.yaml
      neutron_driver: ovn
    5. イメージを更新します。

      $ sudo openstack tripleo container image prepare \
      --environment-file /home/stack/containers-prepare-parameter.yaml
      注記

      containers-prepare-parameter.yaml ファイルへの完全パスを指定します。そうでない場合には、イメージ一覧を更新したり、エラーメッセージを表示したりせずに、コマンドは非常に迅速に完了します。

  19. アンダークラウドにおいて、更新されたイメージを検証します。

    . Log in to the undercloud as the user `stack` and source the stackrc file.
    $ source ~/stackrc
    $ openstack tripleo container image list | grep  '\-ovn'

    リストは以下の例のようになります。これには、OVN データベース、OVN コントローラー、メタデータエージェント、および neutron サーバーエージェント用のコンテナーが含まれます。

    docker://undercloud-0.ctlplane.redhat.local:8787/rh-osbs/rhosp16-openstack-ovn-northd:16.2_20211110.2
    docker://undercloud-0.ctlplane.redhat.local:8787/rh-osbs/rhosp16-openstack-ovn-sb-db-server:16.2_20211110.2
    docker://undercloud-0.ctlplane.redhat.local:8787/rh-osbs/rhosp16-openstack-ovn-controller:16.2_20211110.2
    docker://undercloud-0.ctlplane.redhat.local:8787/rh-osbs/rhosp16-openstack-neutron-server-ovn:16.2_20211110.2
    docker://undercloud-0.ctlplane.redhat.local:8787/rh-osbs/rhosp16-openstack-ovn-nb-db-server:16.2_20211110.2
    docker://undercloud-0.ctlplane.redhat.local:8787/rh-osbs/rhosp16-openstack-neutron-metadata-agent-ovn:16.2_20211110.2