This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.14.2.2. 迁移至 OVN-Kubernetes 默认 CNI 网络供应商
作为集群管理员,您可以将集群的默认 Container Network Interface (CNI) 网络供应商更改为 OVN-Kubernetes。在迁移过程中,您必须重新引导集群中的每个节点。
在进行迁移时,集群不可用,工作负载可能会中断。仅在服务中断可以接受时才执行迁移。
先决条件
- 在裸机安装程序置备的基础架构上安装的集群,以及在网络策略隔离模式下使用 OpenShift SDN 默认 CNI 网络供应商进行配置。
-
安装 OpenShift CLI(
oc
)。 -
使用具有
cluster-admin
角色的用户访问集群。 - etcd 数据库的最新备份可用。
- 集群处于已知良好状态,没有任何错误。
流程
要备份集群网络的配置,请输入以下命令:
oc get Network.config.openshift.io cluster -o yaml > cluster-openshift-sdn.yaml
$ oc get Network.config.openshift.io cluster -o yaml > cluster-openshift-sdn.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要启用迁移,请输入以下命令在 Cluster Network Operator 配置对象上设置注解:
oc annotate Network.operator.openshift.io cluster \ 'networkoperator.openshift.io/network-migration'=""
$ oc annotate Network.operator.openshift.io cluster \ 'networkoperator.openshift.io/network-migration'=""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 停止由 Machine Config Operator(MCO)管理的所有机器配置池:
停止 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 停止 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
要配置 OVN-Kubernetes 集群网络供应商,请输入以下命令:
oc patch Network.config.openshift.io cluster \ --type='merge' --patch '{ "spec": { "networkType": "OVNKubernetes" } }'
$ oc patch Network.config.openshift.io cluster \ --type='merge' --patch '{ "spec": { "networkType": "OVNKubernetes" } }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 您可以自定义 OVN-Kubernetes 的以下设置,以满足您的网络基础架构要求:
- 最大传输单元(MTU)
- Geneve(Generic Network Virtualization Encapsulation)覆盖网络端口
要自定义之前记录的设置之一,请输入以下命令。如果您不需要更改默认值,请从补丁中省略该键。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mtu
-
Geneve 覆盖网络的 MTU。这个值通常是自动配置的;但是,如果集群中的节点没有都使用相同的 MTU,那么您必须将此值明确设置为比最小节点 MTU 的值小
100
。 port
- Geneve 覆盖网络的 UDP 端口。
更新
mtu
字段的 patch 命令示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 等待 Multus 守护进程集的 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>
,其中<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
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 要完成迁移,请重新引导集群中的每个节点。例如,您可以使用类似以下示例的 bash 脚本。这个脚本假定您可以使用
ssh
连接到每个主机,并将sudo
配置为不提示输入密码。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果无法使用 ssh 访问,您可能无法通过基础架构供应商的管理门户重新引导每个节点。
重新引导集群中的节点后,启动所有机器配置池:
启动 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 会在一个时间段内为每个池更新一台机器,因此迁移完成所需要的时间会随集群大小的增加而增加。
确认主机上新机器配置的状态:
要列出机器配置状态和应用的机器配置名称,请输入以下命令:
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
字段的值。
-
要确认机器配置正确,请输入以下命令:
oc get machineconfig <config_name> -o yaml | grep ExecStart
$ oc get machineconfig <config_name> -o yaml | grep ExecStart
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这里的
<config_name>
是machineconfiguration.openshift.io/currentConfig
字段中机器配置的名称。机器配置必须包括以下对 systemd 配置的更新:
ExecStart=/usr/local/bin/configure-ovs.sh OVNKubernetes
ExecStart=/usr/local/bin/configure-ovs.sh OVNKubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
确认迁移成功完成:
要确认默认 CNI 网络供应商是 OVN-Kubernetes,请输入以下命令。
status.networkType
的值必须是OVNKubernetes
。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
状态,请输入以下命令:oc get nodes
$ oc get nodes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果节点一直处于
NotReady
状态,检查机器配置守护进程 pod 日志并解决所有错误。运行以下命令列出 pod:
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>
值是一个随机的 5 个字符的字母数字序列。使用以下命令,输出在上一个输出中显示的第一个机器配置守护进程 pod 的 pod 日志:
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 不在错误状态,请输入以下命令:
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 配置对象中删除迁移注解,请输入以下命令:
oc annotate Network.operator.openshift.io cluster \ networkoperator.openshift.io/network-migration-
$ oc annotate Network.operator.openshift.io cluster \ networkoperator.openshift.io/network-migration-
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要删除 OpenShift SDN 网络供应商命名空间,请输入以下命令:
oc delete namespace openshift-sdn
$ oc delete namespace openshift-sdn
Copy to Clipboard Copied! Toggle word wrap Toggle overflow