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


作为集群管理员,您可以使用 离线 迁移方法或有限的实时迁移方法从 OVN-Kubernetes 网络插件回滚到 OpenShift SDN 网络插件。这只能在迁移到 OVN-Kubernetes 网络插件后完成。

注意
  • 如果您使用离线迁移方法从 OVN-Kubernetes 网络插件迁移到 OpenShift SDN 网络插件,您应该使用离线迁移回滚方法。
  • 如果您使用有限的实时迁移方法从 OVN-Kubernetes 网络插件迁移到 OpenShift SDN 网络插件,则应使用有限的实时迁移回滚方法。
注意

从 OpenShift Container Platform 4.14 开始,OpenShift SDN CNI 已被弃用。自 OpenShift Container Platform 4.15 起,网络插件不是新安装的选项。在以后的发行版本中,计划删除 OpenShift SDN 网络插件,并不再被支持。红帽将在删除前对这个功能提供程序错误修正和支持,但不会再改进这个功能。作为 OpenShift SDN CNI 的替代选择,您可以使用 OVN Kubernetes CNI。如需更多信息,请参阅 OpenShift SDN CNI 删除

24.6.1. 使用离线迁移方法回滚到 OpenShift SDN 网络插件

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

重要

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

如果需要回滚到 OpenShift SDN,下表描述了这个过程。

表 24.12. 执行到 OpenShift SDN 的回滚
用户发起的步骤迁移操作

挂起 MCO 以确保它不会中断迁移。

MCO 停止。

将名为 clusterNetwork.operator.openshift.io 自定义资源(CR)的 migration 字段设置为 OpenShiftSDN。在设置值之前,请确保 migration 项为 null

CNO
相应地更新名为 clusterNetwork.config.openshift.io CR 的状态。

更新 networkType 字段。

CNO

执行以下操作:

  • 销毁 OVN-Kubernetes control plane pod。
  • 部署 OpenShift SDN control plane pod。
  • 更新 Multus 对象以反映新的网络插件。

重新引导集群中的每个节点。

Cluster
当节点重启时,集群会为 OpenShift-SDN 网络上的 pod 分配 IP 地址。

在集群重启中的所有节点后启用 MCO。

MCO
将更新发布到 OpenShift SDN 所需的 systemd 配置 ; MCO 默认更新每个池的单一机器,因此迁移总时间随着集群的大小而增加。

先决条件

  • 已安装 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 } }'
    • 在 CLI 中输入以下命令来停止 worker 机器配置池:

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

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

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

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

    如果您在 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}'
  6. 将补丁应用到 Network.config.openshift.io 对象,通过在 CLI 中输入以下命令将网络插件设置为 OpenShift SDN:

    $ oc patch Network.config.openshift.io cluster --type='merge' \
      --patch '{ "spec": { "networkType": "OpenShiftSDN" } }'
  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>
            }
          }
        }
      }'

    其中:

    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>
        }}}}'
    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
        }}}}'

  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
    • 通过 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
  10. 等待 Multus 守护进程集的 rollout 完成。运行以下命令查看您的 rollout 状态:

    $ oc -n openshift-multus rollout status daemonset/multus

    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

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

    • 启动 master 配置池:

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

      $ oc patch MachineConfigPool worker --type='merge' --patch \
        '{ "spec": { "paused": false } }'

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

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

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

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

      $ oc describe node | egrep "hostname|machineconfig"

      输出示例

      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

      验证以下语句是否正确:

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

      $ oc get machineconfig <config_name> -o yaml

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

  13. 确认迁移成功完成:

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

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

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

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

        $ oc get pod -n openshift-machine-config-operator

        输出示例

        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

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

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

        $ oc logs <pod> -n openshift-machine-config-operator

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

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

      $ oc get pods --all-namespaces -o wide --sort-by='{.spec.nodeName}'

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

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

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

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

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

      $ oc delete namespace openshift-ovn-kubernetes

24.6.2. 使用有限的实时迁移方法回滚到 OpenShift SDN 网络插件

作为集群管理员,您可以使用有限的实时迁移方法回滚到 OpenShift SDN Container Network Interface (CNI) 网络插件。使用此方法迁移过程中,节点会自动重新引导,并且对集群的服务不会中断。

重要

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

如果需要回滚到 OpenShift SDN,下表描述了这个过程。

表 24.13. 执行到 OpenShift SDN 的回滚
用户发起的步骤迁移操作

通过将 networkTypeOVNKubernetes 改为 OpenShiftSDN 来修补集群级别的网络配置。

Cluster Network Operator (CNO)

执行以下操作:

  • network.operator 自定义资源 (CR) 中设置与迁移相关的字段,并等待 Machine Config Operator (MCO) 将可路由 MTU 应用到所有节点。
  • network.operator CR 进行补丁,为 OpenShiftSDN 将 migration 模式设置为 Live,并在迁移模式中部署 OpenShiftSDN 网络插件。
  • 在启用了混合覆盖的情况下部署 OVN-Kubernetes。
  • 等待两个 CNI 插件被部署并更新 network.config CR 状态中的条件。
  • 触发 MCO 将新机器配置应用到每个机器配置池,其中包括节点封锁、排空和重启。
  • network.operator CR 中删除与迁移相关的字段,并执行清理操作,如删除 OpenShift SDN 资源,并使用必要的配置以正常模式重新部署 OVN-Kubernetes。
  • 等待 OpenShiftSDN 重新部署并更新 network.config CR 中的状态条件,以指示迁移完成。

先决条件

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

流程

  1. 要启动回滚到 OpenShift SDN,请输入以下命令:

    $ oc patch Network.config.openshift.io cluster --type='merge' --patch '{"metadata":{"annotations":{"network.openshift.io/network-type-migration":""}},"spec":{"networkType":"OpenShiftSDN"}}'
  2. 要监控迁移的进度,请输入以下命令:

    $ watch -n1 'oc get network.config/cluster -o json | jq ".status.conditions[]|\"\\(.type) \\(.status) \\(.reason) \\(.message)\""  -r | column --table --table-columns NAME,STATUS,REASON,MESSAGE --table-columns-limit 4; echo; oc get mcp -o wide; echo; oc get node -o "custom-columns=NAME:metadata.name,STATE:metadata.annotations.machineconfiguration\\.openshift\\.io/state,DESIRED:metadata.annotations.machineconfiguration\\.openshift\\.io/desiredConfig,CURRENT:metadata.annotations.machineconfiguration\\.openshift\\.io/currentConfig,REASON:metadata.annotations.machineconfiguration\\.openshift\\.io/reason"'

    该命令每秒打印以下信息:

    • network.config.openshift.io/cluster 对象的状态的条件,报告迁移的进度。
    • machine-config-operator 资源相关的不同节点的状态,包括它们是否正在升级或已升级,以及它们的当前和所需的配置。
  3. 只有在迁移成功且集群处于良好状态时完成以下步骤:

    1. 输入以下命令从 network.config 自定义资源中删除 network.openshift.io/network-type-migration= 注解:

      $ oc annotate network.config cluster network.openshift.io/network-type-migration-
    2. 输入以下命令删除 OVN-Kubernetes 网络供应商命名空间:

      $ oc delete namespace openshift-ovn-kubernetes
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.