25.6. 回滚到 OpenShift SDN 网络供应商


作为集群管理员,只有在迁移到 OVN-Kubernetes 网络插件后,才能从 OVN-Kubernetes 网络插件回滚到 OpenShift SDN。

25.6.1. 迁移到 OpenShift SDN 网络插件

集群管理员可以使用离线迁移方法回滚到 OpenShift SDN Container Network Interface (CNI) 网络插件。在迁移过程中,您必须手动重新引导集群中的每个节点。使用离线迁移方法时,集群会存在一些停机时间。

重要

在启动回滚前,您必须等待 OpenShift SDN 到 OVN-Kubernetes 网络插件的迁移过程成功。

先决条件

  • 安装 OpenShift CLI(oc)。
  • 使用具有 cluster-admin 角色的用户访问集群。
  • 在使用 OVN-Kubernetes 网络插件配置的基础架构上安装集群。
  • etcd 数据库的最新备份可用。
  • 可根据每个节点手动触发重新引导。
  • 集群处于已知良好状态,没有任何错误。

流程

  1. 停止由 Machine Config Operator(MCO)管理的所有机器配置池:

    • 在 CLI 中输入以下命令来停止 master 配置池:

      $ oc patch MachineConfigPool master --type='merge' --patch \
        '{ "spec": { "paused": true } }'
      Copy to Clipboard Toggle word wrap
    • 在 CLI 中输入以下命令来停止 worker 机器配置池:

      $ oc patch MachineConfigPool worker --type='merge' --patch \
        '{ "spec":{ "paused": true } }'
      Copy to Clipboard Toggle word wrap
  2. 要准备迁移,请在 CLI 中输入以下命令将 migration 字段设置为 null

    $ oc patch Network.operator.openshift.io cluster --type='merge' \
      --patch '{ "spec": { "migration": null } }'
    Copy to Clipboard Toggle word wrap
  3. 在 CLI 中输入以下命令,检查 Network.config.openshift.io 对象的迁移状态是否为空。空命令输出表示对象不在迁移操作中。

    $ oc get Network.config cluster -o jsonpath='{.status.migration}'
    Copy to Clipboard Toggle word wrap
  4. 将补丁应用到 Network.operator.openshift.io 对象,通过在 CLI 中输入以下命令将网络插件设置为 OpenShift SDN:

    $ oc patch Network.operator.openshift.io cluster --type='merge' \
      --patch '{ "spec": { "migration": { "networkType": "OpenShiftSDN" } } }'
    Copy to Clipboard Toggle word wrap
    重要

    如果您在 Network.operator.openshift.io 对象上的补丁操作完成前将补丁应用到 Network.config.openshift.io 对象,Cluster Network Operator (CNO) 进入降级状态,这会导致 slight 延迟直到 CNO 从降级状态恢复。

  5. 在 CLI 中输入以下命令,确认 Network.config.openshift.io 集群对象的网络插件的迁移状态为 OpenShiftSDN

    $ oc get Network.config cluster -o jsonpath='{.status.migration.networkType}'
    Copy to Clipboard Toggle word wrap
  6. 将补丁应用到 Network.config.openshift.io 对象,通过在 CLI 中输入以下命令将网络插件设置为 OpenShift SDN:

    $ oc patch Network.config.openshift.io cluster --type='merge' \
      --patch '{ "spec": { "networkType": "OpenShiftSDN" } }'
    Copy to Clipboard Toggle word wrap
  7. 可选:禁用将几个 OVN-Kubernetes 功能自动迁移到 OpenShift SDN 等效功能:

    • 出口 IP
    • 出口防火墙
    • 多播

    要为之前记录的 OpenShift SDN 功能禁用配置自动迁移,请指定以下键:

    $ oc patch Network.operator.openshift.io cluster --type='merge' \
      --patch '{
        "spec": {
          "migration": {
            "networkType": "OpenShiftSDN",
            "features": {
              "egressIP": <bool>,
              "egressFirewall": <bool>,
              "multicast": <bool>
            }
          }
        }
      }'
    Copy to Clipboard Toggle word wrap

    其中:

    bool:指定是否启用功能的迁移。默认值是 true

  8. 可选: 您可以自定义 OpenShift SDN 的以下设置,以满足您的网络基础架构的要求:

    • 最大传输单元(MTU)
    • VXLAN 端口

    要自定义之前记录的设置或两个设置,请在 CLI 中自定义并输入以下命令。如果您不需要更改默认值,请从补丁中省略该键。

    $ oc patch Network.operator.openshift.io cluster --type=merge \
      --patch '{
        "spec":{
          "defaultNetwork":{
            "openshiftSDNConfig":{
              "mtu":<mtu>,
              "vxlanPort":<port>
        }}}}'
    Copy to Clipboard Toggle word wrap
    mtu
    VXLAN 覆盖网络的 MTU。这个值通常是自动配置的;但是,如果集群中的节点没有都使用相同的 MTU,那么您必须将此值明确设置为比最小节点 MTU 的值小 50
    port
    VXLAN 覆盖网络的 UDP 端口。如果没有指定值,则默认为 4789。端口不能与 OVN-Kubernetes 使用的生成端口相同。Geneve 端口的默认值为 6081

    patch 命令示例

    $ oc patch Network.operator.openshift.io cluster --type=merge \
      --patch '{
        "spec":{
          "defaultNetwork":{
            "openshiftSDNConfig":{
              "mtu":1200
        }}}}'
    Copy to Clipboard Toggle word wrap

  9. 重新引导集群中的每个节点。您可以使用以下方法之一重新引导集群中的节点:

    • 使用 oc rsh 命令,您可以使用类似如下的 bash 脚本:

      #!/bin/bash
      readarray -t POD_NODES <<< "$(oc get pod -n openshift-machine-config-operator -o wide| grep daemon|awk '{print $1" "$7}')"
      
      for i in "${POD_NODES[@]}"
      do
        read -r POD NODE <<< "$i"
        until oc rsh -n openshift-machine-config-operator "$POD" chroot /rootfs shutdown -r +1
          do
            echo "cannot reboot node $NODE, retry" && sleep 3
          done
      done
      Copy to Clipboard Toggle word wrap
    • 通过 ssh 命令,您可以使用类似如下的 bash 脚本:该脚本假设您已将 sudo 配置为不提示输入密码。

      #!/bin/bash
      
      for ip in $(oc get nodes  -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}')
      do
         echo "reboot node $ip"
         ssh -o StrictHostKeyChecking=no core@$ip sudo shutdown -r -t 3
      done
      Copy to Clipboard Toggle word wrap
  10. 等待 Multus 守护进程集的 rollout 完成。运行以下命令查看您的 rollout 状态:

    $ oc -n openshift-multus rollout status daemonset/multus
    Copy to Clipboard Toggle word wrap

    Multus pod 的名称采用 multus-<xxxxx> 的形式,其中 <xxxxx>是由字母组成的随机序列。pod 可能需要一些时间才能重启。

    输出示例

    Waiting for daemon set "multus" rollout to finish: 1 out of 6 new pods have been updated...
    ...
    Waiting for daemon set "multus" rollout to finish: 5 of 6 updated pods are available...
    daemon set "multus" successfully rolled out
    Copy to Clipboard Toggle word wrap

  11. 重新引导集群中的节点并推出 multus pod 后,通过运行以下命令启动所有机器配置池:

    • 启动 master 配置池:

      $ oc patch MachineConfigPool master --type='merge' --patch \
        '{ "spec": { "paused": false } }'
      Copy to Clipboard Toggle word wrap
    • 启动 worker 配置池:

      $ oc patch MachineConfigPool worker --type='merge' --patch \
        '{ "spec": { "paused": false } }'
      Copy to Clipboard Toggle word wrap

    当 MCO 更新每个配置池中的机器时,它会重新引导每个节点。

    默认情况下,MCO 会在一个时间段内为每个池更新一台机器,因此迁移完成所需要的时间会随集群大小的增加而增加。

  12. 确认主机上新机器配置的状态:

    1. 要列出机器配置状态和应用的机器配置名称,请在 CLI 中输入以下命令:

      $ oc describe node | egrep "hostname|machineconfig"
      Copy to Clipboard Toggle word wrap

      输出示例

      kubernetes.io/hostname=master-0
      machineconfiguration.openshift.io/currentConfig: rendered-master-c53e221d9d24e1c8bb6ee89dd3d8ad7b
      machineconfiguration.openshift.io/desiredConfig: rendered-master-c53e221d9d24e1c8bb6ee89dd3d8ad7b
      machineconfiguration.openshift.io/reason:
      machineconfiguration.openshift.io/state: Done
      Copy to Clipboard Toggle word wrap

      验证以下语句是否正确:

      • machineconfiguration.openshift.io/state 字段的值为 Done
      • machineconfiguration.openshift.io/currentConfig 字段的值等于 machineconfiguration.openshift.io/desiredConfig 字段的值。
    2. 要确认机器配置正确,在 CLI 中输入以下命令:

      $ oc get machineconfig <config_name> -o yaml
      Copy to Clipboard Toggle word wrap

      这里的 <config_name>machineconfiguration.openshift.io/currentConfig 字段中机器配置的名称。

  13. 确认迁移成功完成:

    1. 要确认网络插件是 OpenShift SDN,请在 CLI 中输入以下命令。status.networkType 的值必须是 OpenShiftSDN

      $ oc get Network.config/cluster -o jsonpath='{.status.networkType}{"\n"}'
      Copy to Clipboard Toggle word wrap
    2. 要确认集群节点处于 Ready 状态,请在 CLI 中输入以下命令:

      $ oc get nodes
      Copy to Clipboard Toggle word wrap
    3. 如果节点一直处于 NotReady 状态,检查机器配置守护进程 pod 日志并解决所有错误。

      1. 要列出 pod,在 CLI 中输入以下命令:

        $ oc get pod -n openshift-machine-config-operator
        Copy to Clipboard Toggle word wrap

        输出示例

        NAME                                         READY   STATUS    RESTARTS   AGE
        machine-config-controller-75f756f89d-sjp8b   1/1     Running   0          37m
        machine-config-daemon-5cf4b                  2/2     Running   0          43h
        machine-config-daemon-7wzcd                  2/2     Running   0          43h
        machine-config-daemon-fc946                  2/2     Running   0          43h
        machine-config-daemon-g2v28                  2/2     Running   0          43h
        machine-config-daemon-gcl4f                  2/2     Running   0          43h
        machine-config-daemon-l5tnv                  2/2     Running   0          43h
        machine-config-operator-79d9c55d5-hth92      1/1     Running   0          37m
        machine-config-server-bsc8h                  1/1     Running   0          43h
        machine-config-server-hklrm                  1/1     Running   0          43h
        machine-config-server-k9rtx                  1/1     Running   0          43h
        Copy to Clipboard Toggle word wrap

        配置守护进程 pod 的名称使用以下格式: machine-config-daemon-<seq><seq> 值是一个随机的五个字符的字母数字序列。

      2. 要显示以上输出中显示的每个机器配置守护进程 pod 的 pod 日志,请在 CLI 中输入以下命令:

        $ oc logs <pod> -n openshift-machine-config-operator
        Copy to Clipboard Toggle word wrap

        其中 pod 是机器配置守护进程 pod 的名称。

      3. 解决上一命令输出中显示的日志中的任何错误。
    4. 要确认您的 pod 不在错误状态,请在 CLI 中输入以下命令:

      $ oc get pods --all-namespaces -o wide --sort-by='{.spec.nodeName}'
      Copy to Clipboard Toggle word wrap

      如果节点上的 pod 处于错误状态,请重新引导该节点。

  14. 只有在迁移成功且集群处于良好状态时完成以下步骤:

    1. 要从 Cluster Network Operator 配置对象中删除迁移配置,请在 CLI 中输入以下命令:

      $ oc patch Network.operator.openshift.io cluster --type='merge' \
        --patch '{ "spec": { "migration": null } }'
      Copy to Clipboard Toggle word wrap
    2. 要删除 OVN-Kubernetes 配置,请在 CLI 中输入以下命令:

      $ oc patch Network.operator.openshift.io cluster --type='merge' \
        --patch '{ "spec": { "defaultNetwork": { "ovnKubernetesConfig":null } } }'
      Copy to Clipboard Toggle word wrap
    3. 要删除 OVN-Kubernetes 网络供应商命名空间,请在 CLI 中输入以下命令:

      $ oc delete namespace openshift-ovn-kubernetes
      Copy to Clipboard Toggle word wrap

作为集群管理员,您可以使用 network.offline_migration_sdn_to_ovnk Ansible 集合中的 playbooks/playbook-rollback.yml 从 OVN-Kubernetes 插件回滚到 OpenShift SDN Container Network Interface (CNI) 网络插件。

先决条件

  • 已安装 python3 软件包,最小版本 3.10。
  • 已安装 jmespathjq 软件包。
  • 已登陆到 Red Hat Hybrid Cloud Console 并打开 Ansible Automation Platform web 控制台。
  • 您创建了一条安全组规则,允许所有云平台上所有节点的端口 6081 上用户数据报协议(UDP)数据包。如果没有此任务,您的集群可能无法调度 pod。

流程

  1. 安装 ansible-core 软件包,最低为 2.15 版本。以下示例命令演示了如何在 Red Hat Enterprise Linux (RHEL)上安装 ansible-core 软件包:

    $ sudo dnf install -y ansible-core
    Copy to Clipboard Toggle word wrap
  2. 创建 ansible.cfg 文件,并将类似以下示例的信息添加到该文件中。确保该文件存在于与 ansible-galaxy 命令和 playbook 运行相同的目录中。

    $ cat << EOF >> ansible.cfg
    [galaxy]
    server_list = automation_hub, validated
    
    [galaxy_server.automation_hub]
    url=https://console.redhat.com/api/automation-hub/content/published/
    auth_url=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token
    token=
    
    #[galaxy_server.release_galaxy]
    #url=https://galaxy.ansible.com/
    
    [galaxy_server.validated]
    url=https://console.redhat.com/api/automation-hub/content/validated/
    auth_url=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token
    token=
    EOF
    Copy to Clipboard Toggle word wrap
  3. 在 Ansible Automation Platform web 控制台中进入 Connect to Hub 页并完成以下步骤:

    1. 在页的离线令牌部分中,点 Load token 按钮。
    2. 在令牌加载后,点 Copy to clipboard 图标。
    3. 打开 ansible.cfg 文件,并将 API 令牌粘贴到 token= 参数中。对 ansible.cfg 文件中指定的服务器 URL 进行身份验证需要 API 令牌。
  4. 输入以下 ansible-galaxy 命令,安装 network.offline_migration_sdn_to_ovnk Ansible 集合:

    $ ansible-galaxy collection install network.offline_migration_sdn_to_ovnk
    Copy to Clipboard Toggle word wrap
  5. 验证您系统上是否安装了 network.offline_migration_sdn_to_ovnk Ansible 集合:

    $ ansible-galaxy collection list | grep network.offline_migration_sdn_to_ovnk
    Copy to Clipboard Toggle word wrap

    输出示例

    network.offline_migration_sdn_to_ovnk   1.0.2
    Copy to Clipboard Toggle word wrap

    network.offline_migration_sdn_to_ovnk Ansible 集合保存在 ~/.ansible/collections/ansible_collections/network/offline_migration_sdn_to_ovnk/ 的默认路径中。

  6. playbooks/playbook-migration.yml 文件中配置回滚功能:

    # ...
        rollback_disable_auto_migration: true
        rollback_egress_ip: false
        rollback_egress_firewall: false
        rollback_multicast: false
        rollback_mtu: 1400
        rollback_vxlanPort: 4790
    # ...
    Copy to Clipboard Toggle word wrap
    rollback_disable_auto_migration
    禁用 OVN-Kubernetes 插件的自动迁移功能到 OpenShift SDN CNI 插件。如果禁用功能的自动迁移,还必须将 rollback_egress_iprollback_egress_firewallrollback_multicast 参数设置为 false。如果您需要启用功能的自动迁移,请将 参数设置为 false
    rollback_mtu
    可选参数,在迁移过程后将特定的最大传输单元(MTU)设置为集群网络。
    rollback_vxlanPort
    设置 VXLAN (虚拟可扩展 LAN)端口的可选参数,供 OpenShift SDN CNI 插件使用。参数的默认值为 4790
  7. 要运行 playbooks/playbook-rollback.yml 文件,请输入以下命令:

    $ ansible-playbook -v playbooks/playbook-rollback.yml
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat