随着云原生技术从利用侧向数据中心和基础设施下沉, 越来越多的企业开始应用 Kubernetes 和 KubeVirt 来运行虚拟化工作负载,实现在对立的管制立体同时治理虚拟机和容器 。然而一方面虚拟机的应用场景和习惯都和容器有着显著的差别,另一方面新兴的容器网络并没有专门对虚拟化场景进行设计,性能的齐备性和性能都与传统虚拟化网络存在较大差距。网络问题成为了云原生虚拟化的瓶颈所在。
Kube-OVN 因为应用了在传统虚拟化网络中失去宽泛应用的 OVN/OVS,在开源后失去了很多 KubeVirt 用户的关注,一部分前沿的 KubeVirt 用户依据本人的应用场景进一步欠缺了 Kube-OVN 的网络能力。本文零碎总结了 Kube-OVN 社区中针对 KubeVirt 优化的性能,能够帮忙用户很好地解决云原生虚拟化面临的难题。
VM 固定地址
容器网络通常对地址是否固定不做要求,然而在 VM 的应用场景中,VM 的地址通常作为次要的拜访形式,使用者通常要求 VM 的地址保持稳定,不能随着 VM 的启停,降级,迁徙而发生变化。虚拟化的管理员通常也对地址的调配有着管控的需要,心愿领有指定 VM 地址的能力。
Kube-OVN 通过长时间的迭代目前反对了:
- VM 创立时指定 IP,VM 生命周期内地址放弃固定
- VM 创立时随机地址调配,VM 生命周期内地址放弃固定
- VM 热迁徙过程中业务网卡放弃地址固定
VM 创立时指定 IP
对于由管理员被动给 VM 调配地址,并在启动前确定地址的状况,只须要在 KubeVirt 的 VirtualMachine 的 template 中的 annotations 减少 ovn.kubernetes.io/ip_address 来指定须要调配的地址。
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachine
metadata:
name: testvm
spec:
template:
metadata:
annotations:
ovn.kubernetes.io/ip_address: 10.16.0.15
以该形式启动的 VM,Kube-OVN 会主动依照 annotation 字段调配固定 IP,VM instance 重建启停不会导致 IP 变动。
【参考资料】
kube-ovn/static-ip.md at master · kubeovn/kube-ovn
VM 创立时地址随机调配,生命周期内固定
在一些场景下,管理员并不想每次都手动给 VM 指定地址,然而心愿 VM 在创立后销毁前的地址可能放弃不变,不会因为 VM 重启,降级,启停等操作发生变化。
Kube-OVN 在 v1.8.3 和 v1.9.1 后引入了将 VM 调配的地址和 VirtualMachine
实例关联的能力,Kube-OVN 内针对 VM 调配的地址生命周期将和 VirtualMachine
实例生命周期统一,实现一对一的映射。管理员无需手动调配 VM 地址即可实现生命周期内 VM 地址的固定。
新版本 Kube-OVN 用户只需在 kube-ovn-controller 中减少如下参数即可开启这个性能:
–keep-vm-ip=true
【参考资料】
https://github.com/kubeovn/ku…
https://github.com/kubeovn/ku…
VM 热迁徙的固定地址
KubeVirt 的热迁徙在网络方面面临很大的挑战,尤其是在固定 IP 的场景下,如何保障 IP 不抵触就变得更为简单。因为 KubeVirt 在热迁徙中应用 default network 进行状态的同步,通过联合 multus-cni 将业务网络和迁徙网络拆散,咱们能够在性能层面实现热迁徙过程中的地址固定。
1、默认网络只用于热迁徙,须要应用 multus-cni 将 Kube-OVN 作为从属网卡附加给 VM
2、VM 减少对应的 annotation 以开启固定 IP 和热迁徙反对性能
<attach>.<ns>.ovn.kubernetes.io/allow_live_migration: ‘true’
3、KubeVirt 的 DHCP 会设置谬误的默认路由,须要减少 annotation
<attach >.<ns>ovn.kubernetes.io/default_route: ‘true’
来抉择正确的默认路由网卡。
通过以上的配置 Kube-OVN 将会接管热迁徙过程中网络的转移过程,抉择适合的工夫点进行网络切换。
【参考资料】
https://github.com/kubeovn/ku…
多租户网络
在传统的虚拟化应用场景中,依靠于 VPC 网络的多租户个别被认为是最佳实际也是许多企业根底 IT 的已有运行形式。然而在容器畛域,因为 Kubernetes 最早面向利用平台,不足对多租户级别隔离的反对,导致容器网络和 KubeVirt 上的多租户反对也变得艰难。
Kube-OVN 通过引入了一组新的多租户网络 CRD,包含 VPC,Subnet,NAT-Gateway
在 Kubernetes 上实现了多租户网络的性能。KubeVirt 上的虚拟化治理能够通过管制网络所属的 VPC 和 Subnet 来实现不同的 VM 落在不同的租户网络,从而实现整个虚拟化计划的多租户。
此外 Kube-OVN 还提供了租户内的 LB/EIP/NAT/Route Table 等性能,使用户可能像管制传统虚拟化网络一样来管制云原生虚拟化下的网络。
【参考资料】
kube-ovn/vpc.md at master · kubeovn/kube-ovn
SR-IOV 以及 OVS-DPDK 反对
KubeVirt 默认的 Pod 模式网络因为须要适配 CNI 的标准,存在着网络门路较长,性能较差的问题。而 SR-IOV 模式存在着性能不灵便,配置艰难的问题。Kube-OVN 通过利用目前智能网卡所反对的 OVS offload 能力,将 SRIOV 设施直通给 KubeVirt 的 VM 实现了高性能,同时保留了地址调配和 OVN 逻辑流表的性能,实现了残缺的 SDN 网络能力,达到了性能和性能的良好联合。
此外,只管上游 KubeVirt 还没有对 OVS-DPDK 类型网络的反对,然而在 Kube-OVN 社区内很多用户独立开发了 KubeVirt 对 OVS-DPDK 的反对,同时也开发了 Kube-OVN 内对 OVS-DPDK 的反对,这样即便是一般网卡也能够通过 OVS-DPDK 用户态的减速能力来加强 VM 内的网络吞吐能力。
【参考资料】
kube-ovn/hw-offload-mellanox.md at master · kubeovn/kube-ovn
kube-ovn/hw-offload-corigine.md at master · kubeovn/kube-ovn
kube-ovn/dpdk-hybrid.md at master · kubeovn/kube-ovn
总结
因为在技术选型上天生的亲热性,KubeVirt 社区的用户在 Kube-OVN 中奉献了大量针对云原生虚拟化进行强化的性能,包含固定地址,多租户网络和 SR-IOV 以及 OVS-DPDK 等性能。这些性能极大地强化了 KubeVirt 的云原生虚拟化体验,咱们心愿通过这篇文章总结 KubeVirt 所须要的一些非凡网络场景心愿更多 KubeVirt 社区的用户能够来体验这些性能,并将更多的性能需要反馈给 Kube-OVN 社区。
有奖调研!云原生虚拟化需要考察
为了理解更多云原生虚拟化场景的需要,优化应用体验,
Kube-OVN 社区诚邀您加入《云原生虚拟化需要考察》
参加问卷填写,咱们将抽取 30 位用户,赠送社区精美纪念品!
——- 问卷共 5 题,仅需 2 分钟 ——-
【扫码】填写
对于 Kube-OVN
Kube-OVN 是一款由灵雀云自主研发的企业级云原生 Kubernetes 容器网络编排零碎,它通过将 OpenStack 畛域成熟的网络性能平移到 Kubernetes,极大加强了 Kubernetes 容器网络的安全性、可运维性、管理性和性能,为 Kubernetes 生态的落地带来了独特的价值。
2021 年初,Kube-OVN 成为寰球范畴内首个被 CNCF 纳入托管的开源 CNI 网络我的项目,也是中国容器公司首次将独立设计研发的我的项目胜利奉献进入 CNCF 基金会,同时,它也是木兰社区旗下的明星我的项目之一。