
導讀
邊緣計算平臺,旨在將邊緣端靠近數據源的計算單元納入到中心云,實現集中管理,將云服務部署其上,及時響應終端請求。
然而,成千上萬的邊緣節點散布于各地,例如銀行網點、車載節點等,節點數量甚至可能是幾萬到十幾萬,這就會對節點的承載能力造成巨大沖擊。Kubernetes 官方數據是可以支持納管 5000 節點,如果想要納管更多的邊緣節點,該如何設計邊緣計算平臺架構呢?
本文針對以上問題,提供一些博云的解決思路。
多集群管理
多集群可以有效地擴展納管節點的規模,而對 kubernetes 多集群的管理,各廠商的實現方式各有不同,不同的 API,不同的特性,因此市場上很難形成標準的解決方案。
現有的官方 kubernetes 多集群管理解決方案是 kubefed(Federation V2),即 kubernetes 聯邦。Federation V1早在 kubernetes 1.6 版本就開始提供服務,但由于V1架構的限制,無法靈活支持更新的 k8s API 接口,加上其他很多問題影響集群管理的效率,因此 Federation V1 在 kubernetes 1.11 版本正式被棄用,現在提供服務的是 Federation V2。

由架構圖實現可以看出,Federation V2 在 k8s 之上定義了一些資源,用 cluster configuration 記錄集群的 endpoint,secret 等認證信息,type configuration 來定義需要用 Federation 托管的資源類型,提供了調度器來平衡各個集群的負載,以及多集群的 DNS 功能。
這種 controller 級別的集群管理,提供了豐富的集群間交互功能,更適用于異地多中心的集群災備等場景。在邊緣場景,一個邊緣端可能就是一個小集群(存在多個計算單元可以組成集群),這樣會使得集群數量不斷增多,進而對 Federation 的執行效率、API 的響應時間都會有較為明顯的影響。那么,該如何削弱集群數量的不確定性所帶來的影響呢?
下面為大家展示,我們在 KubeEdge 架構下如何解決多節點的問題。
Cloudcore 橫向擴展
KubeEdge 架構下的云邊協同通信采用 websocket 方式,quic 作為備選。其中 websocket 性能最好,quic 在弱網絡(頻繁斷開)情況下優勢較大,通信的服務端都是由 cloudcore 來實現。
這里我們引入一個邏輯集群的概念,即每個 cloudcore 可以看做是一個集群,橫向擴展多個 cloudcore 對接下層數量較大的邊緣節點,向上只依托在一個 kubernetes 集群即可,架構如下所示:

這樣設計有如下幾點優勢:
- 解決單個 cloudcore 消息轉發/接收等處理的性能瓶頸;
- 應用/設備的發布請求在 api-server 會被 cloudcore 監聽捕獲到,轉而由對應的 cloudcore 來處理請求到邊端,這樣緩解了 k8s 集群的壓力;
- 中心云只需要一套 k8s 集群,調用鏈簡單清晰,易于管理。
測試實現
環境信息:

測試集群單 master 節點,管理一個 node1 工作節點,cloudcore 運行在 maser 節點上,并已接入 edge1 邊緣節點。
現在測試 node1 上創建 cloudcore 服務,將新的邊緣節點 edge2 接入,節點組圖如下:

集群下已有 cloudcore 和 edgecore,node1 是 k8s 的 x86 普通節點,現在該節點上運行 cloudcore 提供服務。
- 拷貝 cloudcore 二進制文件
- 重新生成證書
- 生成 cloudcore.yaml 配置文件
- 拷貝 k8s 集群的 kubeconfig 并將路徑配置到 cloudcore.yaml
- 啟動 cloudcore
edge2 是作為待接入集群的邊緣節點,在該節點上運行 edgecore, server 指向 node1,啟動服務。

可以看到 edge2 已經注冊到 node1 上的 cloudcore 并同步節點信息到 k8s,測試發布服務到 edge1 上:

總結
本文通過討論多集群的方式來擴展納管邊緣節點的規模,分析了以 kubefed 聯邦進行多集群管理機制,對比不同場景下的特點,介紹了 KubeEdge 中利用橫向擴展 cloudcore 的解決方案,并在測試環境部署實踐。
在實際生產環境中,博云 BeyondEdge 邊緣計算平臺依托于博云 BeyondContainer 容器云平臺,提供云上服務的編排、治理、DevOps 等云原生能力,利用 KubeEdge 將這些能力延伸到邊緣節點,并將邊緣設備抽象到云端 BeyondContainer容器云中,作為孿生設備資源,統一訪問入口。
并且,運行在云端的邊緣平臺組件 cloudcore 作為應用服務部署在BeyondContainer容器云中,充分利用容器云的產品能力,將 cloudcore 以高可用方式部署在 kubernetes 中心云,通過 ingress 暴露服務接口提供給邊緣節點的組件 edgecore 訪問,可以根據邊緣節點實際接入量動態擴展 cloudcore,作為邏輯上的集群擴展以提高中心云對邊緣節點的承載能力。
點擊BoCloud博云_以創新云技術 為效率而進化,獲取更多產品及案例信息。