在传统的IT架构中,操作系统扮演着管理计算机硬件与软件资源的重要角色;而随着IT架构进入云计算时代,其所需要的也是对应的“云操作系统”。以虚拟化及容器为代表的云基础软件负责对数据中心存算资源进行高效的调配管理,并合理分配给上层应用,实现“软件定义数据中心”,成为云计算时代重要的基础设施。

在全球云基础软件的发展历程中,诞生了VMWare、RedHat等一众云基础软件巨头,也孕育出了OpenStack、Kubernetes等行业标准级别的全球开源项目。而随着中国政企上云趋势的推进,我们认为云端国产化将快速进展,云基础软件在中国将迎来新时代的新机遇。

从服务器虚拟化到容器虚拟化,云基础软件持续演进。虚拟化与容器是两个典型的云基础软件,虚拟化是利用软件重新定义划分底层硬件资源的技术,面向资源层,优化资源供给模式;容器是操作系统层级的虚拟化,面向应用层,变革应用及业务架构,而当前的技术趋势仍是虚拟化与容器技术的结合发展。OpenStack与VMWare是服务器虚拟化时代的两大“云操作系统”,而Kubernetes则随着容器应用的兴起逐渐开始扮演更为重要的角色,我们认为其将是云原生时代的“操作系统”有力的竞争者。

软件信息技术国产化正在加速进入云时代。随着软件上云成为大的趋势,政企机关、金融机构和各行业企业也在主动提出“云端国产化”的诉求,希望以国产化和云化并行的方式进行新一轮的数字化升级。在云端国产化的推动下,国内云基础软件厂商的空间进一步打开,从互联网行业进一步拓展到了政府、金融等传统领域。结合现有的落地案例,我们总结出“云端国产化”在“单机国产化”的基础上新增的5大重要方向:私有/混合云、虚拟化软件、容器管理软件、桌面云、云管台。

云基础软件——软件定义数据中心

何为软件定义数据中心?软件定义数据中心即是在底层硬件架构之上新搭载了一层虚拟的基础设施,目标是将数据中心所有的物理硬件资源进行虚拟化与软件化,将底层硬件与上层硬件完全解耦,一劳永逸地解决资源能弹与架构可伸缩的问题,其内涵包括软件定义计算(计算虚拟化)、软件定义存储(存储虚拟化)、软件定义网络(网络虚拟化)三大层级。

云基础软件是云时代的“操作系统”,实现软件定义数据中心。在传统的IT架构中,操作系统扮演者管理计算机硬件与软件资源的角色;而随着IT架构进入云计算时代,其所需要的也是对应的“操作系统”,通过对计算、存储、网络的虚拟化,对数据中心存算资源进行高效的调配管理,并合理分配给上层应用,实现资源利用效率的最大化。为了实现软件定义数据中心,以虚拟化与容器技术为代表的云基础软件应运而生,成为云计算时代重要的基础设施。

虚拟化:面向底层基础设施,实现计算资源的弹分配

虚拟化是利用软件重新定义划分底层硬件资源的技术。虚拟化技术主要应用在服务器层面,由于x86服务器的设计存在局限,单次仅能运行一个操作系统和应用,因此对底层硬件资源的利用率较低。虚拟化技术实际上将一台基础物理服务器的CPU、内存、硬件、网卡等资源“池化”,并分配给多台虚拟机(VM),虚拟机之间彼此独立但又共享底层物理资源,实现基于单一物理设备运行多个OS及应用。

虚拟化技术是云计算的基础。我们一般所说的“云化”,就是将硬件资源虚拟化,并将虚拟资源集中成中央资源池,最后增加支撑系统后实现资源的调度与共享的过程。在中央资源池之上增加一层管理软件之后,用户就可以管控在云中需要使用的基础架构、台工具及应用。而虚拟化技术在其中的作用就是将硬件资源“池化”,以便于用户灵活弹地按需进行计算资源调用。

典型的虚拟化的底层技术——KVM-QEMU

KVM-QEMU是典型的虚拟化底层技术。KVM是Linux内核中的一个模块,将Linux内核转变为可实现虚拟化的Hypervisor;QEMU是一套开源的模拟处理器,可以独立模拟出包括CPU、IO设备在内的整台计算机。由于KVM位于内核空间,用户无法直接控制内核,因此开发者选择了相对成熟的QEMU技术,借助用户空间的管理工具与其进行交互。

KVM和QEMU是相辅相成的关系。QEMU本身并不依赖于KVM,但仅靠QEMU自身的虚拟化效率较低。QEMU通过KVM达到了硬件虚拟化的速度,而KVM则通过QEMU来模拟设备,KVM+QEMU才能实现完整意义上的服务器虚拟化。在一个完整的Hypervisor中,KVM的功能是提供内核接口以实现对CPU、内存的虚拟支持虚拟机的运行;QEMU提供对IO设备虚拟、对各种虚拟设备的创建、调用进行管理。

虚拟化的多种技术路线

全虚拟化、半虚拟化是两种典型技术路线。虚拟化是使得多个客户操作系统(Guest OS)共享原始底层硬件资源的过程,其核心是如何解决Guest OS发出的特权指令执行和对宿主机硬件资源的调用问题。从X86服务器的架构来看,其CPU细分了Ring 0-3四种执行状态,其中Ring 0是操作系统内核的执行状态——内核态(Kernel Mode),Ring 3为用户态(User Mode),而不同虚拟化技术之间的核心区别就是Guest OS运行在宿主机CPU的何种执行状态之上。

全虚拟化 vs. 半虚拟化:两者之间的核心区别在于是否要对Guest OS的内核进行修改。全虚拟化无需对Guest OS的内核进行特殊配置,部署灵活便利且具有较好的兼容好,但缺点在于Guest OS无法直接管理底层硬件,通过hypervisor管理底层硬件需要有转换开销,能落后于半虚拟化。半虚拟化过事先经过修改的客户机操作系统内核共享宿主底层硬件来实现的,优点在于能但同时也损失了部署的灵活和兼容(无法支持Windows等闭源操作系统)。

硬件辅助的虚拟化:通过硬件技术的辅助使得虚机能接物理机。在硬件辅助的虚拟化中,CPU本身就为Hypervisor提供了便利,可以识别指令,从而避免异常,可以简化指令的处理过程而提升能。硬件辅助虚拟化拟化技术常用于优化全虚拟化和半虚拟化产品,目前主要的硬件辅助虚拟化技术有Intel的VT-x和AMD的AMD-V两种,同时市面上的主流全虚拟化和半虚拟化产品基本都支持硬件辅助虚拟化,包括KVM,VMware vSphere、Xen、Oracle VirtualBox等。

容器:面向应用与进程,操作系统层级的虚拟化

容器是操作系统虚拟化的一种实现途径,负责为应用程序的运行提供环境。容器的目的是为进程集合提供一个独立的运行环境,容器包含应用和其所有的依赖包(类/库),不同容器之间共享宿主机的硬件资源及操作系统。通过使用容器,开发者可以便利地打包应用程序的代码、配置和依赖关系,从而实现应用程序快速、可靠、一致部署。

容器的本质是一个视图被隔离,资源受限的进程。容器与虚拟机的相同之处在于都是帮助用户创造了隔离环境,但虚拟机与容器的隔离级别不同。虚拟机在操作系统层面实现隔离,而容器在进程级进行资源隔离;同时容器的大小相比虚拟机更小,这也赋予了其更为轻量、灵活的特征。

容器的底层技术:容器运行时、容器镜像、容器引擎

容器 = Cgroup(资源控制)+Namespace(访问隔离)+rootfs(文件系统隔离)+容器引擎(用户态工具)。Cgroups与Namespace是容器技术所应用到的两个Linux内核的关键特,Namespace的主要使用是实现进程的隔离,而Crgourps则负责限制分配给进程的硬件资源,由Namespace+Cgroups 构成的隔离环境也被称为"容器运行时";rootfs作为Linux根文件管理系统,主要负责为容器进程提供隔离后执行环境的文件系统,也就是所谓的“容器镜像”。

容器引擎负责准备运行容器所需要的资源,对容器生命周期进行管理。容器负责与内核Namespace和CGroup等功能直接交互,并提供相应API使得外部能够与之进行集成。容器引擎的功能是对容器生命周期进行管理,包括镜像管理(Image service)、运行管理(runtime service)、容器网络(CNI)等;而上层的容器编排管理系统(如知名的Kubernetes项目“k8s”)则会通过CRI接口对容器引擎进行调用。目前行业中较为活跃的容器引擎主要包括Docker、rkt、Pouch、Containerd和Cri-o等。

容器的上层建筑:容器编排管理系统

容器编排是从容器向容器云跨越的关键。在实际应用的过程中,通常会由大量容器构建成容器集群,以支撑复杂的应用程序体系结构,此时便需要相应的系统对容器集群进行统一的编排、管理、调度。以k8s为代表的容器编排管理系统在容器引擎的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷。从一个开发者和单一的容器镜像,到无数开发者和庞大的容器集群,容器技术实现了从"容器"到"容器云"的飞跃。

Kubernetes是容器编排领域的事实标准。Kubernetes(简称k8s)是由Google在2014年发起的开源项目,具有轻量级、高便携、可扩展、自修复等优势,在2015年开始迅速拉开与Meso、Docker Swarm等竞争对手之间的差距。目前k8s已经基本成为了容器编排领域的行业标准,AWS、Azure、Google、阿里云、腾讯云等公有云厂商均提供基于 k8s的容器服务;Red Hat、Rancher、IBM、Mirantis等厂商也在大力推广基于 Kubernetes 的容器产品,Docker/Containerd+k8s成为全球主流的容器产品路线。

Kubernetes是云原生时代新的“操作系统”。k8s集群由Master节点和Node节点构成:Master节点主要负责管理和控制,包括API Server(对外接口)、Scheduler(资管调度)、Controller Manager(管理控制器);Node节点主要是工作负载节点,包含Pod(基本操作单元,内部封装容器)、Docker(容器引擎)、Kubulet(负责Pod的监视)。在应用容器化部署的云原生时代,k8s可以实现对容器集群的自动化部署、自动扩缩容以及高效灵活的管理,我们认为其已经成为了新一代的云操作系统以及云原生时代的基石。

CNCF围绕Kubernetes建立起繁荣的云原生生态。2015年,Google与RedHat牵头成立了以 Kubernetes 项目为基础CNCF社区,之后数年中CNCF逐渐发展壮大,而Docker由于现实问题也逐步放弃开源社区,在2017年将Containerd捐赠给CNCF,并在Docker企业版中内置k8s,CNCF自此成为全球容器生态的核心。截至2020年,CNCF已经囊括了全球1,381个项目,按功能分为29个模块,分属与9中不同类别(应用定义与开发、编排与管理、运行时、配置、台、可观察与分析、Serverless、会员和其它),这1,381个项目共同构建起了恢宏的“云原生世界”。

虚拟机与容器:当前趋势仍是结合应用下的共同发展

容器和虚拟机相比各有优劣

► 容器的优势在于敏捷和高能:Hypervisor架构下,在虚拟服务器上运行单个应用程序意味着需要运行完整操作系统(Guest OS)及依赖环境,这为主机增加了大量的系统资源消耗。而容器相比之下占用空间更小,其在底层资源和上层应用之前具有更少的抽象层级,且多个应用程序可通过容器技术共享操作系统内核,进一步提高了资源利用率;同时容器在应用迁移、快速拓展以及持续集成和持续部署(CI/CD)实施等方面也更为灵活便捷。

► 虚拟机的优势在于更强的隔离和运维的简单:基于Hypervisor的虚拟机可以实现系统层面的资源隔离,虚拟机之间完全独立,安全高,可用于备份、容灾;而容器实际上仅实现了应用层面的隔离,安全和稳定相对较低。尤其是在多租户的环节下,由于不同容器共享主机的内核,如果某个容器应用需要配置内核参数,则会导致“牵一发而动全身”。此外,虚拟化技术经过多年应用,已经是企业运维人员较为熟悉的一种技术,同时双层架构也具备运维上更加简单的优势。

用户可根据自身的偏好来选择适合的云资源管理方案。在实际应用的过程中,注重于安全、稳定的用户往往仍会以Hypervisor作为主要的“云操作系统”以实现对底层计算资源的管理,比如金融、运营商等传统行业在大量使用传统的VMWare或者OpenStack(基于KVM);而对于那些追求云原生,要求更高的资源利用率,以及更加灵活便捷架构的客户,Docker/Containerd+k8s的容器方案是更优解,事实上目前容器在互联网行业已经得到了广泛的应用,传统行业的应用厂商也在积极的对新一代引用进行容器化改造,我们相信容器的普及和渗透只是时间问题。

容器与虚拟机的结合应用仍是当前主流

容器与虚拟机在公有云多租户场景中通常是结合应用的。从云计算的概念提出开始,虚拟机一直是云台的基础,台的本身服务以及用户的使用基本都是从通用虚拟机的创建开始。因此目前大部分的容器应用均是基于虚拟机而运行的,通常的做法是建一批虚拟机作为运行容器的节点,然后再在基于虚拟机Guest OS创建容器应用,如图表18左侧就是常见的公有云容器服务的提供形式。

安全容器进一步将虚拟机级别的隔离直接引入容器应用。在公有云多租户场景中,上述方案面临的问题是相同主机需要运行不同租户的应用,而容器的隔离级别依然采用了共内核的机制,导致了其存在着广泛的攻击面。而所谓的安全容器,则是通过硬件虚拟化等技术实现对各个容器内核层面的隔离,每一个容器都是基于一个独立的内核实例来,形成一个轻量级的虚拟机(Micro-VM)。

安全容器在容器的高效便捷与虚拟机的稳定安全之前取得衡。安全容器的定位位于容器和虚拟机之间(The speed of containers, the security of VMs):安全容器兼容容器的操作方法,在启动速度、内存开销等能指标上也高度接容器;同时安全容器通过引入虚拟机级别的隔离,显著提升了容器的隔离层级和安全。目前行业中常见的安全容器实现方式包括Kata-containers、Google gVisor、AWS Firecracker-containerd、IBM Nabla、VMware CRX等,其中Kata-containers是目前具有较佳兼容,得到了较为广泛的应用。

云基础软件的演变——历史变迁与未来趋势

云基础软件的市场现状:虚拟化进入成熟阶段,容器应用蓬勃发展

虚拟化技术渗透率已接饱和,市场规模趋于稳定。根据Statista数据,全球虚拟化市场规模将从2018年的57亿美元增长至2025年的90亿美元,2018-2025年CAGR为7%。Spicework的调查显示,2020年已有92%的企业使用服务器虚拟化技术,虚拟化技术在企业的运用已基本达到饱和,市场增长放缓。

容器应用快速普及,市场规模持续增长。根据Gartner预测,全球容器编排系统市场国模将从2020年的4.7亿美元的增长到2024年的9.4亿美元,2020-2024年CAGR可达20%。全球企业对容器技术的需求也在快速增长,Gartner预计2022年超过75%的全球企业将在运营中使用容器化应用程序,而2020年使用容器的企业占比不到30%;到 2024年,高达15%的企业应用程序将在容器环境中运行,这一比例在2020年小于5%。

全球云基础软件的主要玩家

虚拟化:全球虚拟化市场的主要参与者可以被划分为两派——开源和闭源。其中VMWare及微软是闭源虚拟化软件厂商中的代表,而剩下大部分的厂商的产品则是基于开源的KVM或者Xen技术,

► 闭源虚拟化的代表是VMWare的ESXi及微软的Hyper-V:ESXi是使用全虚拟化技术的Type I Hypervisor,是VMware虚拟化套件vSphere中的重要组件。由于VMware是首个基于x86服务器提供服务器虚拟化解决方案的公司,ESXi得到了广泛运用。Hyper-V是半虚拟化Hypervisor,可内嵌于Windows系统中,用户可选择免费发布版或付费企业版。

► 开源虚拟化的代表是KVM和Xen:KVM是内嵌于Linux内核中的开源虚拟化技术,可将Linux操作系统转为Type I Hypervisor。RedHat、Oracle等厂商是基于KVM虚拟化领域的领导者,同时AWS、阿里云、华为云等云厂商也主要是提供基于KVM的虚拟化服务。Xen是一种由剑桥大学研发的半虚拟化技术,2005年,经过Intel修改后的Xen 3.0变为全虚拟化,可支持Intel硬件辅助虚拟化。Citrix于2007年收购XenSource,但选择将服务器虚拟化产品XenServer继续开源。

VMWare仍是企业级应用的首选,KVM在云厂商中应用广泛。Spicework的调查显示,目前闭源的Hyper-V和vSphere仍然在企业级市场占据主导地位,VMWare在商用虚拟化软件市场的龙头地位依然稳固;但年来,随着OpenStack作为开源的云计算管理项目到行业越来越广泛的应用,KVM作为OpenStack主流的Hypervisor选择,其市场影响力正在快速提升,除了RedHat、Oracle等厂商之外,AWS、阿里云、华为云等云厂商目前主要也是提供基于KVM的虚拟化服务。

OpenStack是全球领先的开源云计算管理项目。OpenStack是由Rackspace和NASA成立的开源项目,目前已经是是仅次于Linux的全球第二大开源社区,OpenStack提供了一个部署云的操作台或工具集,覆盖了计算、存储等10个核心组件和众多附加组件。用户可以基于OpenStack对物理集群上的所有虚拟机进行管理,实现公有、私有云的搭建与运维,且OpenStack现已实现对容器的支持。

OpenStack本身并不具备虚拟化的能力,KVM是其主流的Hypervisor选择。作为云管理台,OpenStack本身不提供虚拟化功能,真正的虚拟化能力是由底层的Hypervisor提供,其支持包括开源的KVM、Xen,也包括厂商的Hyper-V等。但由于最初版本OpenStack的虚拟化技术即是基于KVM的,两者都使用相同的开放源理念与开发方法,因此KVM目前仍是OpenStack主流的Hypervisor选择。2020年的OpenStack用户调查显示94%的用户选择KVM作为Hypervisor。

OpenStack与KVM彼此成就,相互辉映。OpenStack目前已经发展成为全球最大的开源云计算管理项目之一,截至2020年其生态系统已囊扩了超过850家企业及机构,我们认为OpenStack与VMWare实际上的服务器虚拟化时代的两大主流“云操作系统”。而OpenStack的兴起也带动了KVM的快速发展,目前KVM已经成为全球开源虚拟化技术中的主流,2020年AWS、华为云宣布将物理服务器的Hypervisor从Xen转为KVM,我们认为未来KVM甚至会进一步挑战VMWare等厂商在企业级市场的地位。

容器:正如我们在上一章节中的讨论,目前Docker/Containerd+k8s已经成为了全球容器技术的事实标准,由于开源的容器引擎基本不进行商业化变现,因此我们对于容器市场的规模和市场份额讨论集中于容器编排管理软件市场层面,根据艾瑞咨询发布的数据显示,k8s占据了2019年全球Docker容器编排管理工具份额的77%,市场上大部分的容器编排软件均是基于k8s的商业发行版。

随着全球容器市场的快速发展,各厂商积极推动收购及合作。目前全球容器基础软件市场份额Top 5分别是Red Hat(于2019年被IBM收购),Mirantis(于2019年收购Docker),VMware,Rancher(于2020年被SUSE收购)和Canonical。其中Red Hat推出的OpenShift目前是全球应用最为广泛的企业级k8s版本。

传统虚拟化厂商也在积极拥抱容器技术。全球容器编排管理软件收入Top3的红帽、Mirantis和VMware,目前也推出了具有代表的虚拟化产品,如VMware的vSphere,Mirantis将原有的OpenStack台与K8S融合形成新的云台。全球领先的云厂商等也在积极推出容器产品:如华为云的虚拟化套件Fusion Sphere中包含了支持K8S的Fusion Container容器模块。云厂商们正致力于将容器技术与虚拟化技术结合以提供系统化的解决方案。

云操作系统的历史变迁:从服务器虚拟化到容器虚拟化

云基础软件的发展历程实际上是云操作系统的变迁。传统操作系统的定义是管理计算机硬件和软件资源的计算机程序。在计算资源虚拟化的云计算时代,担任这一角色的是管理虚拟化硬件资源的Hypervisor、OpenStack或是Kubernetes。回看历史,我们认为在虚拟化时代,VMWare和OpenStack实际上扮演的就是“云操作系统”的角色;而在未来的云原生时代,Kubernetes有望成为新一代的“云操作系统”。

VMWare与OpenStack是服务器虚拟化时代主要的两大“云操作系统”。VMWare在产品成熟度和稳定上领先,目前在企业级市场依旧占据主导地位,是数据中心虚拟化领域的“王者”;但其封闭的软件系统架构也决定了其并不具有开放,软件的发展路线是完全遵循VMware自身的发展目标。OpenStack作为开源的系统,其天生的优势在于其多远化的发展路线以及广阔的发展潜力,背靠众多云计算产业巨头的支持,其在功能完整、稳定、易用年来也在快速提升,其作为开源项目的中立也使其成为AWS、阿里云等众多公有云厂商的首选。

Kubernetes是容器虚拟化时代新的“云操作系统”。随着应用进程容器化部署的普及,负责容器调度、编排、监控的Kubernetes自然成为了容器应用时代重要的“云操作系统”。而从Kubernetes而OpenStack的关系上看,我们认为目前两者之间仍是互补大于竞争。Kubernetes面向应用层,实现应用及业务架构的变革;OpenStack 面向资源层,实现资源供给模式的优化。短期来看,我们认为OpenStack仍将是构建云基础设施的一个重要工具,与k8s在企业云及数据中心应用中互补共存。

云操作系统的未来展望:Kubernetes迈入云原生时代

Kubernetes是云原生时代的“操作系统”有力的竞争者。虚拟化技术是云计算的基础,而容器应用也将是云原生时代的基石。在云原生时代,我们认为容器将是最为基本的进程单位,而负责容器调度、编排、监控的容器编排管理系统(k8s),实质上扮演就是服务器时代操作系统(Linux)的角色,向上调度编排应用进程,向下调配管理底层资源。未来如果Kubernetes能够进一步发展成熟,解决其现有在多租户设计方面存在的一些问题,我们认为其将可能进一步发展成为云原生时代唯一的“操作系统”。