什么是Kubernetes?
Kubernetes(K8s)是一款由谷歌開源的容器集群管理系統。它基于容器技術,為容器化的應用提供部署運行、資源調度、服務發現和動態伸縮等一系列功能。
什么是KubeEdge?
KubeEdge做的是基于k8s構建,并將容器化的應用編排和設備管理擴展到端上的主機。它由云端和邊緣端組成,為網絡、應用的部署以及云和邊緣之間的元數據同步提供架構支持。KubeEdge理論上還是k8s的一個插件,它完成了k8s沒有完成的事情,就是連接邊緣、設備與云。
KubeEdge的優點
1.離線模式:k8s在云端與node節點斷連時,node節點恢復后就需要重新list-watch,但是在KubeEdge中,每個節點的Metadata被持久化,重啟時不需要重新list-watch。
2.基于k8s: 借助KubeEdge,用戶可以在Edge節點上編排應用,管理設備并監視應用和設備狀態,就像云中的傳統Kubernetes集群一樣 大量的應用: 可以輕松地將現有的復雜機器學習,圖像識別,事件處理和其他高級應用程序部署和部署到Edge。
3.可擴展:各個模塊較為獨立且輕量,我們可以通過更改或增減模塊的辦法,來擴展KubeEdge。
4.資源優化:邊緣端的資源較少,而KubeEdge可以將一些不必要的模塊關閉,減少資源的消耗,優化在邊緣節點上資源的利用。
5.跨平臺:兼容性極強,它不需要區分自己在什么云中,無論是私有云、公有云還是混合云,它都可以完美運行。
6.多架構:無論是x86還是arm架構,都可以運行KubeEdge。
7.開發簡單:在添加設備和應用部署的方法上,KubeEdge還支持SDK,這樣大大縮減了開發的流程。開發人員可以編寫基于常規http或mqtt的應用程序,對其進行容器化,然后在Edge或Cloud中的任何位置運行它們中的更合適的一個。
8.易于維護:k8s所具有的升級、回滾、監控、警報等功能,KubeEdge也都擁有。這樣更有利于維護方便。
9.支持邊緣節點間的通信:通過在Edge上運行的業務邏輯,可以在生成數據的本地保護和處理大量數據。這減少了網絡帶寬需求以及邊緣和云之間的消耗。這樣可以提高響應速度,降低成本并保護客戶的數據隱私。
KubeEdge基礎概念
KubeEdge分三個部分,分別是云、邊、端。
云負責應用和配置的校驗和下發,由k8s組件和CloudCore組成,是整個系統的中樞大腦。
邊負責運行應用和管理接入的設備,由EdgeCore和數據庫SQLite組成,是系統中有一定自治能力的功能節點。
端代表設備。
所有Kubernetes的組件和指令,都可以在KubeEdge中執行。包括kubectl logs、kubectl create等指令,還有deployment、daemonset、statefulset、crd等資源對象,都可以在KubeEdge中使用。
KubeEdge架構
K8s組件
1.K8S API Server:提供k8s各類寺院對象的增刪改查及watch等HTTP的REST借口,是整個系統的數據總線和數據中心。
云端組件
1.EdgeController: 管理Edge節點。 一種擴展的Kubernetes控制器,它管理邊緣節點和pod元數據,來定義邊緣節點。
2.DeviceController: 負責設備管理。一種擴展的Kubernetes控制器,用于管理設備,以便設備元數據/狀態數據可以在邊緣和云之間同步。
3.CloudHub: 云中的通信接口模塊。一個Web套接字服務器,負責監視云端的更改、緩存和向EdgeHub發送消息。
邊緣端組件
1.EdgeHub: Edge上負責與云服務交互的Web套接字客戶端。 負責與用于邊緣計算(如KubeEdge體系結構中的EdgeController)云服務交互的Web套接字客戶端,。這包括同步云端資源更新到邊緣,以及報告邊緣端主機和設備狀態對云的更改。
2.MetaManager:是Edged與EdgeHub之間的消息處理器,還負責將原數據存儲到輕量級數據庫(SQLite)或從中檢索元數據。
3.DeviceTwin: 負責存儲設備狀態,處理設備屬性,處理DeviceTwin操作,在邊緣設備和邊緣節點之間創建成員關系, 將設備狀態同步到云以及在邊緣和云之間同步DeviceTwin信息。它還為應用程序提供查詢接口。
4.ServiceBus:充當用于發送/接收有關HTTP協議消息的接口
5.EventBus: 使用MQTT處理內部邊緣通信。MQTT客戶端與MQTT服務器(MQTT服務器)交互,為其他組件提供發布和訂閱功能。
6.Edged: 管理節點生命周期的邊緣節點模塊。它可以幫助用戶在邊緣節點上部署容器化的工作負載或應用程序。
端組件
1.MQTT Broker:實質上EventBus就是一個MQTT Broker,它負責接收publisher的消息,并發送給相應的subscriber。
2.Mapper:設備上報到MQTT broker的一個中間組件,用于接收與轉發設備消息。
數據庫組件
1.NodeLevel DataStore:主要是SQLite
總結
KubeEdge作為K8s的一個拓展性插件,它依然依賴于K8s本身,不同于K3s,它對邊緣端和設備端的支持,是通過對邊緣與設備的強適應來完成的,而不是通過裁剪k8s本身。插件化也保證了它極輕量化和極高的性能,組件與組件之間相對的獨立保證了解耦與功能的可開關,這些特性都表明它在邊緣計算中是個非常實用的利器。