容器网络插件那么多,博云为什么基于OVS深度自研?
背景
从2015年开始,博云开始基于Kubernetes和容器帮助客户交付应用管理平台。在开始阶段,博云选择了业界使用度非常广泛且成熟稳定的calico作为默认的网络方案并在calico方面积累了大量生产实践经验。随着容器云平台的落地越来越多,关于容器云平台网络部分的建设要求也越来越高,我们和多家客户进行了深入沟通,虽然需求有所差异,但总结下来主要的诉求包括:
从运维管理角度,更倾向于采用二层网络模型:在主流的二层组网的数据中心中,受限于硬件能力、运维人员的能力和管理复杂度等需求,大部分客户不希望引入BGP等三层路由概念,希望采用大部分运维人员比较熟悉的二层网络方案。
希望容器云内部网络与外部网络互联互通:业务应用往往会在容器云平台内外同时部署,希望平台内外网络能够直接打通,POD与虚拟机/物理机同等地位,也更有利于与已有的云产品无缝整合。
需要支持Pod固定IP地址:应用互访跨防火墙的等场景下,需要POD具备固定IP地址。此需求集中出现在应用实例访问另一个业务分区的防火墙的场景下。
需要管理网络和业务网络分离。
IPV6支持。
高性能,低抖动。
灵活的网络隔离:包括强安全性的硬件隔离和灵活的软件隔离。
希望一套网络模型同时支持Underlay和Overlay:Underlay性能好,可以内外网互通;Overlay不依赖底层网络,灵活性强,最好可以同时支持。
希望网络模型应该尽量简单,易于运维管理和调试。
其他的高级特性,如双向限速、DPDK支持等。
博云容器云团队对市面上主流的CNI插件进行了广泛的调研后,发现主流的CNI插件对以上需求的支持并不理想,难以同时满足如上的网络需求,集中体现在内外网互通、管理业务网络分离、灵活的网络隔离机制、易于运维管理和调试等问题上。
我们针对网络建设的核心需求及社区现状综合分析之后,于18年启动基于OVS深度自研的容器网络插件BeyondFabric项目,目前该插件已经作为博云容器云平台重点支持的两个网络模型(calico/BeyondFabric)之一,作为博云容器网络的默认插件,支撑了多家企业的生产系统的长时间的稳定运行。
二层网络模型技术对比
得益于CNI规范的简单性(相对于IETF的各种RFC),现在CNI插件的各种实现可以说是百花齐放。网络上对多种CNI的比较也是层出不穷,这里就不一一列举了。因为我们在选型阶段主要考虑二层网络模型(calico已经是非常优秀的三层解决方案了),所以我们主要对二层网络的基本单元进行了比较,因为bridge能力过于简单,所以主要是ovs和macvlan的比较,同时为了对比方便,也引入了calico进行比照。
从表中可以看出,macvlan目前问题较多,可能是由于这个方案比较小众,很多bug或者增强的PullRequest较少,因此我们在做选型时就选择基于OVS的方案。在选择了OVS方案之后,为了支持上述的多种网络需求,我们基于OVS进行了深度自研增强,并将此CNI网络插件命名为BeyondFabric。
BeyondFabric
BeyondFabric是博云基于OVS深度自研的完全满足CNI标准的kubernetes容器网络插件,利用etcd作为其数据存储单元,内置完善的IPAM能力,能够很好的满足第一章节中提到的客户的核心诉求。
1. BeyondFabric示意图
从fabric的概念图中可以一目了然的看清楚云平台的网络拓扑,不论是网络管理人员还是业务人员都可以简单清晰的了解到网络的拓扑情况。而且在这种简化的部署模型中(同时也是使用度最广的模型)不包括控制器等复杂逻辑,提供了简单、高效、稳定的网络环境。
除了网络模型之外,图中出现的分区概念,也是博云容器云平台结合多个客户的实际使用场景,在大量生产实践中总结演化出的概念,主要面对企业多种网络业务分区以及特定业务独占Node资源的需求,后续会专门撰文介绍。分区结合网络模型,更好的体现出了客户数据中心的网络隔离的现状,是对容器云平台实际落地的又一个重要支撑。
2. BeyondFabric主要功能列表
同时支持VLAN(Underlay)和VXLAN(Overlay)模式
支持内外网互通
支持Pod固定IP地址
支持管理网络和业务网络分离
支持IPV6
高性能:网络性能接近物理网络
支持Kubernetes NetworkPolicy对象,可实现灵活的网络隔离机制
可以对网络进行可视化管理
支持网络双向限速
支持DPDK(即将发布)
3. BeyondFabric成熟度
- 大量落地案例
博云容器云平台基于BeyondFabric已经有大量的落地案例,BeondFabric在可管理性、稳定性、性能等多个方面运行良好。
- 通过kubernetes社区CNI测试套件测试
BeyondFabric完全满足CNI协议规范,我们的测试团队结合社区提供的工具和kubernetes job等网络测试套件对BeyondFabric进行了长时间的严格测试,测试结果证明BeyondFabric具备生产可用能力。
- 多种平台支持
私有云建设中,容器云平台一般运行在物理环境或vmware/openstack等虚拟化环境中。BeyondFabric对于这几种部署环境均能完善支持。对于网络环境复杂不易变更的场景下,BeyondFabric基于vxlan可以显著减少环境依赖。
4. BeyondFabric性能
BeyondFabric采用了稳定可靠的OVS作为其基本单元,所以从原理上讲其性能损耗应该是非常小的,我们在物理环境中基于万兆网络的性能测试也验证了这一点。
图中绿色的线表示物理节点间的带宽,可以作为本次测试的基线。蓝色和红色分别表示POD-POD和POD-NODE之间的带宽测试,可以看到与基线对比,其性能损失在3%以下。
5. 运维管理工具:fabric-admin
考虑到软硬件层面的异常情况,例如kubelet或beyondFabirc的bug,环境(硬件损坏)等均可能对系统的正常运行造成不同程度的影响,所以博云提供了一个fabric-admin的工具,位于/opt/cni/bin目录下,其作用类似于文件系统的FSCK能力,为BeyondFabric的运行时管理提供了有力保障。同时其命令行格式完全匹配kubectl,对熟悉kubernetes的用户非常友好。
例如可以查看pod的IP占用情况(示例输出已被截断):
同时,fabric-admin还提供了多种运行时管理能力支持,运行--help后可以提示:
如同FSCK是文件系统成熟的重要标志,fabric-admin是BeyondFabric项目成熟的有力保障!
总结
当下,网络是容器云平台落地的主要难点之一,BeyondFabric是博云为应对这一业界痛点提出的解决方案,它解决了企业类客户,特别是金融类对监管需求旺盛的客户在网络方面的很多痛点。同时BeyondFabric还在持续增强中,为企业落地容器云平台时网络方面的诉求提供更多的支持。
容器网络插件那么多,博云为什么基于OVS深度自研?的更多相关文章
- 干货 | 博云基于OVS自研容器网络插件在金融企业的落地实践
本文根据博云在dockerone社区微信群分享内容整理 过去几年博云在企业中落地容器云平台遇到了很多痛点,其中一个比较典型的痛点来自网络方面,今天很高兴跟大家聊聊这个话题并介绍下我们基于OVS自研的C ...
- kubernetes 配置网络插件 flannel
概述 在学习docker时知道docker有四种常用的网络模型 bridge:桥接式网络 joined:联盟式网络,共享使用另外一个容器的网络名称空间 opened:容器直接共享使用宿主机的网络名称空 ...
- Kubernetes 学习18配置网络插件flannel
一.概述 1.我们在学习docker时知道docker有四种常用的网络模型 a.bridge:桥接式网络 b.joined:联盟式网络,共享使用另外一个容器的网络名称空间 b.opened:容器直接共 ...
- 灵雀云开源网络插件Kube-OVN 1.4.0 版发布!支持跨集群容器网络、NetworkPolicy 日志
从 1.4 开始 Kube-OVN 支持将多个 Kubernetes 集群容器网络打通,不同集群之间的 Pod 可以通过 Pod IP 直接互相通信.本版本还支持 ACL 日志,可以记录因 Netwo ...
- 腾讯云容器服务 TKE 推出新一代零损耗容器网络
随着容器技术的发展成熟,越来越多的组件迁移到容器,在技术迁移过程中,数据库,游戏,AI 这些组件对容器网络性能(时延,吞吐,稳定性)提出了更高的要求.为了得到更优的时延和吞吐表现,各大云厂商都在致力于 ...
- 腾讯云TKE-基于 Cilium 统一混合云容器网络(下)
前言 在 腾讯云TKE - 基于 Cilium 统一混合云容器网络(上) 中,我们介绍 TKE 混合云的跨平面网络互通方案和 TKE 混合云 Overlay 网络方案.公有云 TKE 集群添加第三方 ...
- 灵雀云Kube-OVN进入CNCF沙箱,成为CNCF首个容器网络项目
昨日,云原生计算基金会 (CNCF) 宣布由灵雀云开源的容器网络项目Kube-OVN 正式进入 CNCF 沙箱(Sandbox)托管.这是全球范围内首个被CNCF纳入托管的开源CNI网络项目,也是国内 ...
- 【Networking】容器网络大观 && SDN 资料汇总
SDNLAB技术分享(十五):容器网络大观 SDNLAB君• 16-06-17 •2957 人围观 编者按:本文系SDNLAB技术分享系列,本次分享来自SDN撕X群(群主:大猫猫)群直播,我们希望 ...
- Docker: docker network 容器网络
容器网络命令 : docker network --help 常用的是 docker network create/ls/rm/inspect 容器网络类型,一共有以下5种 bridge–net=br ...
随机推荐
- laravel集成workerman,使用异步mysql,redis组件时,报错EventBaseConfig::FEATURE_FDS not supported on Windows
由于laravel项目中集成了workerman,因业务需要,需要使用异步的mysql和redis组件. composer require react/mysql composer require c ...
- win10下mysql5.7的安装与配置
Win10下MySql5.7的安装与配置 下载 官网下载地址 选择免安装版即可, 解压 将下载的压缩包解压到你想要放置MySQL的目录,避免中文空格. 示例:D:\devtools\mysql-5.7 ...
- PAT 1002 A+B for Polynomials(map模拟)
This time, you are supposed to find A+B where A and B are two polynomials(多项式). Input Each input fil ...
- 如何在Mac上配置iTerm2以及给ITerm2配置lrzsz
Mac安装ITerm2: https://www.jianshu.com/p/9c3439cc3bdb 给ITerm2配置lrzsz: https://www.cnblogs.com/sunshine ...
- linux 安装 nvm, node.js, npm
vscode在wsl中开发node应用,如何安装nvm? git clone git@github.com:nvm-sh/nvm.git ~/.nvm 设置淘宝registry npm config ...
- Spring MVC HTTP406 Not Acceptable
今天在搞前后端分离用springmvc传递json数据的时候,第一步就卡主了,本着完事开头难的做法(哈哈哈), 报了个406?什么鬼? 百度之后发现很多人也同我一样遇到过这个问题,记录下. 找到的处理 ...
- vue-父子组件和ref
父组件向子组件传值 <div id="app"> <!-- 父组件,可以在引用子组件的时候, 通过 属性绑定(v-bind:) 的形式, 把 需要传递给 子组件的 ...
- Python【day 14-4】sorted filter map+递归文件夹+二分法查找
def func(x): #普通函数 return x*x ret1 = func(10) #匿名函数 f = lambda x:x*x # 匿名函数写法: 匿名函数名=lambda 参数:返回值 ' ...
- Java之线程与进程
一.线程与进程 线程:一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务.多线程是多任务的一种特别形式,但多线程使用了更小的资源开销. 进程:一个进程包括 ...
- Vue--过滤器、指令、插件
常用下载js的网址: https://www.bootcdn.cn/ https://www.jsdelivr.com/ 一.过滤器 vue 允许自定义过滤器,用于格式化一些常见文本(如日期等). 1 ...