26.7. 回滚到 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。
26.7.1. 使用离线迁移方法回滚到 OpenShift SDN 网络插件 复制链接链接已复制到粘贴板!
集群管理员可以使用离线迁移方法回滚到 OpenShift SDN Container Network Interface (CNI) 网络插件。在迁移过程中,您必须手动重新引导集群中的每个节点。使用离线迁移方法时,集群会存在一些停机时间。
在启动回滚前,您必须等待 OpenShift SDN 到 OVN-Kubernetes 网络插件的迁移过程成功。
如果需要回滚到 OpenShift SDN,下表描述了这个过程。
用户发起的步骤 | 迁移操作 |
---|---|
挂起 MCO 以确保它不会中断迁移。 | MCO 停止。 |
将名为 |
|
更新 |
|
重新引导集群中的每个节点。 |
|
在集群重启中的所有节点后启用 MCO。 |
|
先决条件
-
已安装 OpenShift CLI (
oc
)。 - 可以使用具有 cluster-admin 角色的用户访问集群。
- 集群安装在使用 OVN-Kubernetes 网络插件配置的基础架构上。
- etcd 数据库的最新备份可用。
- 可以为每个节点触发手动重新引导。
- 集群处于已知良好状态,没有任何错误。
流程
停止由 Machine Config Operator(MCO)管理的所有机器配置池:
在 CLI 中输入以下命令来停止
master
配置池:oc patch MachineConfigPool master --type='merge' --patch \ '{ "spec": { "paused": true } }'
$ oc patch MachineConfigPool master --type='merge' --patch \ '{ "spec": { "paused": true } }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 CLI 中输入以下命令来停止
worker
机器配置池:oc patch MachineConfigPool worker --type='merge' --patch \ '{ "spec":{ "paused": true } }'
$ oc patch MachineConfigPool worker --type='merge' --patch \ '{ "spec":{ "paused": true } }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
要准备迁移,请在 CLI 中输入以下命令将 migration 字段设置为
null
:oc patch Network.operator.openshift.io cluster --type='merge' \ --patch '{ "spec": { "migration": null } }'
$ oc patch Network.operator.openshift.io cluster --type='merge' \ --patch '{ "spec": { "migration": null } }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 CLI 中输入以下命令,检查
Network.config.openshift.io
对象的迁移状态是否为空。空命令输出表示对象不在迁移操作中。oc get Network.config cluster -o jsonpath='{.status.migration}'
$ oc get Network.config cluster -o jsonpath='{.status.migration}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将补丁应用到
Network.operator.openshift.io
对象,通过在 CLI 中输入以下命令将网络插件设置为 OpenShift SDN:oc patch Network.operator.openshift.io cluster --type='merge' \ --patch '{ "spec": { "migration": { "networkType": "OpenShiftSDN" } } }'
$ oc patch Network.operator.openshift.io cluster --type='merge' \ --patch '{ "spec": { "migration": { "networkType": "OpenShiftSDN" } } }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要如果您在
Network.operator.openshift.io
对象上的补丁操作完成前将补丁应用到Network.config.openshift.io
对象,Cluster Network Operator (CNO) 进入降级状态,这会导致 slight 延迟直到 CNO 从降级状态恢复。在 CLI 中输入以下命令,确认
Network.config.openshift.io 集群
对象的网络插件的迁移状态为OpenShiftSDN
:oc get Network.config cluster -o jsonpath='{.status.migration.networkType}'
$ oc get Network.config cluster -o jsonpath='{.status.migration.networkType}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将补丁应用到
Network.config.openshift.io
对象,通过在 CLI 中输入以下命令将网络插件设置为 OpenShift SDN:oc patch Network.config.openshift.io cluster --type='merge' \ --patch '{ "spec": { "networkType": "OpenShiftSDN" } }'
$ oc patch Network.config.openshift.io cluster --type='merge' \ --patch '{ "spec": { "networkType": "OpenShiftSDN" } }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:禁用将几个 OVN-Kubernetes 功能自动迁移到 OpenShift SDN 等效功能:
- 出口 IP
- 出口防火墙
- 多播
要为之前记录的 OpenShift SDN 功能禁用配置自动迁移,请指定以下键:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
bool
:指定是否启用功能的迁移。默认值是true
。可选: 您可以自定义 OpenShift SDN 的以下设置,以满足您的网络基础架构的要求:
- 最大传输单元(MTU)
- VXLAN 端口
要自定义之前记录的设置或两个设置,请在 CLI 中自定义并输入以下命令。如果您不需要更改默认值,请从补丁中省略该键。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mtu
-
VXLAN 覆盖网络的 MTU。这个值通常是自动配置的;但是,如果集群中的节点没有都使用相同的 MTU,那么您必须将此值明确设置为比最小节点 MTU 的值小
50
。 port
-
VXLAN 覆盖网络的 UDP 端口。如果没有指定值,则默认为
4789
。端口不能与 OVN-Kubernetes 使用的生成端口相同。Geneve 端口的默认值为6081
。
patch 命令示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新引导集群中的每个节点。您可以使用以下方法之一重新引导集群中的节点:
使用
oc rsh
命令,您可以使用类似如下的 bash 脚本:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过
ssh
命令,您可以使用类似如下的 bash 脚本:该脚本假设您已将 sudo 配置为不提示输入密码。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
等待 Multus 守护进程集的 rollout 完成。运行以下命令查看您的 rollout 状态:
oc -n openshift-multus rollout status daemonset/multus
$ oc -n openshift-multus rollout status daemonset/multus
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
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 Copied! Toggle word wrap Toggle overflow 重新引导集群中的节点并推出 multus pod 后,通过运行以下命令启动所有机器配置池:
启动 master 配置池:
oc patch MachineConfigPool master --type='merge' --patch \ '{ "spec": { "paused": false } }'
$ oc patch MachineConfigPool master --type='merge' --patch \ '{ "spec": { "paused": false } }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动 worker 配置池:
oc patch MachineConfigPool worker --type='merge' --patch \ '{ "spec": { "paused": false } }'
$ oc patch MachineConfigPool worker --type='merge' --patch \ '{ "spec": { "paused": false } }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
当 MCO 更新每个配置池中的机器时,它会重新引导每个节点。
默认情况下,MCO 会在一个时间段内为每个池更新一台机器,因此迁移完成所需要的时间会随集群大小的增加而增加。
确认主机上新机器配置的状态:
要列出机器配置状态和应用的机器配置名称,请在 CLI 中输入以下命令:
oc describe node | egrep "hostname|machineconfig"
$ oc describe node | egrep "hostname|machineconfig"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
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
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 Copied! Toggle word wrap Toggle overflow 验证以下语句是否正确:
-
machineconfiguration.openshift.io/state
字段的值为Done
。 -
machineconfiguration.openshift.io/currentConfig
字段的值等于machineconfiguration.openshift.io/desiredConfig
字段的值。
-
要确认机器配置正确,在 CLI 中输入以下命令:
oc get machineconfig <config_name> -o yaml
$ oc get machineconfig <config_name> -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这里的
<config_name>
是machineconfiguration.openshift.io/currentConfig
字段中机器配置的名称。
确认迁移成功完成:
要确认网络插件是 OpenShift SDN,请在 CLI 中输入以下命令。
status.networkType
的值必须是OpenShiftSDN
。oc get Network.config/cluster -o jsonpath='{.status.networkType}{"\n"}'
$ oc get Network.config/cluster -o jsonpath='{.status.networkType}{"\n"}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要确认集群节点处于
Ready
状态,请在 CLI 中输入以下命令:oc get nodes
$ oc get nodes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果节点一直处于
NotReady
状态,检查机器配置守护进程 pod 日志并解决所有错误。要列出 pod,在 CLI 中输入以下命令:
oc get pod -n openshift-machine-config-operator
$ oc get pod -n openshift-machine-config-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置守护进程 pod 的名称使用以下格式:
machine-config-daemon-<seq>
。<seq>
值是一个随机的五个字符的字母数字序列。要显示以上输出中显示的每个机器配置守护进程 pod 的 pod 日志,请在 CLI 中输入以下命令:
oc logs <pod> -n openshift-machine-config-operator
$ oc logs <pod> -n openshift-machine-config-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
pod
是机器配置守护进程 pod 的名称。- 解决上一命令输出中显示的日志中的任何错误。
要确认您的 pod 不在错误状态,请在 CLI 中输入以下命令:
oc get pods --all-namespaces -o wide --sort-by='{.spec.nodeName}'
$ oc get pods --all-namespaces -o wide --sort-by='{.spec.nodeName}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果节点上的 pod 处于错误状态,请重新引导该节点。
只有在迁移成功且集群处于良好状态时完成以下步骤:
要从 Cluster Network Operator 配置对象中删除迁移配置,请在 CLI 中输入以下命令:
oc patch Network.operator.openshift.io cluster --type='merge' \ --patch '{ "spec": { "migration": null } }'
$ oc patch Network.operator.openshift.io cluster --type='merge' \ --patch '{ "spec": { "migration": null } }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要删除 OVN-Kubernetes 配置,请在 CLI 中输入以下命令:
oc patch Network.operator.openshift.io cluster --type='merge' \ --patch '{ "spec": { "defaultNetwork": { "ovnKubernetesConfig":null } } }'
$ oc patch Network.operator.openshift.io cluster --type='merge' \ --patch '{ "spec": { "defaultNetwork": { "ovnKubernetesConfig":null } } }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要删除 OVN-Kubernetes 网络供应商命名空间,请在 CLI 中输入以下命令:
oc delete namespace openshift-ovn-kubernetes
$ oc delete namespace openshift-ovn-kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
26.7.2. 使用 Ansible playbook 回滚到 OpenShift SDN 网络插件 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 network.offline_migration_sdn_to_ovnk
Ansible 集合中的 playbooks/playbook-rollback.yml
从 OVN-Kubernetes 插件回滚到 OpenShift SDN Container Network Interface (CNI) 网络插件。
先决条件
-
已安装
python3
软件包,最小版本 3.10。 -
已安装
jmespath
和jq
软件包。 - 已登陆到 Red Hat Hybrid Cloud Console 并打开 Ansible Automation Platform web 控制台。
-
您创建了一条安全组规则,允许所有云平台上所有节点的端口
6081
上用户数据报协议(UDP)数据包。如果没有此任务,您的集群可能无法调度 pod。
流程
安装
ansible-core
软件包,最低为 2.15 版本。以下示例命令演示了如何在 Red Hat Enterprise Linux (RHEL)上安装ansible-core
软件包:sudo dnf install -y ansible-core
$ sudo dnf install -y ansible-core
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
ansible.cfg
文件,并将类似以下示例的信息添加到该文件中。确保该文件存在于与ansible-galaxy
命令和 playbook 运行相同的目录中。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Ansible Automation Platform web 控制台中进入 Connect to Hub 页并完成以下步骤:
- 在页的离线令牌部分中,点 Load token 按钮。
- 在令牌加载后,点 Copy to clipboard 图标。
-
打开
ansible.cfg
文件,并将 API 令牌粘贴到token=
参数中。对ansible.cfg
文件中指定的服务器 URL 进行身份验证需要 API 令牌。
输入以下
ansible-galaxy
命令,安装network.offline_migration_sdn_to_ovnk
Ansible 集合:ansible-galaxy collection install network.offline_migration_sdn_to_ovnk
$ ansible-galaxy collection install network.offline_migration_sdn_to_ovnk
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证您系统上是否安装了
network.offline_migration_sdn_to_ovnk
Ansible 集合:ansible-galaxy collection list | grep network.offline_migration_sdn_to_ovnk
$ ansible-galaxy collection list | grep network.offline_migration_sdn_to_ovnk
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
network.offline_migration_sdn_to_ovnk 1.0.2
network.offline_migration_sdn_to_ovnk 1.0.2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow network.offline_migration_sdn_to_ovnk
Ansible 集合保存在~/.ansible/collections/ansible_collections/network/offline_migration_sdn_to_ovnk/
的默认路径中。在
playbooks/playbook-migration.yml
文件中配置回滚功能:Copy to Clipboard Copied! Toggle word wrap Toggle overflow rollback_disable_auto_migration
-
禁用 OVN-Kubernetes 插件的自动迁移功能到 OpenShift SDN CNI 插件。如果禁用功能的自动迁移,还必须将
rollback_egress_ip
、rollback_egress_firewall
和rollback_multicast
参数设置为false
。如果您需要启用功能的自动迁移,请将 参数设置为false
。 rollback_mtu
- 可选参数,在迁移过程后将特定的最大传输单元(MTU)设置为集群网络。
rollback_vxlanPort
-
设置 VXLAN (虚拟可扩展 LAN)端口的可选参数,供 OpenShift SDN CNI 插件使用。参数的默认值为
4790
。
要运行
playbooks/playbook-rollback.yml
文件,请输入以下命令:ansible-playbook -v playbooks/playbook-rollback.yml
$ ansible-playbook -v playbooks/playbook-rollback.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
26.7.3. 使用有限的实时迁移方法回滚到 OpenShift SDN 网络插件 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用有限的实时迁移方法回滚到 OpenShift SDN Container Network Interface (CNI) 网络插件。使用此方法迁移过程中,节点会自动重新引导,并且对集群的服务不会中断。
在启动回滚前,您必须等待 OpenShift SDN 到 OVN-Kubernetes 网络插件的迁移过程成功。
如果需要回滚到 OpenShift SDN,下表描述了这个过程。
用户发起的步骤 | 迁移操作 |
---|---|
通过将 |
|
先决条件
-
已安装 OpenShift CLI (
oc
)。 - 可以使用具有 cluster-admin 角色的用户访问集群。
- 集群安装在使用 OVN-Kubernetes 网络插件配置的基础架构上。
- etcd 数据库的最新备份可用。
- 可以为每个节点触发手动重新引导。
- 集群处于已知良好状态,没有任何错误。
流程
要启动回滚到 OpenShift SDN,请输入以下命令:
oc patch Network.config.openshift.io cluster --type='merge' --patch '{"metadata":{"annotations":{"network.openshift.io/network-type-migration":""}},"spec":{"networkType":"OpenShiftSDN"}}'
$ oc patch Network.config.openshift.io cluster --type='merge' --patch '{"metadata":{"annotations":{"network.openshift.io/network-type-migration":""}},"spec":{"networkType":"OpenShiftSDN"}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要监控迁移的进度,请输入以下命令:
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"'
$ 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"'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令每秒打印以下信息:
-
network.config.openshift.io/cluster
对象的状态的条件,报告迁移的进度。 -
与
machine-config-operator
资源相关的不同节点的状态,包括它们是否正在升级或已升级,以及它们的当前和所需的配置。
-
只有在迁移成功且集群处于良好状态时完成以下步骤:
输入以下命令从
network.config
自定义资源中删除network.openshift.io/network-type-migration=
注解:oc annotate network.config cluster network.openshift.io/network-type-migration-
$ oc annotate network.config cluster network.openshift.io/network-type-migration-
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令删除 OVN-Kubernetes 网络供应商命名空间:
oc delete namespace openshift-ovn-kubernetes
$ oc delete namespace openshift-ovn-kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow