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 数据库的最新备份可用。
- 可根据每个节点手动触发重新引导。
- 集群处于已知良好状态,没有任何错误。
流程
停止由 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
25.6.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