在傳統的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?;乜礆v史,我們認為在虛擬化時代,VMWare和OpenStack實際上扮演的就是“云操作系統”的角色;而在未來的云原生時代,Kubernetes有望成為新一代的“云操作系統”。

VMWare與OpenStack是服務器虛擬化時代主要的兩大“云操作系統”。VMWare在產品成熟度和穩定上領先,目前在企業級市場依舊占據主導地位,是數據中心虛擬化領域的“王者”;但其封閉的軟件系統架構也決定了其并不具有開放,軟件的發展路線是完全遵循VMware自身的發展目標。OpenStack作為開源的系統,其天生的優勢在于其多遠化的發展路線以及廣闊的發展潛力,背靠眾多云計算產業巨頭的支持,其在功能完整、穩定、易用年來也在快速提升,其作為開源項目的中立也使其成為AWS、阿里云等眾多公有云廠商的首選。

Kubernetes是容器虛擬化時代新的“云操作系統”。隨著應用進程容器化部署的普及,負責容器調度、編排、監控的Kubernetes自然成為了容器應用時代重要的“云操作系統”。而從Kubernetes而OpenStack的關系上看,我們認為目前兩者之間仍是互補大于競爭。Kubernetes面向應用層,實現應用及業務架構的變革;OpenStack 面向資源層,實現資源供給模式的優化。短期來看,我們認為OpenStack仍將是構建云基礎設施的一個重要工具,與k8s在企業云及數據中心應用中互補共存。

云操作系統的未來展望:Kubernetes邁入云原生時代

Kubernetes是云原生時代的“操作系統”有力的競爭者。虛擬化技術是云計算的基礎,而容器應用也將是云原生時代的基石。在云原生時代,我們認為容器將是最為基本的進程單位,而負責容器調度、編排、監控的容器編排管理系統(k8s),實質上扮演就是服務器時代操作系統(Linux)的角色,向上調度編排應用進程,向下調配管理底層資源。未來如果Kubernetes能夠進一步發展成熟,解決其現有在多租戶設計方面存在的一些問題,我們認為其將可能進一步發展成為云原生時代唯一的“操作系統”。