kubeovn EnableNonPrimaryCNI 模式

5 阅读1分钟

EnableNonPrimaryCNI 是因为使用者就是不想让 kubeovn 配置 eth0 网卡,所以跳过了 ovn 的默认网卡 annotation 的配置。

其实这个逻辑感觉上应该有更好的实现:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    k8s.v1.cni.cncf.io/network-status: |-
      [{
          "name": "default/ovn-vm",
          "interface": "eth0",
          "ips": [
              "10.198.10.15"
          ],
          "mac": "32:2f:68:3d:a2:8a",
          "default": true,
          "dns": {}
      }]
    k8s.v1.cni.cncf.io/networks-status: |-
      [{
          "name": "default/ovn-vm",
          "interface": "eth0",
          "ips": [
              "10.198.10.15"
          ],
          "mac": "32:2f:68:3d:a2:8a",
          "default": true,
          "dns": {}
      }]
    kubectl.kubernetes.io/default-container: compute
    kubevirt.io/domain: i-xxxx
    kubevirt.io/migrationTransportUnix: "true"
    kubevirt.io/vm-generation: "1"
    ovn-vm.default.ovn.kubernetes.io/allocated: "true"
    ovn-vm.default.ovn.kubernetes.io/cidr: 10.198.0.0/16
    ovn-vm.default.ovn.kubernetes.io/gateway: 10.198.0.1
    ovn-vm.default.ovn.kubernetes.io/ip_address: 10.198.10.15
    ovn-vm.default.ovn.kubernetes.io/logical_router: ovn-cluster
    ovn-vm.default.ovn.kubernetes.io/logical_switch: ovn-vm
    ovn-vm.default.ovn.kubernetes.io/mac_address: 32:2f:68:3d:a2:8a
    ovn-vm.default.ovn.kubernetes.io/pod_nic_type: veth-pair
    ovn-vm.default.ovn.kubernetes.io/routed: "true"
    ovn-vm.default.ovn.kubernetes.io/virtualmachine: i-xxxx
    v1.multus-cni.io/default-network: default/ovn-vm

依据:

  • multus 支持配置默认网卡,当然这个网卡应该就是 eth0 v1.multus-cni.io/default-network: default/ovn-vm
  • 如果这个网络是 kube-ovn 存在该子网,而且能找到子网对应的 NAD,那么这个子网就是 kube-ovn 应该配置的默认子网。
  • 这个 kubeovn 中根本不存在该子网,那么 kubeovn 就直接跳过

当然跳过,可能有点不太清晰,当前直接设置了一个 flag,我觉得也合理。

但是我觉得,如果按照 multus 的设计,如果默认 cni 不是 kube-ovn,multus 应该不会触发 kube-ovn-cni 二进制的调用吧? 即使不会触发 kube-ovn-cni 二进制的调用,kube-ovn-controller 控制面还是会误触发,还是会加上默认的子网。

实际上我还是觉得 subnet 如果不存在就是可以跳过的。 因为创建 vm 前,子网肯定是要确保创建的。

subnet 不存在,顶多 warn 一下,也算是直接符合 multus 的设计的。

但是目前的设计我觉得也没什么大问题,也算是更清晰的实现。