在集群网络操作符配置中设置以下值:
-
spec.migration.mtu.machine.to
-
spec.migration.mtu.network.from
-
spec.migration.mtu.network.to
在安装期间,集群网络的最大传输单元 (MTU) 会根据集群中节点的主网络接口的MTU自动检测。您通常不需要覆盖检测到的MTU。
您可能需要更改集群网络的MTU,原因如下:
在集群安装期间检测到的MTU不适合您的基础设施。
您的集群基础设施现在需要不同的MTU,例如添加需要不同MTU才能获得最佳性能的节点。
只有OVN-Kubernetes集群网络插件支持更改MTU值。
当您在集群上启动MTU更改时,以下影响可能会影响服务可用性:
至少需要两次滚动重启才能完成迁移到新的MTU。在此期间,某些节点在重启时不可用。
部署到集群的特定应用程序,其超时间隔短于绝对TCP超时间隔,在MTU更改期间可能会出现中断。
在规划MTU迁移时,需要考虑两个相关但不同的MTU值。
硬件MTU:此MTU值根据您的网络基础设施的具体情况设置。
集群网络MTU:此MTU值始终小于您的硬件MTU,以考虑集群网络覆盖开销。具体的开销由您的网络插件确定。对于OVN-Kubernetes,开销为100
字节。
如果您的集群需要为不同的节点使用不同的MTU值,则必须从集群中任何节点使用的最低MTU值中减去网络插件的开销值。例如,如果集群中某些节点的MTU为9001
,而某些节点的MTU为1500
,则必须将此值设置为1400
。
为避免选择节点无法接受的MTU值,请使用 |
下表通过将过程中用户启动的步骤与迁移响应执行的操作区分开来,总结了迁移过程。
用户启动的步骤 | OpenShift Container Platform活动 |
---|---|
在集群网络操作符配置中设置以下值:
|
集群网络操作符 (CNO):确认每个字段都设置为有效值。
如果提供的值有效,则 CNO 将写入一个新的临时配置,其中集群网络的 MTU 设置为 机器配置操作符 (MCO):对集群中的每个节点执行滚动重启。 |
重新配置集群上节点的主网络接口的 MTU。您可以使用多种方法来实现此目的,包括
|
N/A |
在网络插件的 CNO 配置中设置 |
机器配置操作符 (MCO):使用新的 MTU 配置对集群中的每个节点执行滚动重启。 |
作为集群管理员,您可以增加或减少集群的最大传输单元 (MTU)。
迁移是有破坏性的,集群中的节点在 MTU 更新生效时可能会暂时不可用。 |
以下过程描述了如何使用机器配置、动态主机配置协议 (DHCP) 或 ISO 镜像更改集群网络 MTU。如果您使用 DHCP 或 ISO 方法,则必须参考安装集群后保留的配置工件以完成此过程。
您已安装 OpenShift CLI (oc
)。
您可以使用具有 cluster-admin
权限的帐户访问集群。
您已确定集群的目标 MTU。OVN-Kubernetes 网络插件的 MTU 必须设置为集群中最低硬件 MTU 值减去 100
。
要获取集群网络的当前 MTU,请输入以下命令
$ oc describe network.config cluster
...
Status:
Cluster Network:
Cidr: 10.217.0.0/22
Host Prefix: 23
Cluster Network MTU: 1400
Network Type: OVNKubernetes
Service Network:
10.217.4.0/23
...
准备您的硬件 MTU 配置
如果您的硬件 MTU 是使用 DHCP 指定的,请更新您的 DHCP 配置,例如使用以下 dnsmasq 配置
dhcp-option-force=26,<mtu>
其中
<mtu>
指定 DHCP 服务器要通告的硬件 MTU。
如果您的硬件 MTU 是使用带有 PXE 的内核命令行指定的,请相应地更新该配置。
如果您的硬件 MTU 是在 NetworkManager 连接配置中指定的,请完成以下步骤。如果您没有使用 DHCP、内核命令行或其他方法显式指定网络配置,则此方法是 OpenShift Container Platform 的默认方法。为了使以下过程无需修改即可工作,您的集群节点必须全部使用相同的底层网络配置。
通过输入以下命令查找主网络接口
$ oc debug node/<node_name> -- chroot /host nmcli -g connection.interface-name c show ovs-if-phys0
+
其中
<node_name>
指定集群中节点的名称。
在 <interface>-mtu.conf
文件中创建以下 NetworkManager 配置
[connection-<interface>-mtu]
match-device=interface-name:<interface>
ethernet.mtu=<mtu>
其中
<mtu>
指定新的硬件 MTU 值。
<interface>
指定主网络接口名称。
创建两个 MachineConfig
对象,一个用于控制平面节点,另一个用于集群中的工作节点
在 control-plane-interface.bu
文件中创建以下 Butane 配置
variant: openshift
version: 4.17.0
metadata:
name: 01-control-plane-interface
labels:
machineconfiguration.openshift.io/role: master
storage:
files:
- path: /etc/NetworkManager/conf.d/99-<interface>-mtu.conf (1)
contents:
local: <interface>-mtu.conf (2)
mode: 0600
1 | 指定主网络接口的 NetworkManager 连接名称。 |
2 | 指定上一步中更新的 NetworkManager 配置文件的本地文件名。 |
在 worker-interface.bu
文件中创建以下 Butane 配置
variant: openshift
version: 4.17.0
metadata:
name: 01-worker-interface
labels:
machineconfiguration.openshift.io/role: worker
storage:
files:
- path: /etc/NetworkManager/conf.d/99-<interface>-mtu.conf (1)
contents:
local: <interface>-mtu.conf (2)
mode: 0600
1 | 指定主网络接口的 NetworkManager 连接名称。 |
2 | 指定上一步中更新的 NetworkManager 配置文件的本地文件名。 |
通过运行以下命令从 Butane 配置创建 MachineConfig
对象
$ for manifest in control-plane-interface worker-interface; do
butane --files-dir . $manifest.bu > $manifest.yaml
done
在此过程的后面明确指示之前,不要应用这些机器配置。现在应用这些机器配置会导致集群稳定性下降。 |
要开始 MTU 迁移,请通过输入以下命令指定迁移配置。机器配置操作符将对集群中的节点执行滚动重启,以准备进行 MTU 更改。
$ oc patch Network.operator.openshift.io cluster --type=merge --patch \
'{"spec": { "migration": { "mtu": { "network": { "from": <overlay_from>, "to": <overlay_to> } , "machine": { "to" : <machine_to> } } } } }'
其中
<overlay_from>
指定当前集群网络 MTU 值。
<overlay_to>
指定集群网络的目标 MTU。此值相对于 <machine_to>
的值设置。对于 OVN-Kubernetes,此值必须为 <machine_to>
的值减去 100
。
<machine_to>
指定底层主机网络上主网络接口的 MTU。
$ oc patch Network.operator.openshift.io cluster --type=merge --patch \
'{"spec": { "migration": { "mtu": { "network": { "from": 1400, "to": 9000 } , "machine": { "to" : 9100} } } } }'
随着机器配置操作符更新每个机器配置池中的机器,它将逐个重启每个节点。您必须等到所有节点都更新完毕。通过输入以下命令检查机器配置池状态
$ oc get machineconfigpools
成功更新的节点具有以下状态:UPDATED=true
、UPDATING=false
、DEGRADED=false
。
默认情况下,机器配置操作符一次更新每个池中的一台机器,导致迁移所需的时间随着集群大小的增加而增加。 |
确认主机上新机器配置的状态
要列出机器配置状态和应用的机器配置的名称,请输入以下命令
$ 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 | grep ExecStart
其中 <config_name>
是 machineconfiguration.openshift.io/currentConfig
字段中机器配置的名称。
机器配置必须包含以下对 systemd 配置的更新
ExecStart=/usr/local/bin/mtu-migration.sh
更新底层网络接口 MTU 值
如果您使用 NetworkManager 连接配置指定新的 MTU,请输入以下命令。机器配置操作符将自动对集群中的节点执行滚动重启。
$ for manifest in control-plane-interface worker-interface; do
oc create -f $manifest.yaml
done
如果您使用 DHCP 服务器选项和内核命令行以及 PXE 指定新的 MTU,请对您的基础架构进行必要的更改。
随着机器配置操作符更新每个机器配置池中的机器,它将逐个重启每个节点。您必须等到所有节点都更新完毕。通过输入以下命令检查机器配置池状态
$ oc get machineconfigpools
成功更新的节点具有以下状态:UPDATED=true
、UPDATING=false
、DEGRADED=false
。
默认情况下,机器配置操作符一次更新每个池中的一台机器,导致迁移所需的时间随着集群大小的增加而增加。 |
确认主机上新机器配置的状态
要列出机器配置状态和应用的机器配置的名称,请输入以下命令
$ 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 | grep path:
其中 <config_name>
是 machineconfiguration.openshift.io/currentConfig
字段中机器配置的名称。
如果机器配置成功部署,则之前的输出包含 /etc/NetworkManager/conf.d/99-<interface>-mtu.conf
文件路径和 ExecStart=/usr/local/bin/mtu-migration.sh
行。
要完成 MTU 迁移,请为 OVN-Kubernetes 网络插件输入以下命令:
$ oc patch Network.operator.openshift.io cluster --type=merge --patch \
'{"spec": { "migration": null, "defaultNetwork":{ "ovnKubernetesConfig": { "mtu": <mtu> }}}}'
其中
<mtu>
指定您使用<overlay_to>
指定的新的集群网络 MTU。
完成 MTU 迁移后,每个机器配置池节点将逐个重启。您必须等待所有节点更新完成。通过输入以下命令检查机器配置池状态:
$ oc get machineconfigpools
成功更新的节点具有以下状态:UPDATED=true
、UPDATING=false
、DEGRADED=false
。
要获取集群网络的当前 MTU,请输入以下命令:
$ oc describe network.config cluster
获取节点主网络接口的当前 MTU
要列出集群中的节点,请输入以下命令:
$ oc get nodes
要获取节点上主网络接口的当前 MTU 设置,请输入以下命令:
$ oc debug node/<node> -- chroot /host ip address show <interface>
其中
<node>
指定上一步输出中的一个节点。
<interface>
指定节点的主网络接口名称。
ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8051