14.3. 回滚到 OpenShift SDN 网络供应商
作为集群管理员,如果迁移到 OVN-Kubernetes-Kubernetes 失败,您可以回滚到 OVN-Kubernetes CNI 集群网络供应商的 OpenShift SDN Container Network Interface (CNI) 集群网络供应商。
14.3.1. 将默认 CNI 网络供应商回滚到 OpenShift SDN
作为集群管理员,您可以将集群回滚到 OpenShift SDN 默认 Container Network Interface (CNI) 网络供应商。在回滚过程中,您必须重新引导集群中的每个节点。
只有迁移到 OVN-Kubernetes 失败时才会回滚到 OpenShift SDN。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
使用具有
cluster-admin
角色的用户访问集群。 - 在裸机基础架构上安装的集群,使用 OVN-Kubernetes 默认 CNI 网络供应商进行了配置 。
流程
要启用迁移,请输入以下命令在 Cluster Network Operator 配置对象上设置注解:
$ oc annotate Network.operator.openshift.io cluster \ 'networkoperator.openshift.io/network-migration'=""
停止由 Machine Config Operator(MCO)管理的所有机器配置池:
停止 master 配置池:
$ oc patch MachineConfigPool master --type='merge' --patch \ '{ "spec": { "paused": true } }'
停止 worker 配置池:
$ oc patch MachineConfigPool worker --type='merge' --patch \ '{ "spec":{ "paused" :true } }'
要配置 OpenShift SDN 集群网络供应商,输入以下命令:
$ oc patch Network.config.openshift.io cluster \ --type='merge' --patch '{ "spec": { "networkType": "OpenShiftSDN" } }'
可选: 您可以自定义 OpenShift SDN 的以下设置,以满足您的网络基础架构的要求:
- 最大传输单元(MTU)
- VXLAN 端口
要自定义之前记录的设置或其中的一个设置,进行自定义并输入以下命令。如果您不需要更改默认值,请从补丁中省略该键。
$ oc patch Network.operator.openshift.io cluster --type=merge \ --patch '{ "spec":{ "defaultNetwork":{ "openshiftSDNConfig":{ "mtu":<mtu>, "vxlanPort":<port> }}}}'
mtu
-
Geneve 覆盖网络的 MTU。这个值通常是自动配置的;但是,如果集群中的节点没有都使用相同的 MTU,那么您必须将此值明确设置为比最小节点 MTU 的值小
100
。 port
- Geneve 覆盖网络的 UDP 端口。
patch 命令示例
$ oc patch Network.operator.openshift.io cluster --type=merge \ --patch '{ "spec":{ "defaultNetwork":{ "openshiftSDNConfig":{ "mtu":1200 }}}}'
等待 Multus 守护进程集的 rollout 完成。
$ oc -n openshift-multus rollout status daemonset/multus
Multus pod 的名称格式为
multus-<xxxxx>
,其中<xxxxxxx>
是字母的随机序列。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
要完成回滚,请重新引导集群中的每个节点。例如,您可以使用类似如下的 bash 脚本。这个脚本假定您可以使用
ssh
连接到每个主机,并将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
重新引导集群中的节点后,启动所有机器配置池:
启动 master 配置池:
$ oc patch MachineConfigPool master --type='merge' --patch \ '{ "spec": { "paused": false } }'
启动 worker 配置池:
$ oc patch MachineConfigPool worker --type='merge' --patch \ '{ "spec": { "paused": false } }'
当 MCO 更新每个配置池中的机器时,它会重新引导每个节点。
默认情况下,MCO 会在一个时间段内为每个池更新一台机器,因此迁移完成所需要的时间会随集群大小的增加而增加。
确认主机上新机器配置的状态:
要列出机器配置状态和应用的机器配置名称,请输入以下命令:
$ 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
字段的值。
-
要确认机器配置正确,请输入以下命令:
$ oc get machineconfig <config_name> -o yaml
这里的
<config_name>
是machineconfiguration.openshift.io/currentConfig
字段中机器配置的名称。
确认迁移成功完成:
要确认默认 CNI 网络供应商是 OVN-Kubernetes,请输入以下命令。
status.networkType
的值必须是OpenShiftSDN
。$ oc get network.config/cluster -o jsonpath='{.status.networkType}{"\n"}'
要确认集群节点处于
Ready
状态,请输入以下命令:$ oc get nodes
如果节点一直处于
NotReady
状态,检查机器配置守护进程 pod 日志并解决所有错误。运行以下命令列出 pod:
$ 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>
值是一个随机的 5 个字符的字母数字序列。要显示上一输出中显示的每个机器配置守护进程 pod 的 pod 日志,请输入以下命令:
$ oc logs <pod> -n openshift-machine-config-operator
其中
pod
是机器配置守护进程 pod 的名称。- 解决上一命令输出中显示的日志中的任何错误。
要确认您的 pod 不在错误状态,请输入以下命令:
$ oc get pods --all-namespaces -o wide --sort-by='{.spec.nodeName}'
如果节点上的 pod 处于错误状态,请重新引导该节点。
只有在迁移成功且集群处于良好状态时完成以下步骤:
要从 Cluster Network Operator 配置对象中删除迁移注解,请输入以下命令:
$ oc annotate Network.operator.openshift.io cluster \ networkoperator.openshift.io/network-migration-
要删除 OVN-Kubernetes 网络供应商命名空间,请输入以下命令:
$ oc delete namespace openshift-ovn-kubernetes