左手自研,右手開源,技術揭祕華為雲如何領跑容器市場

語言: CN / TW / HK
摘要:雲原生浪潮下,容器技術是串聯起整個雲原生世界的關鍵一環。

本文分享自華為雲社區《左手自研,右手開源,技術揭祕華為雲如何領跑容器市場》,作者:華為雲社區精選。


近日,IDC 發佈的《PRC SDC Market Overview and Analysis, 2020H2/2020》報告顯示,華為雲以24.3%的市場份額,斬獲中國容器軟件市場第一

下面,我們從技術角度分析,華為云為什麼能領跑容器軟件市場。

容器如何成為寵兒?

容器是什麼?

從字面上看,這是一個用於盛放某種東西的器具,實際也是如此,容器技術可以將軟件的程序代碼和依賴項打包起來,讓其與實際運行的環境隔離,哪裏需要搬哪裏,比如在數據中心、個人電腦上部署運行。

這個概念有點像老大哥虛擬機,但是兩者的相似點僅僅在於:提供獨立的環境運行軟件。在基因、容器和上帝 中,作者從哲學化的視角談了程序員創造的虛擬世界,也點出了兩者的異曲同工之妙:Docker容器技術和VM虛擬機從技術原理上看,是完全不同的路線,連實現思路都不一樣。但是,它們所達成的效果或者説是目標確是驚人的一致:即模擬一台看着像物理機一樣的東西。

雖然如此,但兩者內在邏輯差別很大。容器可以在操作系統級別進行虛擬化,一個操作系統內核上可以運行多個容器,而虛擬機只是硬件層面的虛擬化。相比較VM,容器更輕巧、啟動速度更快、佔用的內存微乎其微,容器與Docker詳細對比了虛擬機和容器的優缺點。

隨着用户對雲端應用開發、部署和運維的效率愈加重視,間接促成了容器的盛行。 不過,容器在雲服務領域“發光發熱“離不開一個關鍵技術:Docker。

Docker是目前應用最多的容器引擎技術,它的logo是一隻藍色的鯨魚馱着一堆小方塊。開發者通過docker可以為任何應用創建容器:應用的流程、庫和依賴,甚至整個操作系統的文件系統能被打包成一個簡單的可移植的包,這個包就像是鯨魚背上藍色的小方塊,它可以在任何運行Docker的機器上使用,從根本上解決了開發運行環境不一致的問題,讓容器真正實現了一次構建,隨處運行。

當應用程序被分解為多個小組件或服務,每個組件或服務都放置在一個容器中,每個容器可能還運行在不同的計算機中,此時就需要對容器進行有序的編排和管理。就像電腦上的操作系統,它可以管理所有應用程序,並規劃哪個應用程序何時使用電腦的CPU和其他硬件資源。

脱胎於Google內部集羣管理系統Borg的kubernetes逐漸成為業界標準,它可以通過API的方式將多個不同的計算機作為一個資源池進行管理,類似某種集羣操作系統,管理整個集羣中的容器化應用程序。 Docker與Kubernetes的興起這篇文章就具體談到了kubernetes(k8s)如何從三足鼎立的局面中PK掉其他兩個對手,在混戰中取得勝利。

至此,屬於容器的黃金時代大幕正式拉開。

Gartner預測,到2023年,70%的組織將在生產中運行三個或更多容器化應用程序。容器、Kubernetes和微服務應用模式是企業IT創新和數字化轉型的三大驅動力。

華為很早就投入了容器的懷抱中,由於一直使用虛擬機封裝應用程序,每次啟動虛擬機花費了大量的時間,這給管理及部署基於虛機應用程序的高成本和低效率帶來了挑戰。所以在2015年的時候,華為決定利用Kubernetes技術對自身IT系統進行容器化改造。華為在通過自身的容器化改造實踐受益的同時,又將遇到的實際問題不斷貢獻給社區,與社區成員一同推動Kubernetes的發展。

2018年4月,華為雲獲得了CNCF基金會的頂級席位——CNCF技術監督委員會席位,全球共9席,華為是亞洲首家進入者。

同時,隨着越來越多的企業業務選擇容器化,在集羣的規模、性能、實時監控與彈性擴縮容等方面都提出了新的要求,當開源社區方案難以解決這些問題的時候,就非常考驗各大雲服務供應商的技術能力。

萬丈高樓平地起,建設好雲原生基礎設施

為什麼説容器的崛起預示着雲原生時代到來?中,華為云云原生團隊認為,各類現代化的應用都將會運行在K8s之上,不僅僅是當前以互聯網App、WebService為代表的無狀態應用,還有新型的諸如大數據、AI、分佈式數據中間件等等有狀態應用,以及邊緣應用也將會普遍運行在K8s之上,K8s將完成對各類現有平台的歸一化,成為一個統一的應用運行的基礎平台。

華為雲最早於2018年洞察到了這一技術趨勢,在容器全棧產品中構建了Vessel雲原生技術平台,主要包括了以容器引擎iSula、容器網絡Yangtse、容器存儲Everest為代表的面向統一資源層的雲原生基礎設施組件。

下面,我們將逐一為大家揭開華為雲的容器技術面紗。

容器引擎iSula

基於docker和kubernetes,首先Docker並不是萬能藥,它在某些場景下也存在不足,比如:

  • 在資源敏感環境,或需要部署高密度容器節點時,容器對基礎設施的資源佔用會急劇升高;
  • 當大規模應用拉起或遇到突發流量時,併發速度可能成為瓶頸。

當主流的 Docker 等容器引擎在特定用例下力不從心時,一些針對某種用例進行過專門優化的容器引擎技術開始崛起。比如説,以 Kata Container 為代表的專門針對容器隔離性不夠嚴格而設計的安全容器技術;以 iSula 為代表的針對資源受限的邊緣計算和 IoT 環境設計的輕量級容器技術。

可以看出,iSula是與Docker相對的一種容器引擎,它一方面完全兼容現有容器生態,另一方面相比Docker內存佔用下降68%、啟動時間縮短35%。

比如相比Golang編寫的Docker,iSula使用C/C++實現,具有輕、靈、巧、快的特點,不受硬件規格和架構的限制,底噪開銷更小。在嚴苛的資源要求環境下,輕量模式下的 iSulad 本身佔用資源極低(< 15M) 。
img
2017 年,iSula 技術團隊成功將 Kata Containers 集成到 iSula 容器平台,並於 18 年初應用於華為雲容器服務,推出基於iSulad 容器引擎和 Kata Containers 的商用容器服務——華為雲容器實例 CCI(Cloud Container Instance),這也是業界首個 Serverless 架構的雲容器服務。

那麼,基於iSulad 容器引擎和 Kata Containers 如何打造安全、高性能的CCI?且看 基於 Kata Containers 與 iSulad 的雲容器實踐解析進一步分析,文中提到真正的 Serverless 容器服務中,集羣管理由雲服務提供商承擔,客户只需要關注每個應用的容器實例即可。在這種情況下,雲服務提供商需要考慮如何在統一管理面下保證每個用户的安全。

CCI 服務所屬的 Kubernetes 集羣直接部署在裸金屬服務器之上,底層是 Kata Containers,中間靠 iSula 容器平台連接。其中,依靠 Kata Containers 的強隔離特性,多個租户之間的容器運行環境強隔離,不同租户之間的容器不感知、不可見,做到在同一台裸金屬服務器上混合部署而安全無虞。

安全之外,在算力方面,CCI基於iSula提供的GPU直通功能,可以直接在容器中使用各種GPU進行AI計算。再加上CCI無需購買和管理彈性服務器,可直接在華為雲上運行容器和pod,也無需創建集羣,管理master和work節點,非常適用於批量計算,高性能計算,突發擴容,以及CI/CD測試。

在此,華為雲社區推薦一些有趣的案例,可以幫助大家快速上手CCI,比如雲容器實例CCI - 使用Tensorflow訓練神經網絡 雲容器實例CCI – 經典2048數字合成遊戲部署指南 ,通過這些簡單的實操和小遊戲,能夠對Serverless 架構的雲容器服務有更直觀的認識。

容器網絡Yangtse

大家應該都看過某些明星導致社交媒體平台宕機的新聞,明星事件帶來的突發流量觸發業務擴容,以前是擴容虛擬機,速度慢還情有可原,現在大部分互聯網平台都使用容器了,為什麼擴容速度還是跟不上流量增長的節奏呢?

首先,Kubernetes本身並不負責網絡通信,它提供了容器網絡接口CNI負責具體的網絡通信,開源的CNI插件非常多,像Flannel、Calico等。包括華為雲容器引擎CCE也專門為Kubernetes定製了CNI插件,使得Kubernetes可以使用華為雲VPC網絡。

儘管如此,多個容器集羣的網絡通信(容器連接到其他容器、主機和外部網絡的機制)始終是個複雜的問題。比如大規模節點管理場景下網絡性能的瓶頸;網口發放速度如何匹配容器擴容速度等等。最終,對對底層虛擬化網絡提出了密度更高規模更大發放更快,調整更頻繁的要求。

容器網絡Yangtse深度融合華為雲虛擬私有云(VPC)原生網絡能力,它採用的VPC-Native組網被稱作ENI(Elastic Network Interface)模式,容器直接掛載具有VPC子網地址的ENI,具備完全VPC網絡互通能力。容器實例可以在集羣VPC網絡和與之相連的其他VPC網絡中進行原生路由,並且直接使用VPC原生的網絡能力如 network policy、ELB、EIP、NAT等。換言之,就是容器地址屬於VPC子網,容器獨佔對應的ENI網口,解決了容器的互通性問題。

而且Yangtse基於華為雲擎天架構的軟硬協同能力,會把治理和轉發邏輯下沉到擎天卡上,實現容器網絡主機資源0佔用。數據顯示,通過硬件直通方式及動態網絡隊列,網絡整體性能提升40%,單容器PPS提升2倍;基於warm pool的能力,1-2秒內完成ENI的發放和網絡端到端打通。

至於具體如何實現,大體上可以總結為三點:

1、warm pool 機制可以解決網絡資源預熱的問題。如果不做預熱,容器網絡端到端打通時間在一分鐘以上,分鐘級容器啟動時間是不可接受的。 Warm pool機制在裸金屬節點上預掛載一定數量ENI(用户可根據服務部署併發量自定義配置),容器隨時調度到預熱節點上都有即時可用的ENI網卡。經過warm pool的優化,容器網絡端到端打通時間縮短為1s-2s。

2、得益於擎天架構的優勢,裸金屬容器還可以向虛擬機容器擴容,而在虛擬機容器上,容器網絡Yangtse使用了Trunkport技術,結合ENI的優勢,在保障性能的前提下,單台服務器理論上可為千容器同時提供直通網絡能力。

3、當應用業務流量增長觸發擴容時,如果ELB直接全量發放分攤的流量請求,海量請求會迅速壓垮(overload)新擴的容器,造成擴容失敗。 所以新擴容的後端實例需要“慢啟動”的過程,但一個節點部署多個容器時,節點的二次分發讓ELB無法感知到最終的後端容器,進而無法做到容器級別的流控,也難以保證穩態後的負載均衡。容器網絡Yangtse實現了與華為雲ELB v3獨享型負載均衡實例的直通。

具體技術詳解,可以閲讀華為雲第二代裸金屬容器技術系列:應對海量併發的網絡黑科技 

目前,Yangtse已經為華為雲CCE/CCI/IEF等容器服務提供了統一的容器網絡方案,覆蓋虛機、裸金屬、Serverless和邊緣節點等各種容器運行環境。

其中最值得注意的是CCE,它是一種託管的Kubernetes服務,可進一步簡化基於容器的應用程序部署和管理,深度整合華為雲的計算、存儲、網絡和安全等技術構建高可用Kubernetes集羣。

在CCE中,用户可以直接使用華為雲高性能的彈性雲服務器、裸金屬服務器、GPU加速雲服務器等多種異構基礎設施,也可以根據業務需要在雲容器引擎中快速創建CCE集羣、鯤鵬集羣、CCE Turbo集羣,並通過雲容器引擎對創建的集羣進行統一管理。

以今年在HDC重磅發佈的雲容器集羣CCE Turbo為例,它主要針對企業大規模業務生產中的高性能、低成本訴求,在計算、網絡和調度上全方位加速, 新一代容器解決方案:雲容器引擎CCE Turbo集羣就總結了它在這三個方面的新突破。

在計算加速方面,業界獨家實現容器100%卸載,服務器資源和性能雙零損耗。

在網絡加速方面,採用獨創的容器直通網絡,讓兩層網絡變成一層,端到端連通時間縮短一半,有效支撐業務秒級擴容千容器。

在調度加速方面,通過感知AI、大數據、WEB業務的不同特徵,以及應用模型、網絡拓撲等,實現業務混合部署、智能調度,還自動優化任務調度策略,實現1萬容器/秒的大規模併發調度能力。


再就是容器存儲Everest, 每個POD使用獨立VF,讀寫時延降低50%;將Posix組件卸載,單進程節省30M內存;NAS卷直掛POD容器內,提高請求處理效率30%。

“查漏補缺”Kuberentes,開源技術解決特殊場景難題

基礎設施之外,華為雲先後將Vessel的核心組件Volcano和KubeEdge開源,並貢獻給雲原生計算基金會CNCF,成為社區首個容器智能邊緣項目和容器批量計算項目。

Volcano——批量計算

當有更多的用户希望在Kubernetes上運行大數據、 AI和HPC應用,而它默認調度器又無法滿足包括公平調度、優先級、隊列等高級調度功能時,就需要一些新的技術解決方案登場了。

考慮到AI、大數據等業務的需求,華為雲在Kubernetes調度上做了一個感知上層業務的調度——Volavano,它是基於Kubernetes構建的一個通用批量計算系統,Volcano架構設計與原理解讀就Volcano產生的背景、架構設計與原理進行深度解讀,用數據證明了Volavano為分佈式訓練、大數據、HPC場景帶來了效率的提高。

Volcano火山:容器與批量計算的碰撞則從並行計算開始説起,詳細解釋了Volcano的調度框架、調度實現原理。作為調度系統,Volcano通過作業級的調度多種插件機制來支持多種作業,其中作業級的調度支持以多種類型的作業為目標進行設計,比如基於時間的、跨隊列的等等。Volcano的插件機制有效的支撐了針對不同場景算法的落地,從早期的gang-scheduling/co-scheduling,到後來各個級別的公平調度。
image.png
圖:總體架構

在華為雲今年剛推出的CCE Turbo容器集羣中,就採取了多項Volcano關鍵調度技術,如基於共享資源視圖的多調度器、決策複用、應用模型感知、數據位置親和調度、網絡拓撲調度等,從而實現1萬容器/秒的大規模併發調度能力。

KubeEdge——邊緣計算

容器天然的輕量化和可移植性,非常適合邊緣計算的場景。理想情況下,在邊緣部署複雜的應用,Kubernetes 是個很好的選擇,現實真相是要想在邊緣部署 Kubernetes集羣,各種問題層出。

比如很多設備邊緣的資源規格有限,特別是 CPU 處理能力較弱,因此無法部署完整的 Kubernetes;Kubernetes 依賴 list/watch 機制,不支持離線運行,而邊緣節點的離線又是常態,例如:設備休眠重啟;邊緣業務通常在私有網絡中,無公網IP,雲邊跨越公網導致延遲高。

為了解決這些問題,KubeEdge應運而生。KubeEdge即Kube+Edge,顧名思義就是依託K8S的容器編排和調度能力,實現雲邊協同、計算下沉、海量設備的平滑接入。

其架構主要包含三部分,分別是雲端、邊緣側和終端。雲端負責應用和配置的下發,邊緣側則負責運行邊緣應用和管理接入設備。 KubeEdge架構解讀:雲原生的邊緣計算平台從KubeEdge架構設計理念、KubeEdge代碼目錄概覽、KubeEdge集羣部署三方面帶大家認識KubeEdge。

關於KubeEdge和Volcano的更多技術硬實力體現和落地案例,可以閲讀專題【技術補給站】第5期:從架構和實踐,剖析KubeEdge+Volcano技術硬實力,在此不再贅述。

解決多雲容器集羣管理,新秀Karmada崛起

批量計算和邊緣計算的問題解決後,伴隨雲原生技術和市場的不斷成熟,很多企業都是多雲或者混合雲的部署,一方面可以避免被單供應商鎖定降低風險,另一方面也可以是出於成本的考量。

但是多集羣同時也帶來了巨大的複雜性,包括如何讓應用面向多集羣部署分發,並做到多集羣之間靈活切換。在今年的HDC上,華為雲宣佈了多雲容器編排項目Karmada正式開源,Karmada項目由華為、工商銀行、小紅書、中國一汽等8家企業聯合發起,它可以構建無極可擴展的容器資源池,讓開發者像使用單個K8s集羣一樣使用多雲集羣。

Karmada是一個 Kubernetes 管理系統,基於 Kubernetes Federation v1 和 v2 開發,它可以跨多個 Kubernetes 集羣和雲運行雲原生應用程序,直接使用 Kubernetes 原生 API 並提供高級調度功能,實現真正的開放式多雲 Kubernetes。

華為雲MCP多雲跨雲的容器治理與實踐為我們梳理了Karmada項目誕生的前因後果,以及整個項目的核心價值,比如對K8s原生API兼容 、豐富的多集羣調度支持、開箱即用等等。

Karmada的架構設計圖

從架構圖可以看到,整個控制面板可以分為四大塊:提供原生API入口,存放用户yaml和Karmada資源對象的Karmda API Server,和配套存儲ETCD;以及資源控制器Karmda Controller Manager、多集羣調度器 Karmda Sheduler。其中,最關鍵的就是API Server,讓用户既有的資源配置(yaml)可以藉助K8s原生API進行部署。

綜上,Karmada 旨在為多雲和混合雲場景下的多集羣應用程序管理提供 turnkey 自動化,其關鍵功能包括集中式多雲管理、高可用性、故障恢復和流量調度。

今年的HDC期間,在線教育平台VIPKID的後端研發高級專家分享了使用 Karmada實現從天到秒的跨雲遷移實踐。在剖析VIPKID的多場景雲原生落地實踐後,他對多集羣管理提出了一些思考,如下圖所示,理想的多集羣管理方式是:

  • 集中管理,但要原生;
  • 應用在不同集羣的差異化管理;
  • 集羣故障自動轉移。


對比了多家方案後,VIPKID選擇了開源的方案 Karmada。作者表示Karmada的整個設計結構就是按原生k8s開發標準開發的,唯一差別之處是需要管理多個集羣不同的 workload信息,所以改寫了調度器和控制器,在它們下面對接了多個集羣管理起來。這樣最大的好處是看起來在控制一個集羣,但最終的效果是在控制多個集羣。

具體案例情況參見Karmada | VIPKID在線教育平台從天到秒的跨雲遷移實踐,文章內有現場demo演示用Karmada實現多集羣管理。

另一個經典案例是工商銀行多k8s集羣管理及容災實踐。工商銀行的應用平台雲容器規模超20萬,業務容器佔到55,000個左右,整體的一些核心業務都已入容器雲內部,包括個人金融體系的賬户,快捷支付、線上渠道等。當越來越多的核心業務應用入雲之後,最大的挑戰是容災以及高可用。

但既有的運管平台並不能解決這些問題,比如沒有整體的跨集羣自動伸縮能力、集羣對上層用户不透明、沒有跨集羣的自動調度和遷移等等。對此,他們根據業務場景調研了一些多集羣管理平台,最終也選擇了社區支持的開源項目Karmada。

Karmada以類k8s的形式部署,對他們來説,改造成本是比較小的,只需在上面部署一個管理集羣即可。而且Karmada僅管理資源在集羣間的調度,子集羣內分配高度自治。在實踐中,Karmada的資源調度、容災、集羣管理和資源管理的優勢突出。

截止到現在,工行在測試環境中已經用Karmada對存量集羣進行一些納管,未來規劃的關鍵的點是如何和整體雲平台進行集成。

項目地址 https://github.com/karmada-io/karmada

總結

圍繞Docker和kubernetes,華為雲在技術層面做了諸多的優化和新的探索嘗試,除此之外,華為雲還有端到端的容器運維管理體系,涵蓋資源編排、容器應用持續交付、應用生命週期管理、鏡像安全掃描以及日常運維監控等。

雲原生浪潮下,容器技術是串聯起整個雲原生世界的關鍵一環,它的市場之爭,正是山雨欲來風滿樓,想要佔得高地,技術實力、開源生態、合作伙伴,缺一不可。

 

點擊關注,第一時間瞭解華為雲新鮮技術~