KubeEdge vs K3S:Kubernetes在边缘计算场景的探索
作者 | Edge Captain
近期兩個(gè)?Kubernetes?相關(guān)的軟件?KubeEdge?和?K3S?分別開(kāi)源,Kubernetes?開(kāi)始在邊緣計(jì)算場(chǎng)景探索應(yīng)用。
KubeEdge?是華為捐獻(xiàn)給?CNCF?的第一個(gè)開(kāi)源項(xiàng)目,也是全球首個(gè)基于?Kubernetes?擴(kuò)展的,提供云邊協(xié)同能力的開(kāi)放式邊緣計(jì)算平臺(tái)。KubeEdge?的名字來(lái)源于?Kube?+?Edge,顧名思義就是依托?Kubernetes?的容器編排和調(diào)度能力,實(shí)現(xiàn)云邊協(xié)同、計(jì)算下沉、海量設(shè)備接入等。
K3S?是?Rancher?開(kāi)源的一個(gè)自己裁剪的?Kubernetes?發(fā)行版,K3S?名字來(lái)源于?K8s?–?5,這里的“5”指的是?K3S?比?Kubernetes?更輕量使得它能更好地適配?CI,ARM,邊緣技術(shù),物聯(lián)網(wǎng)和測(cè)試這?5?個(gè)場(chǎng)景。
同樣是基于?Kubernetes,同樣是致力于解決邊緣場(chǎng)景問(wèn)題的開(kāi)源軟件,這兩個(gè)項(xiàng)目不免經(jīng)常被人拿來(lái)比較。本文將以邊緣計(jì)算的實(shí)際場(chǎng)景和挑戰(zhàn)為出發(fā)點(diǎn),為您剖析?Kubernetes?能夠在邊緣計(jì)算領(lǐng)域的發(fā)力點(diǎn),最后全方位對(duì)比?KubeEdge?和?K3S。
邊緣計(jì)算場(chǎng)景分類(lèi)與挑戰(zhàn)
這里要討論的“邊緣”特指計(jì)算資源在地理分布上更加靠近設(shè)備,而遠(yuǎn)離云數(shù)據(jù)中心的資源節(jié)點(diǎn)。典型的邊緣計(jì)算分為物聯(lián)網(wǎng)(例如:下一代工業(yè)自動(dòng)化,智慧城市,智能家居,大型商超等)和非物聯(lián)網(wǎng)(例如:游戲,CDN?等)場(chǎng)景。
在現(xiàn)實(shí)世界中,邊緣計(jì)算無(wú)法單獨(dú)存在,它必定要和遠(yuǎn)程數(shù)據(jù)中心?/?云打通(具體原因見(jiàn)下文)。以?IoT(Internet?of?Things,物聯(lián)網(wǎng))為例,邊緣設(shè)備除了擁有傳感器收集周邊環(huán)境的數(shù)據(jù)外,還會(huì)從云端接收控制指令。邊緣設(shè)備與云連接一般有兩種模式:直連和通過(guò)中繼邊緣節(jié)點(diǎn)連接,如下圖所示:
邊緣設(shè)備能否直連云端?/?數(shù)據(jù)中心取決于是否有全球唯一可路由的?IP,例如:手機(jī)、平板電腦等。不過(guò),大部分的設(shè)備通過(guò)近場(chǎng)通信協(xié)議與邊緣節(jié)點(diǎn)通信,進(jìn)而和云端?/?數(shù)據(jù)中心連接的。邊緣節(jié)點(diǎn)是設(shè)備的匯聚點(diǎn),有分配?IP?地址,扮演了邊緣網(wǎng)關(guān)的作用。邊緣節(jié)點(diǎn)為普通的設(shè)備提供?IP?地址,也可以運(yùn)行容器。
我們注意到,邊緣節(jié)點(diǎn)也是有不同層級(jí)的,而劃分的標(biāo)準(zhǔn)之一就是資源(計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)帶寬等)的大小。如上所示,我們將?edge?分為“Device?Edge”和“Infrastructure?Edge”。Device?Edge(設(shè)備邊緣)是指那些并不被認(rèn)為是?IT?基礎(chǔ)設(shè)施組成部分的邊緣節(jié)點(diǎn),例如:火車(chē)、油田、工廠(chǎng)和家庭等。通常它們沒(méi)什么計(jì)算能力,被用于解決最后“一公里”接入的問(wèn)題,一個(gè)典型的例子就是智能路由器,它一端通過(guò)紅外信號(hào)控制家中電器,另一端通過(guò)網(wǎng)絡(luò)和云數(shù)據(jù)中心相連。由于設(shè)備邊緣網(wǎng)絡(luò)穩(wěn)定性較差,因此必須要考慮它們會(huì)較長(zhǎng)時(shí)間離線(xiàn)的情況(例如火車(chē)過(guò)隧道)。
注:日常生活中很多設(shè)備我們可以看成是?device+device?edge?的結(jié)合體,例如智能手機(jī)。
Infrastructure?Edge(基礎(chǔ)設(shè)施邊緣)相對(duì)于?Device?Edge?計(jì)算和存儲(chǔ)能力都更強(qiáng),而且通常通過(guò)骨干網(wǎng)與數(shù)據(jù)中心連接,因此具有更大的網(wǎng)絡(luò)帶寬和更加可靠的網(wǎng)絡(luò)連接,例如:CDN,游戲服務(wù)器等?;A(chǔ)設(shè)施邊緣除了能運(yùn)行容器外,有些甚至還有足夠資源運(yùn)行完整的?Kubernetes。
對(duì)邊緣節(jié)點(diǎn)進(jìn)行分類(lèi)的意義在于,針對(duì)不同層級(jí)的邊緣需要有針對(duì)性的部署模型,并且平臺(tái)要為邊緣節(jié)點(diǎn)提供通信能力。
最后,我們總結(jié)一下當(dāng)前邊緣計(jì)算領(lǐng)域面臨的幾個(gè)挑戰(zhàn):
-
云邊協(xié)同:AI/?安全等業(yè)務(wù)在云和邊的智能協(xié)同、彈性遷移;
-
網(wǎng)絡(luò):邊緣網(wǎng)絡(luò)的可靠性和帶寬限制;
-
管理:邊緣節(jié)點(diǎn)的資源管理與邊緣應(yīng)用生命周期管理;
-
擴(kuò)展:高度分布和大規(guī)模的可擴(kuò)展性;
-
異構(gòu):邊緣異構(gòu)硬件和通信協(xié)議。
其中,云邊協(xié)是當(dāng)前面臨最大的技術(shù)挑戰(zhàn)!
為什么我們需要云邊協(xié)同
邊緣計(jì)算和云計(jì)算不是兩種互斥的技術(shù),它們是相輔相成的關(guān)系。而且從場(chǎng)景需求上看,IoT/Edge?與云數(shù)據(jù)中心有一些相似之處,例如:
-
邊緣也有管理節(jié)點(diǎn)的計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)等資源的需求;
-
邊緣應(yīng)用也想容器化和微服務(wù)化;
-
邊緣計(jì)算希望能有標(biāo)準(zhǔn)的?API?和工具鏈;
-
安全,數(shù)據(jù)?/?信道加密和認(rèn)證授權(quán)。
因此,將云數(shù)據(jù)中心的現(xiàn)有架構(gòu)和能力順勢(shì)延伸到邊緣就變得水到渠成了。下面列舉了一些需要云邊協(xié)同的場(chǎng)景:
-
AI?云上訓(xùn)練,邊緣執(zhí)行。即充分發(fā)揮云計(jì)算海量資源的優(yōu)勢(shì),將?AI?模型的訓(xùn)練放在云端,而?AI?的執(zhí)行則貼近設(shè)備側(cè);
-
微服務(wù),DevOps。微服務(wù)和?DevOps?不僅僅是云上開(kāi)發(fā)的專(zhuān)利,將它們引入邊緣將會(huì)顯著加速嵌入式設(shè)備、機(jī)器人等?IoT?軟件的迭代周期,提升部署和運(yùn)維效率;
-
數(shù)據(jù)備份轉(zhuǎn)儲(chǔ)。例如,海量的工業(yè)數(shù)據(jù)(加密后)存儲(chǔ)在云端;
-
遠(yuǎn)距離控制。云端遠(yuǎn)程下發(fā)對(duì)邊緣設(shè)備的控制信號(hào);
-
自動(dòng)擴(kuò)展。由于邊緣節(jié)點(diǎn)不如云具備良好的自動(dòng)擴(kuò)展能力,因此可以選擇在峰值時(shí)將邊緣的負(fù)載彈性擴(kuò)容到云上。
我們已經(jīng)積累了足夠的管理云上資源的經(jīng)驗(yàn),現(xiàn)在下一步的挑戰(zhàn)就是如何構(gòu)建一個(gè)邊緣云平臺(tái),把對(duì)云上資源的管理方法延伸到邊緣,讓我們能夠無(wú)縫地管理邊緣的資源和設(shè)備。邊緣云平臺(tái)將重點(diǎn)解決以下問(wèn)題:
-
大規(guī)模?/?異構(gòu)的設(shè)備,網(wǎng)關(guān)和邊緣節(jié)點(diǎn)的接入;
-
大量遙測(cè)數(shù)據(jù)匯聚、處理后提供給云端應(yīng)用使用;
-
設(shè)備安全和識(shí)別服務(wù);
-
支持遠(yuǎn)程下達(dá)對(duì)設(shè)備的指令;
-
自動(dòng)創(chuàng)建和管理邊緣節(jié)點(diǎn)和設(shè)備;
-
實(shí)現(xiàn)云端對(duì)邊緣應(yīng)用的編排、部署和配置;
-
為邊緣應(yīng)用的開(kāi)發(fā)提供數(shù)據(jù)存儲(chǔ)、事件管理、API?管理和數(shù)據(jù)分析等能力。
Kubernetes 的優(yōu)勢(shì)與挑戰(zhàn)
Kubernetes?已經(jīng)成為云原生的標(biāo)準(zhǔn),并且能夠在任何基礎(chǔ)設(shè)施上提供一致的云上體驗(yàn)。我們經(jīng)常能夠看到“容器?+?Kubernetes”的組合在?DevOps?發(fā)揮?10X?效率,最近也有越來(lái)越多?Kubernetes?運(yùn)行在數(shù)據(jù)中心外(邊緣)的需求。
如果要在邊緣部署較復(fù)雜的應(yīng)用,那么?Kubernetes?是個(gè)理想的選擇:
-
容器的輕量化和可移植性非常適合邊緣計(jì)算的場(chǎng)景;
-
Kubernetes?已經(jīng)被證明具備良好的可擴(kuò)展性;
-
能夠跨底層基礎(chǔ)設(shè)施提供一致的體驗(yàn);
-
同時(shí)支持集群和單機(jī)運(yùn)維模式;
-
Workload?抽象,例如:Deployment?和?Job?等;
-
應(yīng)用的滾動(dòng)升級(jí)和回滾;
-
圍繞?Kubernetes?已經(jīng)形成了一個(gè)強(qiáng)大的云原生技術(shù)生態(tài)圈,諸如:監(jiān)控、日志、CI、存儲(chǔ)、網(wǎng)絡(luò)都能找到現(xiàn)成的工具鏈;
-
支持異構(gòu)的硬件配置(存儲(chǔ)、CPU、GPU?等);
-
用戶(hù)可以使用熟悉的?kubectl?或者?helm?chart?把?IoT?應(yīng)用從云端推到邊緣;
-
邊緣節(jié)點(diǎn)可以直接映射成?Kubernetes?的?Node?資源,而?Kubernetes?的擴(kuò)展API(CRD)可以實(shí)現(xiàn)對(duì)邊緣設(shè)備的抽象。
然而?Kubernetes?畢竟是為云數(shù)據(jù)中心設(shè)計(jì)的,要想在邊緣使用?Kubernetes?的能力,Kubernetes?或其擴(kuò)展需要解決以下問(wèn)題:
-
ARM?的低功耗和多核的特點(diǎn)又使得其在?IoT/Edge?領(lǐng)域的應(yīng)用非常廣泛,然而大部分的?Kubernetes?發(fā)行版并不支持?ARM?架構(gòu);
-
很多設(shè)備邊緣的資源規(guī)格有限,特別是?CPU?處理能力較弱,因此無(wú)法部署完整的?Kubernetes;
-
Kubernetes?非常依賴(lài)?list/watch?機(jī)制,不支持離線(xiàn)運(yùn)行,而邊緣節(jié)點(diǎn)的離線(xiàn)又是常態(tài),例如:設(shè)備休眠重啟;
-
Kubernetes?的運(yùn)維相對(duì)于邊緣場(chǎng)景用到的功能子集還是太復(fù)雜了;
-
特殊的網(wǎng)絡(luò)協(xié)議和拓?fù)湟蟆TO(shè)備接入?yún)f(xié)議往往非?TCP/IP?協(xié)議,例如,工業(yè)物聯(lián)網(wǎng)的?Modbus?和?OPC?UA,消費(fèi)物聯(lián)網(wǎng)的?Bluetooth?和?ZigBee?等;
-
設(shè)備多租。
關(guān)于如何在邊緣使用?Kubernetes,Kubernetes?IoT/Edge?WG?組織的一個(gè)調(diào)查顯示,30%?的用戶(hù)希望在邊緣部署完整的?Kubernetes?集群,而?70%?的用戶(hù)希望在云端部署?Kubernetes?的管理面并且在邊緣節(jié)點(diǎn)上只部署?Kubernetes?的?agent。
把?Kubernetes?從云端延伸到邊緣,有兩個(gè)開(kāi)源項(xiàng)目做得不錯(cuò),分別是?KubeEdge?和?K3S,下面我們將詳解這兩個(gè)項(xiàng)目,并做全方位的對(duì)比。
KubeEdge 架構(gòu)分析
KubeEdge?是首個(gè)基于?Kubernetes?擴(kuò)展的,提供云邊協(xié)同能力的開(kāi)放式智能邊緣平臺(tái),也是?CNCF?在智能邊緣領(lǐng)域的首個(gè)正式項(xiàng)目。KubeEdge?重點(diǎn)要解決的問(wèn)題是:
-
云邊協(xié)同
-
資源異構(gòu)
-
大規(guī)模
-
輕量化
-
一致的設(shè)備管理和接入體驗(yàn)
KubeEdge?的架構(gòu)如下所示:KubeEdge?架構(gòu)上清晰地分為三層,分別是:云端、邊緣和設(shè)備層,這是一個(gè)從云到邊緣再到設(shè)備的完整開(kāi)源邊緣云平臺(tái),消除了用戶(hù)廠(chǎng)商綁定的顧慮。
KubeEdge?的邊緣進(jìn)程包含以下?5?個(gè)組件:
-
edged?是個(gè)重新開(kāi)發(fā)的輕量化?Kubelet,實(shí)現(xiàn)?Pod,Volume,Node?等?Kubernetes?資源對(duì)象的生命周期管理;
-
metamanager?負(fù)責(zé)本地元數(shù)據(jù)的持久化,是邊緣節(jié)點(diǎn)自治能力的關(guān)鍵;
-
edgehub?是多路復(fù)用的消息通道,提供可靠和高效的云邊信息同步;
-
devicetwin?用于抽象物理設(shè)備并在云端生成一個(gè)設(shè)備狀態(tài)的映射;
-
eventbus?訂閱來(lái)自于?MQTT?Broker?的設(shè)備數(shù)據(jù)。
KubeEdge?的云端進(jìn)程包含以下?2?個(gè)組件:
-
cloudhub?部署在云端,接收?edgehub?同步到云端的信息;
-
edgecontroller?部署在云端,用于控制?Kubernetes?API?Server?與邊緣的節(jié)點(diǎn)、應(yīng)用和配置的狀態(tài)同步。
Kubernetes?maser?運(yùn)行在云端,用戶(hù)可以直接通過(guò)?kubectl?命令行在云端管理邊緣節(jié)點(diǎn)、設(shè)備和應(yīng)用,使用習(xí)慣與?Kubernetes?原生的完全一致,無(wú)需重新適應(yīng)。
K3S 架構(gòu)分析
K3S?是?CNCF?官方認(rèn)證的?Kubernetes?發(fā)行版,開(kāi)源時(shí)間較?KubeEdge?稍晚。K3S?專(zhuān)為在資源有限的環(huán)境中運(yùn)行?Kubernetes?的研發(fā)和運(yùn)維人員設(shè)計(jì),目的是為了在?x86、ARM64?和?ARMv7D?架構(gòu)的邊緣節(jié)點(diǎn)上運(yùn)行小型的?Kubernetes?集群。K3S?的整體架構(gòu)如下所示:
事實(shí)上,K3S?就是基于一個(gè)特定版本?Kubernetes(例如:1.13)直接做了代碼修改。K3S?分?Server?和?Agent,Server?就是?Kubernetes?管理面組件?+?SQLite?和?Tunnel?Proxy,Agent?即?Kubernetes?的數(shù)據(jù)面?+?Tunnel?Proxy。
為了減少運(yùn)行?Kubernetes?所需的資源,K3S?對(duì)原生?Kubernetes?代碼做了以下幾個(gè)方面的修改:
-
刪除舊的、非必須的代碼。K3S?不包括任何非默認(rèn)的、Alpha?或者過(guò)時(shí)的?Kubernetes?功能。除此之外,K3S?還刪除了所有非默認(rèn)的?Admission?Controller,in-tree?的?cloud?provider?和存儲(chǔ)插件;
-
整合打包進(jìn)程。為了節(jié)省內(nèi)存,K3S?將原本以多進(jìn)程方式運(yùn)行的?Kubernetes?管理面和數(shù)據(jù)面的多個(gè)進(jìn)程分別合并成一個(gè)來(lái)運(yùn)行;
-
使用?containderd?替換?Docker,顯著減少運(yùn)行時(shí)占用空間;
-
引入?SQLite?代替?etcd?作為管理面數(shù)據(jù)存儲(chǔ),并用?SQLite?實(shí)現(xiàn)了?list/watch?接口,即?Tunnel?Proxy;
-
加了一個(gè)簡(jiǎn)單的安裝程序。
K3S?的所有組件(包括?Server?和?Agent)都運(yùn)行在邊緣,因此不涉及云邊協(xié)同。如果?K3S?要落到生產(chǎn),在?K3S?之上應(yīng)該還有一個(gè)集群管理方案負(fù)責(zé)跨集群的應(yīng)用管理、監(jiān)控、告警、日志、安全和策略等,遺憾的是?Rancher?尚未開(kāi)源這部分能力。
KubeEdge 與 K3S 全方位對(duì)比
部署模型
KubeEdge?遵循的是以下部署模型:
KubeEdge?是一種完全去中心化的部署模式,管理面部署在云端,邊緣節(jié)點(diǎn)無(wú)需太多資源就能運(yùn)行?Kubernetes?的?agent,云邊通過(guò)消息協(xié)同。從?Kubernetes?的角度看,邊緣節(jié)點(diǎn)?+?云端才是一個(gè)完整的?Kubernetes?集群。這種部署模型能夠同時(shí)滿(mǎn)足“設(shè)備邊緣”和“基礎(chǔ)設(shè)施邊緣”場(chǎng)景的部署要求。
K3S?的部署模型如下所示:
K3S?會(huì)在邊緣運(yùn)行完整的?Kubernetes?集群,這意味著?K3S?并不是一個(gè)去中心化的部署模型,每個(gè)邊緣都需要額外部署?Kubernetes?管理面。這種部署模型帶來(lái)的問(wèn)題有:
-
在邊緣安裝?Kubernetes?管理面將消耗較多資源,因此該部署模型只適合資源充足的“基礎(chǔ)設(shè)施邊緣”場(chǎng)景,并不適用于資源較少的“設(shè)備邊緣”的場(chǎng)景;
-
集群之間網(wǎng)絡(luò)需要打通;
-
為了管理邊緣?Kubernetes?集群還需要在上面疊加一層多集群管理組件(遺憾的是該組件未開(kāi)源)。
云邊協(xié)同
云邊協(xié)同是?KubeEdge?的一大亮點(diǎn)。KubeEdge?通過(guò)?Kubernetes?標(biāo)準(zhǔn)?API?在云端管理邊緣節(jié)點(diǎn)、設(shè)備和工作負(fù)載的增刪改查。邊緣節(jié)點(diǎn)的系統(tǒng)升級(jí)和應(yīng)用程序更新都可以直接從云端下發(fā),提升邊緣的運(yùn)維效率。另外,KubeEdge?底層優(yōu)化的多路復(fù)用消息通道相對(duì)于?Kubernetes?基于?HTTP?長(zhǎng)連接的?list/watch?機(jī)制擴(kuò)展性更好,允許海量邊緣節(jié)點(diǎn)和設(shè)備的接入。KubeEdge?云端組件完全開(kāi)源,用戶(hù)可以在任何公有云?/?私有云上部署?KubeEdge?而不用擔(dān)心廠(chǎng)商鎖定,并且自由集成公有云的其他服務(wù)。K3S?并不提供云邊協(xié)同的能力。
邊緣節(jié)點(diǎn)離線(xiàn)自治
與?Kubernetes?集群的節(jié)點(diǎn)不同,邊緣節(jié)點(diǎn)需要在完全斷開(kāi)連接的模式下自主工作,并不會(huì)定期進(jìn)行狀態(tài)同步,只有在重連時(shí)才會(huì)與控制面通信。此模式與?Kubernetes?管理面和工作節(jié)點(diǎn)通過(guò)心跳和?list/watch?保持狀態(tài)更新的原始設(shè)計(jì)非常不同。
KubeEdge?通過(guò)消息總線(xiàn)和元數(shù)據(jù)本地存儲(chǔ)實(shí)現(xiàn)了節(jié)點(diǎn)的離線(xiàn)自治。用戶(hù)期望的控制面配置和設(shè)備實(shí)時(shí)狀態(tài)更新都通過(guò)消息同步到本地存儲(chǔ),這樣節(jié)點(diǎn)在離線(xiàn)情況下即使重啟也不會(huì)丟失管理元數(shù)據(jù),并保持對(duì)本節(jié)點(diǎn)設(shè)備和應(yīng)用的管理能力。
K3S?也不涉及這方面能力。
設(shè)備管理
KubeEdge?提供了可插拔式的設(shè)備統(tǒng)一管理框架,允許用戶(hù)在此框架上根據(jù)不同的協(xié)議或?qū)嶋H需求開(kāi)發(fā)設(shè)備接入驅(qū)動(dòng)。當(dāng)前已經(jīng)支持和計(jì)劃支持的協(xié)議有:MQTT,BlueTooth,OPC?UA,Modbus?等,隨著越來(lái)越多社區(qū)合作伙伴的加入,KubeEdge?未來(lái)會(huì)支持更多的設(shè)備通信協(xié)議。KubeEdge?通過(guò)?device?twins/digital?twins?實(shí)現(xiàn)設(shè)備狀態(tài)的更新和同步,并在云端提供?Kubernetes?的擴(kuò)展?API?抽象設(shè)備對(duì)象,用戶(hù)可以在云端使用?kubectl?操作?Kubernetes?資源對(duì)象的方式管理邊緣設(shè)備。
K3S?并不涉及這方面能力。
輕量化
為了將?Kubernetes?部署在邊緣,KubeEdge?和?K3S?都進(jìn)行了輕量化的改造。區(qū)別在于?K3S?的方向是基于社區(qū)版?Kubernetes?不斷做減法(包括管理面和控制面),而?KubeEdge?則是保留了?Kubernetes?管理面,重新開(kāi)發(fā)了節(jié)點(diǎn)?agent。
需要注意的是,K3S?在裁剪?Kubernetes?的過(guò)程中導(dǎo)致部分管理面能力的缺失,例如:一些?Admission?Controller。而?KubeEdge?則完整地保留了?Kubernetes?管理面,沒(méi)有修改過(guò)一行代碼。
下面我們將從二進(jìn)制大小、內(nèi)存和?CPU?三個(gè)維度對(duì)比?KubeEdge?和?K3S?的資源消耗情況。由于?KubeEdge?的管理面部署在云端,用戶(hù)不太關(guān)心云端資源的消耗,而?K3S?的?server?和?agent?均運(yùn)行在邊緣,因此下面將對(duì)比?KubeEdge?agent,K3S?agent?和?K3S?server?這三個(gè)不同的進(jìn)程的?CPU?和內(nèi)存的資源消耗。
測(cè)試機(jī)規(guī)格為?4?vCPU,8GB?RAM。
?內(nèi)存消耗對(duì)比
分別用?KubeEdge?和?K3S?部署?0~100?個(gè)應(yīng)用,分別觀(guān)測(cè)兩者的內(nèi)存消耗,對(duì)比如下所示:從上圖可以看出,內(nèi)存消耗:KubeEdge?agent?<?K3S?agent?<?K3S?Server。有意思的是,K3S?agent?即使不運(yùn)行應(yīng)用也消耗?100+MB?的內(nèi)存,而?K3S?server?在空跑的情況下內(nèi)存消耗也在?300MB?左右。
?CPU 使用對(duì)比
分別用?KubeEdge?和?K3S?部署?0~100?個(gè)應(yīng)用,分別觀(guān)測(cè)兩者的?CPU?使用情況,對(duì)比如下所示:
從上圖可以看出,KubeEdge?agent?CPU?消耗要比?K3S?agent?和?server?都要少。
?二進(jìn)制大小
KubeEdge?agent?二進(jìn)制大小為?62MB,K3S?二進(jìn)制大小為?36MB。
大規(guī)模
Kubernetes?原生的可擴(kuò)展性受制于?list/watch?的長(zhǎng)連接消耗,生產(chǎn)環(huán)境能夠穩(wěn)定支持的節(jié)點(diǎn)規(guī)模是?1000?左右。KubeEdge?作為華為云智能邊緣服務(wù)?IEF?的內(nèi)核,通過(guò)多路復(fù)用的消息通道優(yōu)化了云邊的通信的性能,壓測(cè)發(fā)現(xiàn)可以輕松支持?5000+?節(jié)點(diǎn)。而?K3S?的集群管理技術(shù)尚未開(kāi)源,因?yàn)闊o(wú)法得知?K3S?管理大規(guī)模集群的能力。
? ?小結(jié)??
K3S?最讓人印象深刻的創(chuàng)新在于其對(duì)?Kubernetes?小型化做的嘗試,通過(guò)剪裁了?Kubernetes?一些不常用功能并且合并多個(gè)組件到一個(gè)進(jìn)程運(yùn)行的方式,使得一些資源較充足的邊緣節(jié)點(diǎn)上能夠運(yùn)行?Kubernetes,讓邊緣場(chǎng)景下的用戶(hù)也能獲得一致的?Kubernetes?體驗(yàn)。然而通過(guò)上面的性能對(duì)比數(shù)據(jù)發(fā)現(xiàn),K3S?的資源消耗還是比?KubeEdge?要高出好幾倍,而且動(dòng)輒幾百?MB?的內(nèi)存也不是大多數(shù)設(shè)備邊緣節(jié)點(diǎn)所能提供的。最重要的是,Kubernetes?最初是為云數(shù)據(jù)中心而設(shè)計(jì)的,很多邊緣計(jì)算場(chǎng)景特殊的問(wèn)題原生?Kubernetes?無(wú)法很好地解決,?K3S?直接修改?Kubernetes?的代碼甚至基礎(chǔ)實(shí)現(xiàn)機(jī)制(例如,使用?SQLite?替換?etcd)的做法仍值得商榷。關(guān)于什么能改,什么不能改以及怎么改?每個(gè)用戶(hù)根據(jù)自己的實(shí)際需求有各自的觀(guān)點(diǎn),而且也很難達(dá)成一致。另外,?K3S?這種侵入式的修改能否持續(xù)跟進(jìn)?Kubernetes?上游的發(fā)展也是一個(gè)未知數(shù)。
KubeEdge?和?K3S?走的是另一條道路,KubeEdge?是一個(gè)從云到邊緣再到設(shè)備的完整邊緣云平臺(tái),它與?Kubernetes?的耦合僅僅是?100%?兼容?Kubernetes?原生?API。KubeEdge?提供了?K3S?所不具備的云邊協(xié)同能力,開(kāi)發(fā)了更輕量的邊緣容器管理?agent,解決了原生?Kubernetes?在邊緣場(chǎng)景下的離線(xiàn)自治問(wèn)題,并且支持海量異構(gòu)邊緣設(shè)備的接入等。KubeEdge?最近捐獻(xiàn)給?CNCF,成為?CNCF?邊緣計(jì)算領(lǐng)域的第一個(gè)正式項(xiàng)目,就是為了和社區(qū)合作伙伴一起制定云和邊緣計(jì)算協(xié)同的標(biāo)準(zhǔn),結(jié)束邊緣計(jì)算沒(méi)有統(tǒng)一標(biāo)準(zhǔn)和參考架構(gòu)的混沌狀態(tài),共同推動(dòng)邊緣計(jì)算的產(chǎn)業(yè)發(fā)展。
最后,邊緣計(jì)算還有廣闊的發(fā)展前景,KubeEdge?和?K3S?都是非常年輕的優(yōu)秀開(kāi)源項(xiàng)目,我相信未來(lái)他們會(huì)在相互學(xué)習(xí)的過(guò)程中共同進(jìn)步,更好地解決邊緣計(jì)算用戶(hù)的需求。
總結(jié)
以上是生活随笔為你收集整理的KubeEdge vs K3S:Kubernetes在边缘计算场景的探索的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Spring Boot是如何实现自动配置
- 下一篇: 微软研究员:fork() 已落后,需要淘