KubeOVN 支持 KubeVirt 网卡热插实践
创始人
2025-05-31 20:25:42
0

文章目录

  • 版本
  • 部署
    • kubeovn + kubevirt
    • dynamic-networks-controller
    • multus
  • 使用
    • 创建虚拟机
    • KubeOVN 添加第二张网卡
    • virtctl 添加 interface
    • feature

本文描述基于 KubeOVN + KubeVirt 实现网卡热插的实践方法。
基于 containerd。

版本

kubeovn 基于 feature 提交
kubevirt 基于 commit 3bee1de7b4f8bab059817cf44d636d2521dec8a9

部署

kubeovn + kubevirt

kubeovn 基于社区 install.sh 脚本部署,然后 kube-ovn-controller 镜像替换
kubevirt 可以使用 镜像 quay.io/kubevirt/virt-operator:20230320_3bee1de7b

kubevirt 需要开启 feature-gate

---
apiVersion: kubevirt.io/v1
kind: KubeVirt
metadata:name: kubevirtnamespace: kubevirt
spec:configuration:developerConfiguration: featureGates:- HotplugNICs

dynamic-networks-controller

git clone https://github.com/k8snetworkplumbingwg/multus-dynamic-networks-controller.git
cd multus-dynamic-networks-controller
kubectl apply -f manifests/dynamic-networks-controller.yaml

multus

git clone https://github.com/k8snetworkplumbingwg/multus-cni.git && cd multus-cni
cat ./deployments/multus-daemonset-thick.yml | kubectl apply -f -
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:name: net1namespace: default
spec:config: '{"cniVersion": "0.3.1","name": "kube-ovn","plugins":[{"type":"kube-ovn","server_socket":"/run/openvswitch/kube-ovn-daemon.sock","provider": "net1.default.ovn"},{"type":"portmap","capabilities":{"portMappings":true}}]
}'

使用

创建虚拟机

apiVersion: kubevirt.io/v1
kind: VirtualMachineInstance
metadata:name: testvmi-nocloud
spec:terminationGracePeriodSeconds: 30domain:resources:requests:memory: 1024Mdevices:disks:- name: containerdiskdisk:bus: virtio- name: emptydiskdisk:bus: virtio- disk:bus: virtioname: cloudinitdiskvolumes:- name: containerdiskcontainerDisk:image: kubevirt/fedora-cloud-container-disk-demo:latest- name: emptydiskemptyDisk:capacity: "2Gi"- name: cloudinitdiskcloudInitNoCloud:userData: |-#cloud-configpassword: fedorachpasswd: { expire: False }

检查 pod

$ kubectl get pods -owide
virt-launcher-testvmi-nocloud-sl55d   2/2     Running   0          61s   10.16.0.49   node113              1/1$ kubectl exec -it virt-launcher-testvmi-nocloud-sl55d ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc noop state DOWN group default link/ether 66:6d:26:df:ab:7c brd ff:ff:ff:ff:ff:ffinet 10.16.0.49/16 brd 10.16.255.255 scope global eth0valid_lft forever preferred_lft forever
3: k6t-eth0:  mtu 1400 qdisc noqueue state UP group default link/ether 3e:4c:d9:14:6f:1f brd ff:ff:ff:ff:ff:ffinet 169.254.75.10/32 scope global k6t-eth0valid_lft forever preferred_lft foreverinet6 fe80::3c4c:d9ff:fe14:6f1f/64 scope link valid_lft forever preferred_lft forever
4: tap0:  mtu 1400 qdisc fq_codel master k6t-eth0 state UP group default qlen 1000link/ether fa:5a:68:6c:06:50 brd ff:ff:ff:ff:ff:ffinet6 fe80::f85a:68ff:fe6c:650/64 scope link valid_lft forever preferred_lft forever
41: eth0-nic@if42:  mtu 1400 qdisc noqueue master k6t-eth0 state UP group default link/ether 3e:4c:d9:14:6f:1f brd ff:ff:ff:ff:ff:ff link-netnsid 0inet6 fe80::3c4c:d9ff:fe14:6f1f/64 scope link valid_lft forever preferred_lft forever

检查 虚拟机

$ virtctl console testvmi-nocloud
$ ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0:  mtu 1400 qdisc fq_codel state UP group default qlen 1000link/ether 00:00:00:3b:e5:7b brd ff:ff:ff:ff:ff:ffaltname enp1s0inet 10.16.0.49/16 brd 10.16.255.255 scope global dynamic noprefixroute eth0valid_lft 86313549sec preferred_lft 86313549secinet6 fe80::200:ff:fe3b:e57b/64 scope link valid_lft forever preferred_lft forever

KubeOVN 添加第二张网卡

添加第二张网卡信息,选择上面的 network-attachment-definition 和 subnet

$ kubectl edit pod  virt-launcher-testvmi-nocloud-sl55d
......
k8s.v1.cni.cncf.io/networks: '[{"interface":"net1","name":"net1","namespace":"default"}]'
net1.default.ovn.kubernetes.io/logical_switch: subnet-ipv4
......

检查,新增 net1 192.168.2.15/24

$ kubectl exec -it virt-launcher-testvmi-nocloud-sl55d ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc noop state DOWN group default link/ether 66:6d:26:df:ab:7c brd ff:ff:ff:ff:ff:ffinet 10.16.0.49/16 brd 10.16.255.255 scope global eth0valid_lft forever preferred_lft forever
3: k6t-eth0:  mtu 1400 qdisc noqueue state UP group default link/ether 3e:4c:d9:14:6f:1f brd ff:ff:ff:ff:ff:ffinet 169.254.75.10/32 scope global k6t-eth0valid_lft forever preferred_lft foreverinet6 fe80::3c4c:d9ff:fe14:6f1f/64 scope link valid_lft forever preferred_lft forever
4: tap0:  mtu 1400 qdisc fq_codel master k6t-eth0 state UP group default qlen 1000link/ether fa:5a:68:6c:06:50 brd ff:ff:ff:ff:ff:ffinet6 fe80::f85a:68ff:fe6c:650/64 scope link valid_lft forever preferred_lft forever
41: eth0-nic@if42:  mtu 1400 qdisc noqueue master k6t-eth0 state UP group default link/ether 3e:4c:d9:14:6f:1f brd ff:ff:ff:ff:ff:ff link-netnsid 0inet6 fe80::3c4c:d9ff:fe14:6f1f/64 scope link valid_lft forever preferred_lft forever
43: net1@if44:  mtu 1400 qdisc noqueue state UP group default link/ether 00:00:00:d6:bb:bd brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 192.168.2.15/24 brd 192.168.2.255 scope global net1valid_lft forever preferred_lft foreverinet6 fe80::200:ff:fed6:bbbd/64 scope link valid_lft forever preferred_lft forever

virtctl 添加 interface

添加到 虚拟机内,命名 eth1

$ virtctl addinterface testvmi-nocloud   --network-name default/net1 --iface-name eth1

检查 pod

$ kubectl exec -it virt-launcher-testvmi-nocloud-sl55d ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc noop state DOWN group default link/ether 66:6d:26:df:ab:7c brd ff:ff:ff:ff:ff:ffinet 10.16.0.49/16 brd 10.16.255.255 scope global eth0valid_lft forever preferred_lft forever
3: k6t-eth0:  mtu 1400 qdisc noqueue state UP group default link/ether 3e:4c:d9:14:6f:1f brd ff:ff:ff:ff:ff:ffinet 169.254.75.10/32 scope global k6t-eth0valid_lft forever preferred_lft foreverinet6 fe80::3c4c:d9ff:fe14:6f1f/64 scope link valid_lft forever preferred_lft forever
4: tap0:  mtu 1400 qdisc fq_codel master k6t-eth0 state UP group default qlen 1000link/ether fa:5a:68:6c:06:50 brd ff:ff:ff:ff:ff:ffinet6 fe80::f85a:68ff:fe6c:650/64 scope link valid_lft forever preferred_lft forever
5: net1:  mtu 1500 qdisc noop state DOWN group default link/ether d6:d6:72:f1:12:5c brd ff:ff:ff:ff:ff:ffinet 192.168.2.15/24 brd 192.168.2.255 scope global net1valid_lft forever preferred_lft forever
6: k6t-net1:  mtu 1400 qdisc noqueue state UP group default link/ether 06:73:79:b3:c0:6e brd ff:ff:ff:ff:ff:ffinet 169.254.75.11/32 scope global k6t-net1valid_lft forever preferred_lft foreverinet6 fe80::473:79ff:feb3:c06e/64 scope link valid_lft forever preferred_lft forever
7: tap1:  mtu 1400 qdisc fq_codel master k6t-net1 state UP group default qlen 1000link/ether a2:7b:a6:7c:5a:81 brd ff:ff:ff:ff:ff:ffinet6 fe80::a07b:a6ff:fe7c:5a81/64 scope link valid_lft forever preferred_lft forever
41: eth0-nic@if42:  mtu 1400 qdisc noqueue master k6t-eth0 state UP group default link/ether 3e:4c:d9:14:6f:1f brd ff:ff:ff:ff:ff:ff link-netnsid 0inet6 fe80::3c4c:d9ff:fe14:6f1f/64 scope link valid_lft forever preferred_lft forever
43: net1-nic@if44:  mtu 1400 qdisc noqueue master k6t-net1 state UP group default link/ether 06:73:79:b3:c0:6e brd ff:ff:ff:ff:ff:ff link-netnsid 0inet6 fe80::473:79ff:feb3:c06e/64 scope link valid_lft forever preferred_lft forever

检查虚拟机,新增网卡

[fedora@testvmi-nocloud ~]$ ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0:  mtu 1400 qdisc fq_codel state UP group default qlen 1000link/ether 00:00:00:3b:e5:7b brd ff:ff:ff:ff:ff:ffaltname enp1s0inet 10.16.0.49/16 brd 10.16.255.255 scope global dynamic noprefixroute eth0valid_lft 86312937sec preferred_lft 86312937secinet6 fe80::200:ff:fe3b:e57b/64 scope link valid_lft forever preferred_lft forever
3: eth1:  mtu 1400 qdisc fq_codel state UP group default qlen 1000link/ether 00:00:00:d6:bb:bd brd ff:ff:ff:ff:ff:ffaltname enp8s0inet 192.168.2.15/24 brd 192.168.2.255 scope global dynamic noprefixroute eth1valid_lft 86313539sec preferred_lft 86313539secinet6 fe80::af9d:e259:1171:8b9/64 scope link noprefixroute valid_lft forever preferred_lft forever[fedora@testvmi-nocloud ~]$ ping 192.168.2.1
PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.
64 bytes from 192.168.2.1: icmp_seq=1 ttl=254 time=2.88 ms
64 bytes from 192.168.2.1: icmp_seq=2 ttl=254 time=1.34 ms

检查 libvirt xml,新增

......
......

检查 vmi,新增

......interfaces:......- bridge: {}name: eth1networks:......- multus:networkName: default/net1name: eth1
......

feature

热拔目前未实现,待 kubevirt 开发。

相关内容

热门资讯

关于《塘约道路》党员读后感大全... 导语:《塘约路途》指引我国村庄前进方向,塘约路途是有远见的当地领导干部率民众放下包袱、轻装上阵、齐心...
关于塘约道路读后感精选3篇最新...  导语:《塘约路途》指引我国乡村前进方向,塘约路途是有远见的本地领导干部率民众放下包袱、轻装上阵、群...
《塘约道路》读后感1000字精...  塘约路途读后感范文【1】  《塘约路途》由陈述文学家、闻名专家王宏甲所创造,是记载贵州安顺一个穷山...
最新或2023(历届)党员干部... 导语:《塘约路途》由陈述文学家、闻名专家王宏甲所创造,是记载贵州安顺一个穷山村在党安排带领下,如何从...
最新或2023(历届)最新《套... 套中人读后感【篇一】  读《套中人》令我感到《套中人》中的形象在现实中也是存在的,有人说《套中人》很...
最新《终结拖延症》读后感 终结... 最新《终结拖延症》读后感【篇一】  之前一次参加果壳的赠书写书评的活动又一次赤裸裸的见证了我的拖延症...
《永生的眼睛》读后感【最新】 ... 永生的眼睛读后感【篇一】  今天,我读了《永生的眼睛》,心里深受感动。  课文主要讲了作者一家三代已...
最新或2023(历届)《野性的... 野性的呼唤读后感【篇一】  野性的呼唤是一本很好的书,不像童话那样可爱生动活泼,有时候甚至是让人感到...
有关《金色的脚印》读后感 金色... 有关金色的脚印读后感【篇一】  读了《金色的脚印》这篇文章,我才明白了狐狸并不是没有良心的,它们也有...
有关《森林报》读后感集锦 森林... 森林报读后感【篇一】  最近我看了《森林报》,我觉得它很好看,森林报是一份特殊的报纸,它与其它报纸全...
儒商是中国梦的推动者读后感 儒... 儒商是中国梦的推动者读后感一:  5月9日在学习了《儒商是中国梦的推动者》一文之后,感慨颇多:  所...
反腐小说《人民的名义》读后感 ... 反腐小说《人民的名义》读后感【篇一】  在官场文学的作品里,论文学性,周梅森的作品不如阎真的《沧浪之...
关于《美丽广州我的中国梦》读后... 《美丽广州我的中国梦》读后感【篇一】  广州市爱国主义教育基地层次多样、内容丰富、分布广泛、影响力强...
最新或2023(历届)《狼王梦... 最新或2023(历届)狼王梦读后感600字【篇一】  《狼王梦》是“动物小说大王”沈石溪写的一部关于...
老舍写的母鸡读后感精选 老舍的... 老舍写的母鸡读后感【篇一】  今天我们学习了《母鸡》这篇课文,母鸡对她的小雏鸡关心,呵护让我很感动。...
读《米开朗琪罗传》有感 3篇 ... 读米开朗琪罗传有感【篇一】  名人传中,介绍了三位伟人,分别是贝多芬、米开朗琪罗和托尔斯泰,米开朗琪...
关于革命先烈的英雄事迹读后感 ... 关于革命先烈的英雄事迹读后感【篇一】  如果问是谁开创了中国历史的先河,我会回答:革命先烈们。他们用...
《普法教育读本》读后感精选 普... 《普法教育读本》读后感【篇一】  我们从小就接受法制教育, 享受法律给予的权利.但是在事实上到底有多...
最新《青少年普法教育读本》读后... 《青少年普法教育读本》读后感【篇一】  《全国青少年普法教育读本》,这本书,始终让我记忆犹新。因为,...
读《百年追梦全面小康》有感 读... 读《百年追梦全面小康》有感一:  根据我国经济社会发展实际,党的十六大、十七大都确立了全面建设小康社...