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 的设计的。
但是目前的设计我觉得也没什么大问题,也算是更清晰的实现。