k8s.v1.cni.cncf.io/networks: [{"interface":"pod0fc3376583a","name":"attachnet","namespace":"default"}]
const MultusNetworksAnnotation = "k8s.v1.cni.cncf.io/networks" NetworkAttachmentAnnot = "k8s.v1.cni.cncf.io/networks"
最近发现网卡名突然变了,导致 kube-ovn cni 生成网卡名出了一个bug,之前net1 的网卡名,在 kubevirt 虚拟机 pod 场景已经不再使用了,所以查了一下 这种网卡名导致是谁动的。
大致过滤了下 kube-ovn multus-cni 的代码,都是取该字段,并没有赋值该字段。
# pod annos
k8s.v1.cni.cncf.io/networks: [{"interface":"pod0fc3376583a","name":"attachnet","namespace":"default"}]
# 相关代码逻辑
(vv) ➜ kubevirt git:(main)
(vv) ➜ kubevirt git:(main) grep -E "MultusNetworksAnnotation|NetworkAttachmentAnnot" -r *
pkg/virt-controller/watch/vmi.go: podAnnotations[networkv1.NetworkAttachmentAnnot],
pkg/virt-controller/watch/vmi.go: newAnnotations := map[string]string{networkv1.NetworkAttachmentAnnot: multusAnnotations}
pkg/virt-controller/watch/vmi_test.go: Expect(pod.Annotations).To(HaveKey(networkv1.NetworkAttachmentAnnot))
pkg/virt-controller/watch/vmi_test.go: Expect(pod.Annotations).NotTo(HaveKey(networkv1.NetworkAttachmentAnnot))
pkg/virt-controller/watch/vmi_test.go: networkv1.NetworkAttachmentAnnot,
pkg/virt-controller/watch/vmi_test.go: networkv1.NetworkAttachmentAnnot,
pkg/virt-controller/watch/vmi_test.go: func(testPodNetworkStatus []networkv1.NetworkStatus, expectedMultusNetworksAnnotation string) {
pkg/virt-controller/watch/vmi_test.go: Expect(pod.Annotations).To(HaveKey(networkv1.NetworkAttachmentAnnot))
pkg/virt-controller/watch/vmi_test.go: Expect(pod.Annotations[networkv1.NetworkAttachmentAnnot]).To(MatchJSON(expectedMultusNetworksAnnotation))
pkg/virt-controller/watch/vmi_test.go: podAnnotations[networkv1.NetworkAttachmentAnnot] = multusAnnotations
pkg/virt-controller/services/template_test.go: func(migrationSourcePodNetworksAnnotation, expectedTargetPodMultusNetworksAnnotation map[string]string) {
pkg/virt-controller/services/template_test.go: Expect(targetPod.Annotations[MultusNetworksAnnotation]).To(MatchJSON(expectedTargetPodMultusNetworksAnnotation[MultusNetworksAnnotation]))
pkg/virt-controller/services/template_test.go: MultusNetworksAnnotation: `[
pkg/virt-controller/services/template_test.go: MultusNetworksAnnotation: `[
pkg/virt-controller/services/template.go:const MultusNetworksAnnotation = "k8s.v1.cni.cncf.io/networks"
pkg/virt-controller/services/template.go: podManifest.Annotations[networkv1.NetworkAttachmentAnnot] = multusNetworksAnnotation
pkg/virt-controller/services/template.go: annotationsSet[MultusNetworksAnnotation] = multusAnnotation
vendor/github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/apis/k8s.cni.cncf.io/v1/types.go: NetworkAttachmentAnnot = "k8s.v1.cni.cncf.io/networks"
(vv) ➜ kubevirt git:(main)
然后过滤了下 kubevirt 的代码,发现是 kubevirt 赋值的。这个命名目前比net1 net2 的确更能准确是适应热插拔场景。
net1 net2 的命名逻辑应该还是算 cni 的逻辑,macvlan 应该也会命名这种逻辑,某种意义上说,kubevirt 这点逻辑,算是 cni 的逻辑。