配置 MTU

在 Kube-OVN 中,MTU(最大传输单元)设置对于确保网络性能的最佳状态和避免数据包分片至关重要。
MTU 定义了网络中可传输的最大数据包大小。

默认情况下,Kube-OVN 会检测底层物理网络接口的 MTU,并相应地为虚拟网络接口设置 MTU。
但是,在某些场景下,您可能需要为 Kube-OVN 网络组件自定义 MTU 设置。

默认 MTU 行为

Kube-OVN 会自动检测主机物理网络接口的 MTU,
并相应地为 Pod 和 OVS 接口设置 MTU。

在覆盖网络中,Kube-OVN 会降低 MTU 以适应 VXLAN 或 Geneve 封装的开销。
MTU 的计算方式如下:

封装类型隧道 IP 版本MTU 计算方式
GeneveIPv4物理网络接口 MTU - 100
IPv6物理网络接口 MTU - 120
VXLANIPv4物理网络接口 MTU - 50
IPv6物理网络接口 MTU - 70

在底层网络中,MTU 设置为与物理网络接口 MTU 相同。

自定义 MTU 设置

MTU 设置可以全局自定义(针对覆盖网络),也可以针对每个子网单独设置。

WARNING

错误调整 MTU 设置可能导致网络性能问题,
包括数据包丢失和分片。请确保 MTU 设置与您的底层网络基础设施兼容后再进行修改。

NOTE

MTU 配置更改仅对新创建的 Pod 生效。
现有 Pod 将保留其原有的 MTU 设置,直到它们被重新创建。
建议在更改 MTU 设置时规划 Pod 重启。

全局 MTU 配置

要为覆盖网络设置全局 MTU,您可以修改 kube-ovn-cni DaemonSet 的命令参数。
例如,要将全局 MTU 设置为 1400,可以按如下方式更新 DaemonSet:

kubectl -n kube-system edit ds kube-ovn-cni

然后,在容器的参数中添加或更新 --mtu=1400

apiVersion: apps/v1
kind: DaemonSet
metadata:
    kubernetes.io/description: |
      This daemon set launches the kube-ovn cni daemon.
  name: kube-ovn-cni
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: kube-ovn-cni
  template:
    metadata:
      labels:
        app: kube-ovn-cni
        component: network
        type: infra
    spec:
      containers:
      - name: cni-server
        args:
        - --mtu=1400
NOTE

全局 MTU 设置仅影响覆盖网络。对于底层网络,
MTU 默认保持与物理网络接口 MTU 相同。

按子网 MTU 配置

您也可以通过在子网配置中指定 mtu 字段,为单个子网设置 MTU。
例如,要将某个子网的 MTU 设置为 1450,可以使用以下命令:

kubectl patch subnet my-subnet --type merge -p '{"spec": {"mtu": 1450}}'

该设置将覆盖该子网的全局 MTU 设置。