在传统的IT架构中,操作系统扮演着管理计算机硬件与软件资源的重要角色;而随着IT架构进入云计算时代,其所需要的也是对应的“云操作系统&Rdquo;。以虚拟化及容器为代表的云基础软件负责对数据中心存算资源进行高效的调配管理,并合理分配给上层应用,实现“软件定义数据中心&Rdquo;,成为云计算时代重要的基础设施。
在全球云基础软件的发展历程中,诞生了VMWaRe、RedHat等一众云基础软件巨头,也孕育出了OpenStack、KubeRnetes等行业标准级别的全球开源项目。而随着中国政企上云趋势的推进,我们认为云端国产化将快速进展,云基础软件在中国将迎来新时代的新机遇。
从服务器虚拟化到容器虚拟化,云基础软件持续演进。虚拟化与容器是两个典型的云基础软件,虚拟化是利用软件重新定义划分底层硬件资源的技术,面向资源层,优化资源供给模式;容器是操作系统层级的虚拟化,面向应用层,变革应用及业务架构,而当前的技术趋势仍是虚拟化与容器技术的结合发展。OpenStack与VMWaRe是服务器虚拟化时代的两大“云操作系统&Rdquo;,而KubeRnetes则随着容器应用的兴起逐渐开始扮演更为重要的角色,我们认为其将是云原生时代的“操作系统&Rdquo;有力的竞争者。
软件信息技术国产化正在加速进入云时代。随着软件上云成为大的趋势,政企机关、金融机构和各行业企业也在主动提出“云端国产化&Rdquo;的诉求,希望以国产化和云化并行的方式进行新一轮的数字化升级。在云端国产化的推动下,国内云基础软件厂商的空间进一步打开,从互联网行业进一步拓展到了政府、金融等传统领域。结合现有的落地案例,我们总结出“云端国产化&Rdquo;在“单机国产化&Rdquo;的基础上新增的5大重要方向:私有/混合云、虚拟化软件、容器管理软件、桌面云、云管平台。
云基础软件&Mdash;&Mdash;软件定义数据中心
何为软件定义数据中心?软件定义数据中心即是在底层硬件架构之上新搭载了一层虚拟的基础设施,目标是将数据中心所有的物理硬件资源进行虚拟化与软件化,将底层硬件与上层硬件完全解耦,一劳永逸地解决资源性能弹性与架构可伸缩性的问题,其内涵包括软件定义计算(计算虚拟化)、软件定义存储(存储虚拟化)、软件定义网络(网络虚拟化)三大层级。
云基础软件是云时代的“操作系统&Rdquo;,实现软件定义数据中心。在传统的IT架构中,操作系统扮演者管理计算机硬件与软件资源的角色;而随着IT架构进入云计算时代,其所需要的也是对应的“操作系统&Rdquo;,通过对计算、存储、网络的虚拟化,对数据中心存算资源进行高效的调配管理,并合理分配给上层应用,实现资源利用效率的最大化。为了实现软件定义数据中心,以虚拟化与容器技术为代表的云基础软件应运而生,成为云计算时代重要的基础设施。
虚拟化:面向底层基础设施,实现计算资源的弹性分配
虚拟化是利用软件重新定义划分底层硬件资源的技术。虚拟化技术主要应用在服务器层面,由于x86服务器的设计存在局限性,单次仅能运行一个操作系统和应用,因此对底层硬件资源的利用率较低。虚拟化技术实际上将一台基础物理服务器的CPU、内存、硬件、网卡等资源“池化&Rdquo;,并分配给多台虚拟机(VM),虚拟机之间彼此独立但又共享底层物理资源,实现基于单一物理设备运行多个OS及应用。
虚拟化技术是云计算的基础。我们一般所说的“云化&Rdquo;,就是将硬件资源虚拟化,并将虚拟资源集中成中央资源池,最后增加支撑系统后实现资源的调度与共享的过程。在中央资源池之上增加一层管理软件之后,用户就可以管控在云中需要使用的基础架构、平台工具及应用。而虚拟化技术在其中的作用就是将硬件资源“池化&Rdquo;,以便于用户灵活弹性地按需进行计算资源调用。
典型的虚拟化的底层技术&Mdash;&Mdash;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是操作系统内核的执行状态&Mdash;&Mdash;内核态(KeRnel Mode),Ring 3为用户态(useR Mode),而不同虚拟化技术之间的核心区别就是Guest OS运行在宿主机CPU的何种执行状态之上。
全虚拟化 vs. 半虚拟化:两者之间的核心区别在于是否要对Guest OS的内核进行修改。全虚拟化无需对Guest OS的内核进行特殊配置,部署灵活便利且具有较好的兼容性好,但缺点在于Guest OS无法直接管理底层硬件,通过hypeRvisoR管理底层硬件需要有转换开销,性能落后于半虚拟化。半虚拟化过事先经过修改的客户机操作系统内核共享宿主底层硬件来实现的,优点在于性能但同时也损失了部署的灵活性和兼容性。
硬件辅助的虚拟化:通过硬件技术的辅助使得虚机性能接近物理机。在硬件辅助的虚拟化中,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根文件管理系统,主要负责为容器进程提供隔离后执行环境的文件系统,也就是所谓的“容器镜像&Rdquo;。
容器引擎负责准备运行容器所需要的资源,对容器生命周期进行管理。容器负责与内核NaMespace和CGRoup等功能直接交互,并提供相应API使得外部能够与之进行集成。容器引擎的功能是对容器生命周期进行管理,包括镜像管理(image seRvice)、运行管理(RuntiMe seRvice)、容器网络(CNI)等;而上层的容器编排管理系统(如知名的KubeRnetes项目“k8s&Rdquo;)则会通过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/ContAIn