第 2 章 将 ML2 机制驱动程序从 OVS 迁移到 OVN

2.1. 准备将 ML2 机制驱动程序从 OVS 迁移到 OVN 的环境

环境评估和准备是成功迁移的关键。您的红帽大客户经理或全球专业服务将指导您完成这些步骤。

先决条件

  • 您的部署是最新的 RHOSP 16.2 版本。换句话说,如果您需要升级或更新 OpenStack 版本,请首先执行升级或更新,然后执行 ML2/OVS 到 ML2/OVN 迁移。
  • 每个子网池至少有一个 IP 地址。

    OVN 机制驱动程序为每个子网创建一个元数据端口。每个元数据端口从 IP 地址池声明 IP 地址。

  • 您已与红帽大客户经理或全球专业服务合作以规划迁移,并提交主动的支持问题单。请参阅 如何提交主动问题单

流程

  1. 创建 ML2/OVN 阶段部署,以获取目标 ML2/OVN 部署的基础配置,并测试目标部署的可行性。

    使用与迁移后生产部署相同的基本角色、路由和拓扑设计阶段部署。保存 overcloud-deploy.sh 文件以及部署引用的任何文件,如环境文件。稍后需要这些文件来配置迁移目标环境。

    注意

    这些文件仅用于创建 stage 部署并在迁移中。迁移后不要重新使用它们。

  2. 如果您的 ML2/OVS 部署使用 VXLAN 或 GRE 项目网络,请在 setup-mtu-t1 步骤后调度等待最多 24 小时。

    • 此等待周期允许虚拟机实例续订其 DHCP 租期并接收新的 MTU 值。在此期间,您可能需要在一些实例上手动设置 MTU,并重新启动一些实例。
    • 24 小时是基于 86400 秒默认配置的时间。实际时间取决于 /var/lib/config-data/puppet-generated/neutron/dhcp_agent.ini dhcp_renewal_time 和 /var/lib/config-data/puppet-generated/neutron/etc/neutron/neutron.conf dhcp_lease_duration 参数。
  3. 安装 python3-networking-ovn-migration-tool。

    sudo dnf install python3-networking-ovn-migration-tool @container-tools

    @container-tools 参数也会安装容器工具(如果容器工具尚不存在)。

  4. 在 undercloud 上创建目录,再复制 Ansible playbook:

    mkdir ~/ovn_migration
    cd ~/ovn_migration
    cp -rfp /usr/share/ansible/networking-ovn-migration/playbooks .
  5. 将 ML2/OVN 阶段部署文件复制到迁移主目录,如 ~/ovn_migration

    阶段迁移部署文件包括 overcloud-deploy.sh 和部署引用的任何文件,如环境文件。将 overcloud-deploy.sh 副本重命名为 overcloud-deploy-ovn.sh。只将这个脚本用于迁移。不要将它用于其他目的。

  6. 在以下列表中找到您的迁移场景,并执行适当的步骤,以在 overcloud-deploy-ovn.sh 中自定义 openstack 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 角色。
    • 保留迁移前自定义网桥映射。

      • 在网络人员或组合的 networker/controller 节点上运行这个命令来获取当前的网桥映射:

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

        输出示例

        datacentre:br-ex,tenant:br-isolated
      • 在 undercloud 上,为网桥映射创建一个环境文件: /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:利用 Geneve 类型驱动程序到 DVR 的集中式路由,以及通过 br-ex连接到外部网络的计算节点
    警告

    如果您的 ML2/OVS 部署使用集中式路由和 VLAN 项目(租户)网络,请不要使用 DVR 迁移到 ML2/OVN。您可以使用集中式路由迁移到 ML2/OVN。要跟踪这个限制的进度,请参阅 https://bugzilla.redhat.com/show_bug.cgi?id=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 PUBLIC_NETWORK_NAME=my-public-network
    • STACKRC_FILE - undercloud 中的 stackrc 文件。

      默认: ~/stackrc

    • OVERCLOUDRC_FILE - undercloud 中的 overcloudrc 文件。

      默认: ~/overcloudrc

    • OVERCLOUD_OVN_DEPLOY_SCRIPT - 部署脚本。

      默认值: ~/overcloud-deploy-ovn.sh

    • PUBLIC_NETWORK_NAME -您的公共网络的名称。

      默认: public

    • IMAGE_NAME - 用于引导测试服务器的 glance 镜像的名称或 ID。

      默认值: cirros.

      镜像会在 pre-validation / post-validation 进程中自动下载。

    • VALIDATE_MIGRATION - 创建迁移资源以验证迁移。在开始迁移前,迁移脚本会引导服务器并验证在迁移后是否可以访问服务器。

      默认值:True。

      警告

      迁移验证至少需要两个可用的浮动 IP 地址、两个网络、两个子网、两个实例和两个路由器作为 admin。

      另外,由 PUBLIC_NETWORK_NAME 指定的网络必须有可用的浮动 IP 地址,且您必须能够从 undercloud ping它们。

      如果您的环境没有满足这些要求,请将 VALIDATE_MIGRATION 设置为 False。

    • SERVER_USER_NAME - 用于登录迁移实例的用户名。

      默认值: cirros.

    • DHCP_RENEWAL_TIME - DHCP 续订时间(以秒为单位)在 DHCP 代理配置文件中配置。

      默认:30

  9. 确保位于 ovn-migration 目录中,再运行命令 ovn_migration.sh generate-inventory 生成清单文件 host _for_migrationansible.cfg 文件。

    $ ovn_migration.sh generate-inventory   | sudo tee -a /var/log/ovn_migration_output.txt
  10. 检查 host_for_migration 文件的准确性。

    1. 确保列表与您的环境匹配。
    2. 确保每个节点上存在 ovn 控制器。
    3. 确保没有列表标题(如 [ovn-controllers])下没有列表项。
    4. 从 ovn 迁移目录中,运行命令 ansible -i hosts_for_migration -m ping all
  11. 如果您的原始部署使用 VXLAN 或 GRE,则需要调整最大传输单元(MTU)值。继续 调整 MTU,以便从 OVS 机制驱动程序迁移到 OVN 机制驱动程序

    如果您的原始部署使用 VLAN 网络,您可以跳过 MTU 调整,并继续 准备从 OVS 机制驱动程序迁移到 OVN 机制驱动程序的容器镜像