kubevirt 1.0 网卡名变动

180 阅读1分钟

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 的逻辑。