做者:DJgit
審校:Kevin·Wanggithub
1. 容器生態圈新的創新方向golang
2018年容器技術圈的年終盛典北美KubeCon終於在西雅圖落下了帷幕。此次北美KubeCon總共吸引了8000多觀衆參會,創下歷史新高。先放一張圖來感覺下現場的火爆程度。web
關注Kubernetes的小夥伴應該已經感受到了,與觀衆參會熱情造成鮮明對比的是,這屆KubeCon傳遞出了一個信號:針對Kubernetes自己的變化愈來愈少,咱們也愈來愈難看到那些激動人心的大特性。Kubernetes正變得「無聊」已經成了一個既定的事實。後端
對Kubernetes核心來講,「無聊」並不見得是件壞事,這是一個項目成熟的標誌。現現在Kubernetes已經日益成爲公有云/企業IT系統的基礎設施,而且朝着大規模,複雜場景的方向延伸,與AI、大數據、IoT、以及垂直行業等領域的結合愈來愈緊密。近來,愈來愈多圍繞Kubernetes生態圈的創新,正在這些領域發生着。好比,此次在北美KubeCon亮相的由華爲開源的KubeEdge項目,就給人一種眼前一亮的驚喜,讓人不禁地驚呼 「哦,原來Kubernetes還能在邊緣計算上玩!」 在感嘆Kubernetes的強大魅力同時,也不得不佩服華爲工程師們的創造力——要知道,邊緣計算與雲計算的場景有很大的區別,用K8S跑邊緣計算,以前更多還只是停留在討論階段,實踐過程當中的坑不勝枚舉,華爲竟然作到了,並且還開源了!安全
2. K8S IoT Edge Working Group服務器
2018年既是容器和Kubernetes收穫廣泛讚譽的一年,也是邊緣計算加速行業落地和應用的一年。邊緣計算的「邊緣」是指咱們平常生活中無處不在、影響着咱們衣食住行的各式各樣的端點設備,好比:手機、攝像頭、路由器、自動駕駛汽車,工業機器人等。與集中式的計算模型相比,邊緣計算能夠爲企業/用戶提供低延遲,高性能的服務,保證數據的本地化和安全,解決本地數據人工智能等問題。然而,物聯網世界的異構性和工業系統資產的長生命週期等特色給邊緣設備的管理帶來了嚴峻的挑戰。Gartner直接把邊緣計算列爲下一個十年的關鍵技術方向。網絡
Kubernetes引領的以容器爲中心的IT基礎設施變革方興未艾,就已經有人在謀劃下一個「十年」了。既然Kubernetes已經成爲了容器化編排的事實標準,而且持續在雲端持續發揮着魔力,那麼一個直覺的想法就是可否讓Kubernetes把這種魔力帶到邊緣計算的場景呢?架構
然而,當Kubernetes真正涉及到邊緣側部署時,仍然存在很多挑戰,例如:app
1. 邊緣側可能沒有足夠的資源運行一個完整的Kubelet;
2. 當邊緣節點和雲端的網絡不穩定時甚至徹底不通時,可否實現本地自治;
3. 邊緣側節點之間通訊;
4. 如何在雲端管理多租戶的邊緣資源,包括設備;
5. 邊緣側沒有serverless的支持,好比:函數。
爲了解決這些挑戰,華爲,谷歌,紅帽,VMWare共同在Kubernetes社區發起成立了一個新的工做組:IoT Edge Working Group,目的就是爲了提升Kubernetes在邊緣場景下的部署能力。
KubeCon進行到第三天的時候,四位分別來自華爲,紅帽,思科和Oort公司的工程師們進行了一次圓桌會議,會議主題就邊緣計算面臨的技術挑戰和將來發展趨勢。
來自華爲的架構師Cindy Xing(Kubernetes社區IoT Edge工做組的co-chair)在圓桌會議中談到了雲計算、容器和邊緣計算的關係——不一樣於雲計算,邊緣計算意味着幾十萬分佈在不一樣地理位置的邊緣節點和百萬甚至上億的末端設備。邊緣計算規模和地域跨度遠遠超過數據中心。雲所能提供的帶寬將沒法知足邊緣的需求。同時邊緣和雲之間的鏈接是不穩定的。邊緣側須要實如今和雲斷網的情形下實現自治,同時又須要和雲鏈接實現集中的管理和批量的應用部署管理。若是對着幾十萬的邊緣節點去分別部署更新應用,這個消耗是沒法想象的。另外邊緣計算中,設備極其多樣,設備的通訊協議也很不一樣。設備能夠是128MB、1CPU的Raspberry-Pi,也能夠是多核,GB內存的服務器。設備通訊協議既能夠是Http/Amqp/Mqtt,還能夠是Bluetooth,Zigbee等等。邊緣計算將比雲計算複雜的多。對於開發者來講,一個應用在辦公室開發驗證後,將但願應用直接部署在邊緣,無需焦慮功能問題。容器的可移植性正好知足了這個須要。
正是看到了K8S和邊緣計算存在的自然契合點,華爲開發並開源了KubeEdge——業界首個基於Kubernetes的多租、可擴展、兼容K8S API的容器應用的邊緣計算平臺。KubeEdge也是K8S IoT Edge Working Group輸出的使用Kubernetes支持邊緣計算的一個參考範例。
3. KubeEdge:K8S與邊緣計算的結合
KubeCon第四天的時候,華爲爲CNCF IOT/Edge的社區會員組織了一次小型聚會。
在此次輕鬆隨意的聚會上,K8S/CNCF社區成員坐下來,聊聊天,分享各自對邊緣計算的場景需求和技術理解。華爲的工程師演示了華爲雲的邊緣計算產品IEF。在隨後的KubeCon CNCF IOT/Edge Deep Dive,co-chair Cindy Xing深度介紹了IEF的開源實現KubeEdge的架構,功能和將來發展路標。
針對邊緣計算場景下的痛點,KubeEdge爲用戶提供了基礎的網絡設施,使用KubeBus能夠實現邊緣和雲,邊緣和邊緣的網絡路由通訊。藉助雲和邊的MetaStore以及之間的同步,KubeEdge解決了雲邊斷網,帶寬的問題並實現邊緣側自治。在KubeEdge裏,AppEngine是個輕量化的代理, ~10MB的運行時內存消耗意味着它幾乎能夠跑在任何設備上。AppEngine保持K8S的數據模型和通訊協議,經過和容器引擎交互,管理容器應用的生命週期,反饋容器應用的運行狀態。
從功能上看,KubeEdge打通了從底層設備到設備驅動/SDK,再到邊緣側Runtime,雲端控制器以及雲上應用整個軟硬件全棧,它爲IOT廠商,開發者和IOT應用企業帶來了一個解決方案和平臺。
從架構看,KubeEdge包括雲端和邊緣側兩套組件。邊緣側對設備支持MQTT協議,採用了模塊化設計,由Edged,MetaManager,DeviceTwin,EventBus,EdgeHub這五個模塊構成,模塊之間經過golang的channel進行通訊。
Edged就是爲邊緣計算深度定製的精簡AppEngine。雖然精簡,但這個AppEngine支持K8S的API原語,好比:Pod,Volume,Configmap等,同時也支持Pod探針和Event上報。
EdgeHub是一個web socket的client,負責和雲端的消息通訊,包括:向邊緣側同步雲端資源更新,向雲端報告邊緣側節點和設備狀態更新,這條數據通道也就是上文提到的KubeBus。
MetaManager則是一個消息處理器,是架在edged和edgehub之間的橋樑,同時也和後端data store交互,讀寫一些元數據;
EventBus則是邊緣節點和設備的之間的紐帶,他既能夠從MQTT Broker處訂閱設備狀態更新事件,並向其餘感興趣的組件發佈,也能夠向MQTT Broker發送對設備的操做指令,同時雲上app和用戶本身部署在edge的應用通訊,也走EventBus。
DeviceTwin則負責存儲設備元數據到data store以及和雲端同步設備狀態,用戶能夠從雲端下發的對設備操做指令發佈給DeviceTwin。KubeEdge在邊緣側對設備支持MQTT協議,而且提供設備影子服務。設備目前能夠經過MQTT Broker(mosquitto)註冊進來。
在Cindy看來,KubeEdge的架構作到了雲、邊鬆耦合,邊緣能夠在斷網條件下自治,並在網絡恢復後和雲側進行同步。KubeEdge引入了K8S強大的容器編能力,客戶能夠像管理雲上K8S集羣同樣方便地管理邊緣節點和部署應用,這對熟悉K8S的用戶來講,無疑是個福音。
4. 將來工做
KubeEdge目前已包含了邊緣側的完整實現,雲側的開源工做正在緊鑼密鼓地籌劃中,相信很快也會開源,詳見項目地址:https://github.com/kubeedge/kubeedge。
KubeEdge自11月KubeCon China宣佈開源以來,引發了普遍關注,一度登上Github trending榜單。目前star 220+,fork 50+,slack用戶和開發者羣成員50+,而且吸取了多名外部代碼貢獻者。
將來,華爲將繼續完善KubeEdge,包括但不限於:
支持更多的設備接入協議:AMQP,藍牙,ZigBee等;
支持超大規模節點和設備管理;
和Istio結合構建服務網格能力;
在邊緣側提供函數服務;
支持設備經過MQTT協議直連雲端;
邊緣節點使用UDP hop來通訊;
引入智能調度功能。
華爲也歡迎參任何感興趣的廠商和開發者參與KubeEdge社區,共同推進邊緣計算的創新。咱們預計從此一到兩年邊緣計算會有日新月異的發展,咱們徹底有理由相信取得先發優點的KubeEdge將會打造一個新的生態。