Foudation | 硬件 | 容器/虚拟化与虚拟化虚拟化管理 | 跨容器和资源调度的管理和应用 | ||
---|---|---|---|---|---|
容器 | 虚拟化 | 虚拟化管理 | |||
Linux 基金会 | √ | Open Container Initiative (OCI) with Docker | KVM, Xen | × | Container Native Computing Foundation (CNCF) with Kubernetes |
OpenStack 基金会 | √ | ||||
Apache 基金会 |
基于上面这张大地图[1],我们将我们在这一个系列中要讲述的网络自底向上分为三个部分:基础设施 (Infrastructure),管理和控制 (Management & Control) 和 上层服务 (Service),以下我们就分成这三点,对整个Linux开源网络的生态作大致介绍。
对于传统的交换机,供应商提供的软件和硬件是绑定的,也就是说交换机用户 (即各个云服务提供企业) 无法为自己购置的交换机选择操作系统,造成了很大的限制。因此在多方面的推动下,网络硬件的设计逐渐朝着 模块化 和 开放标准化 的方向逐渐发展。具有代表性的有:Facebook推动的致力于打破 IT infrastructure black box 的 Open Compute Project (OCP)[2],其在2013年成立了针对网络的工作组,联合硬件厂商聚焦 TOR 的开放硬件标准,Facebook在2016年又成立了 Telecom Infra Project (TIP)[3],研究构建部署电信网络基础设施的方法。
DPDK[4] 是一个由 Linux基金会管理的开源项目,DPDK 技术通过绕过内核的方式,提供了高性能的数据包处理流程。可以很容易看出,与传统 Linux 协议栈所关注的通用性不同,DPDK 的关注点在于数据包高性能处理。
OVS[5] 也是一个由 Linux基金会管理的开源项目,其为构建交换机虚拟网络提供了基于 SDN 的工业级的虚拟交换机,其支持 OpenFlow 协议和 OVSDB 协议。最初版本的 OVS 把数据通路放在了 Linux 内核中实现,因此其性能也就受限于 Linux内核协议栈的性能。OVS-DPDK 使用了 DPDK 对 OVS 进行优化,它是用户态的 vSwitch,数据包在用户态进行处理,提高了虚拟交换的性能。
FD.IO[6] 也是一个由 Linux基金会管理的开源项目,在通用的硬件平台上提供了灵活的,组件化的和可扩展的高性能 I/O 服务框架,具体细节待理解了具体工作流程再进行补充。
Linux操作系统中,网络分为:协议栈 和 驱动程序 两个层次,前者主要实现 TCP/IP 协议的逻辑,后者主要负责连接网络协议栈和网络硬件设备。再进行细分,又可以分为一下几个部分:
(1) 网络驱动程序
(2) Linux 网络接口:逻辑上的网络设备,必须与真实网卡绑定才能够实现实际的对外的数据的收发。
(3) Linux Bridge (网桥):工作于二层的虚拟网络设备,Linux 网络接口可以绑定到网桥上面。
(4) Linux TCP/IP协议栈:处理IP, ICMP, ARP, TCP/UDP/SCTP等协议。
(5) Linux Socket 函数库:暴露给用户空间程序的函数库,封装了系统调用以使用内核的网络功能。
(6) Linux 应用层协议:处理更高层的协议,比如 DNS, HTTP, SSH, Telnet等。
SDN的出现,网络的控制平面从网络设备中被解耦出来,放到了控制器 (SDNC, SDN Control) 中,以统一控制、管理网络中设备。类比计算机操作系统的概念,我们也在这抽象出了网络操作系统的概念。在这一小节,我们关注一下业界在网络控制的相关工作。
ODL[7] 是 Linux 基金会和 Cisco、Juniper 和 Broadcom 等公司一起创立的开源项目,致力于推出一个通用的 SDN 控制平台。其支持 OpenFlow、Netconf 和 OVSDB 等多种南向接口、支持分布式集群 以及 支持动态地组合不同的功能模块。
ONOS[8] 是 Open Networking 基金会和 AT&T、爱立信、华为和因特尔等一起推出的同样是SDN控制器平台,被包装成了一个 “开放的网络操作系统”,其目的是为了对抗 ODL。ONOS 的目标在于为服务提供商级别的客户提供即 高性能 又 可编程 的运营商网络。
Tungsten Fabric [9] 是 Juniper 的开源 SDN 控制器 OpenContrail 向 Linux 基金会迁移并更名得来的。
Open Stack[10] 是 OpenStack 基金会下的开源云平台项目,目的是为 IaaS (基础设施即服务) 提供一套解决方案,其管理的对象是 VM。OpenStack 是由很多的组件 (component) 组成的[11],有些组件是部署云必须的,有些是可选的。这些组件都向上提供 API 来 enable 对底层资源的使用。
Neutron[12] 是 OpenStack 中与网络有关的组件,部署后,用户可以通过调用 API 的方式,自定义云上虚拟机间的网络连接,构建二层隔离网段,为虚拟机进行网络编址等,以上说的这些都是 Neutron 的原生插件,即 Core Plugin,除此之外 Neutron 还支持其他功能,如 L3 Router, Firewall, Loadbalancer, VPN等,这些则属于 Service Plugin,这些插件则需要厂家自行扩展。
将云上的应用以虚拟机的形式部署时,会出现以下问题:
(1) 每一个虚拟机都会产生自身运行的操作系统的开销,因此资源的有效利用率会较低
(2) 开发 和 运维 的环境都很复杂,势必会存在差异,这种差异导致了在部署上线应用时,需要处理环境差异导致的问题。
容器技术的出现解决了上述的两个问题,容器允许开发者把开发环境和应用打包带走,并且可以在任意的环境下运行。所以我们除了有对 虚拟机 进行管理的 OpenStack,业界里还有对 容器 进行管理的开源项目 Kubernetes (aka k8s)[13],这是一个由谷歌开创,后来挂在 Linux 基金会下的开源项目。
我们都有网络功能虚拟化的概念,那么我们对于如何部署、编排虚拟网络功能也需要有一个系统予以实现。因此在 NFV 体系中,我们有 NFV MANO (NFV Manegement and Orchestration) 系统的概念,在开源生态中,我们可以看见 Open Source MANO 项目[14]。
例子:Linux基金会下的 PNDA[15]