作者
王冬,騰訊雲高階研發工程師,專注於Kubernetes、容器等雲原生領域,SuperEdge 核心開發人員,現負責騰訊雲邊緣容器TKE Edge私有化相關工作。
背景
2021年9月27號,,在VMware 聯合了 Intel、 PingCAP 等多家合作公司舉辦的2021智慧雲邊開源峰會邊緣計算專場上,來自騰訊雲的高階工程師王冬,發表《 SuperEdge 的新特性和未來之路》的分享。
SuperEdge 是2020年由騰訊聯合 Intel、VMware、虎牙直播、寒武紀、首都線上和美團等多家公司共同發起的邊緣計算分散式容器管理系統,旨在將 Kubernetes 集中式資源管理能力無縫擴充到邊緣計算和分散式資源管理場景,統管邊緣裝置和應用,為眾多的 IoT 裝置賦能。
以下是分享全文。
SuperEdge 的四大特性
-
SuperEdge 來源
SuperEdge 是騰訊雲邊緣容器管理系統 TKE Edge 產品族中的一個開源產品,其對應的商業產品是 TKE Edge 公有云服務和 TKE Edge 私有化服務。其公有云服務在2018年就在內部進行孵化,2019年正式公測並對外提供服務,目前對外完全免費;其私有化產品目前由靈雀雲對外提供整體的交付和維保。
-
SuperEdge 和 TKE Edge 的關係
SuperEdge 開源的是 TKE Edge 的邊緣能力元件,並不包含其商業產品叢集建立的部分。其邊緣能力元件是完全開源的,開源產品和商業產品的邊緣能力是完全一致的,甚至其開源產品 SuperEdge 的功能會比其商業產品更新的還要早。因為騰訊目前內外只維護了一個倉庫,就是 Github 的 SuperEdge。
SuperEdge 核心的邊緣能力有4個:
L3級邊緣自治能力
這個能力主要由淺紅色的lite-apiserver
提供。為什麼需要能力?有兩個原因:
- 第一是因為雲邊一般是弱網,也可能斷網,在弱網和斷網情況下要保證邊緣服務穩定。lite-apiserver 在雲邊網路正常的情況下直接從雲端 Kube-apiserver 請求資料,但是雲端請求不到的時候就會從本地快取中取出相關元件管控快取返回給請求端,保證邊緣服務的穩定。
- 第二是邊緣節點或者邊緣站點可能會斷電重啟,特別是在雲邊斷網的時候重啟邊緣節點,邊緣節點上的業務容器會無法拉起。有了 lite-apiserver 的本地快取就能避免這個問題,會從本地儲存中把業務容器載入起來。
除此之外 lite-apiserver 還提供了一些其他能力。比如:
- 以 InCluster 方式訪問 kube-apiserver
- 支援所有型別資源的快取,包括 CRD
- 邊緣節點安全:lite-apiserver 用代理元件的許可權去請求 kube-apiserver,而不是超級許可權
- 支援多種快取儲存:Light Edge 可用本地檔案儲存,Heavy Edge 可以用 SQLite 等 KV 儲存;
雲邊協同能力
這個能力主要由淺綠色的tunnel-cloud
和tunnel-edge
兩個元件提供。這兩個元件是騰訊雲邊緣計算團隊完全自研的雲邊隧道,目前可以代理 TCP、HTTP、HTTPS、SSH 四種協議請求。為什麼需要雲邊隧道能力?
- 第一是邊緣節點一般是沒有公網 IP 的,邊緣節點可以主動訪問雲端的 Kube-apiserver,但是雲端卻無法直接訪問邊緣節點,所以需要雲邊反向隧道進行打通。
- 第二是為雲邊資料傳輸做準備,邊緣部分資料是要回傳雲端進行分析和處理的,高效、安全的加密隧道是必要的條件。
不過 SuperEdge 這個雲邊隧道並不專屬 SuperEdge,任何需要隧道的地方都可以拿去按自己的場景進行配置和直接使用。
海量站點管理能力
這個能力主要由淺紫色的application-grid-conterlloer
和application-grid-wrapper
兩個元件提供。為什麼需要這兩個元件?
-
第一是邊緣一般有很多類似的站點,需要部署同一套應用,我們不可能一一去部署,直接迴圈部署有的站點還會有差異,
application-grid-conterlloer
就是為解決這問題而誕生的。使用者的一份應用在雲端一次提交便能同時部署到邊緣多個站點,並且允許站點灰度能力,允許站點配置上有差異。 -
第二是防止邊緣應用跨站點訪問。因為各個站點基本提供一樣的邊緣服務,服務就可能會跨站點進行訪問,跨站點訪問會引起兩個問題。A 站點可能會把 B 站點資料寫紊亂,跨站點訪問的延時不可控。
這個就是application-grid-wrapper
解決的問題,他能把一個站點的流量鎖定在一個站點之內,智慧的配置後端的endponit
,把服務鎖定在使用者想要的範圍內。
上圖便是這兩個元件的一個典型使用示例圖。站點 NodeUnit-1 和站點 NodeUnit-2 可以同時部署同一套服務 ServiceGroup-1,站點 NodeUnit-3 需要部署服務 ServiceGroup-2,並且各站點服務訪問只在各站點內進行。站點的劃分也是邏輯的,一個小機房可以劃為一個或者多個站點,小機房內的節點也可以同屬於多個站點,不同站點可以部署不同服務,來充分利用小機房內的資源。
分散式健康檢查
這個能力主要由淺黃色的edge-health-admission
和edge-health
兩個元件提供。為什麼需要這兩個元件?
-
第一是需要在雲邊斷網的時候儘可能的反饋邊緣節點的健康性。比如某個邊緣的小機房的某個可用區雲邊斷網了,雲上暫時無法知道只是雲邊斷網了,還是這個可用區當機了。這個健康狀況雲上是沒有辦法知道,但是這個小機房的其他可用區可以通過定期 Check 去反饋彼此的健康狀況。
edge-health
就起到了這個作用。 -
第二是維護邊緣服務的穩定性,避免被反覆重建。在把原生 Kubernetes 推向邊緣後,原生 Kubernetes 的驅逐能力是不完全符合邊緣的。在邊緣弱網或者斷網,節點的狀態可能會出現反覆的
NotReady
,但是邊緣服務是正常的,並不受雲邊弱網的影響。可是雲上的 Kubernetes 可不這麼認為,一但節點不NotReady
就可以引起邊緣服務驅逐,將邊緣服務反覆遷移和重建,引起邊緣服務的不穩定。而edge-health-admission
就是為解決這個問題,他把edge-health
反饋的邊緣節點真實的健康狀況反饋給 Kube-apiserver,防止邊緣服務被誤驅逐。
SuperEdge 的新特性及原理
從去年12月開源到現在,SuperEdge 已經發了5個版本,帶來了許多新特性,這裡是4個比較典型的,其他的可關注 SuperEdge 社群。
新特性一:易用性 一鍵建立 與 一鍵整合
從開源到現在,SuperEdge 一直在簡單性和易用性上深耕。
-
一鍵建立邊緣 K8s 叢集
在使用者沒有 K8s 叢集的時候,可以通過
edgeadm init
一鍵建立邊緣 K8s 叢集:## 一鍵建立邊緣叢集 ./edgeadm init --apiserver-cert-extra-sans=… ## 一鍵Join邊緣節點 ./edgeadm join kube-api-addr --token xxxx…
只需要一個 Master 節點和一個 Node 節點,2C2G 的資源便可以輕鬆玩轉邊緣,納管使用者灑落在任何地方的邊緣節點和邊緣裝置。
實現上是改造了
Kubeadm
,在Kubeadm init
之前加了Init node
和Install container runtime
, 之後 Addon CNI 網路外掛和上面提到了邊緣能力元件。使用方式上和
Kubeadm
完全一樣,只比Kubeadm
多了2個引數。具體可檢視:用 edgeadm 一鍵安裝邊緣 K8s 叢集和原生 K8s 叢集 -
一鍵整合邊緣能力
在使用者已經有了原生的 K8s 叢集,可以通過
Addon SuperEdge
一鍵整合邊緣能力。## 一鍵Addon SuperEdge整合邊緣能力 ./edgeadm addon edge-apps --master-addr … ## 一鍵Join任意位置的邊緣節點 ./edgeadm join kube-api-addr --token=…
整合邊緣能力之後原生的K8s叢集將具備既能管理中心節點和中心應用,也能管理邊緣節點和邊緣應用的能力,實現中心和邊緣混管、混部和互彈。能 Join 任意位置的邊緣節點,不要求 SSH 到邊緣節點,只要這個邊緣節點能訪問到中心的 Kube-apiserver 就能被 Join。除此之外,當然也具備 SuperEdge 所有的邊緣能力。
實現的原理如下圖:
使用者通過任何方式搭建的原生K8s叢集,edgeadm addon SuperEdge
會把他配置成標準的Kubeadm Kubernetes
叢集,如果是 Kubeadm Kubernetes 更就可以直接跳過這步。之後準備Addon SuperEdge
和Join edge node
的前提條件。這裡比較有挑戰的點就是準備Join edge node
的條件,實現任何 K8s 叢集都能一鍵 join 進去任意位置的邊緣節點。更詳細原理可檢視:Addon SuperEdge 讓原生 K8s 叢集可管理邊緣應用和節點
新特性二:邊緣託管叢集 + 邊緣獨立叢集 + 邊緣聯級叢集
下面這個圖是 SuperEdge 向邊緣分散式多叢集邁進的第一步。
SuperEdge 目前可以通過騰訊雲邊緣計算團隊新開源的分散式多叢集專案clusternet
,實現在中心統一管控邊緣託管叢集,納管邊緣獨立叢集,甚至是邊緣聯級叢集。
其中納管的邊緣獨立叢集不限於 SuperEdge 型別的 K8s 叢集,還包括輕量級的 K3s 叢集、MicroK8s 叢集……及其他原生的 K8s 叢集。
新特性三:Tunnel 遠端登入內網節點和 HPA
tunnel-cloud 和 tunnel-edge 是雲邊隧道的兩端,SuperEdge 每個 tunnel-cloud 例項 Pod 上並不是保留了所有邊緣節點的的連線,而是每個 tunnel-cloud 只是承擔了一部分邊緣節點的 tunnel-edge 隧道連線,也就是每個雲邊隧道只有一條長連線。而其他大部分雲邊隧道專案都是雲端每個例項需要保持和邊緣節點的所有長連結:
長連結數量 = 隧道雲端例項數 * 邊緣節點個數
這樣做的目的主要是支援 tunnel-cloud 自動擴縮容
隨著一個邊緣叢集的邊緣節點數量不斷打破 SuperEdge 的上限,tunnel-cloud 不能再靜態的去維護固定數量的例項,而要動態的去擴容去 tunnel-cloud 例項,以便接入更多的長連線,納管更多的邊緣節點,這就是 tunnel-cloud 自動 HPA 需求來源。
最後這個小特性是藉助 tunnel 隧道,SuperEdge 支援了遠端安全的SSH到無公網IP的邊緣節點,為使用者遠端操作無公網 IP 的邊緣節點帶來了極大的便利性。
新特性四:遠端批量新增邊緣節點
新特性的最後一個是遠端批量新增邊緣節點。這是 SuperEdge 落地生產批量化的一個需求,相關程式碼已經開源到 SuperEdge 的penetrator
模組。遠端批量新增邊緣節點分為兩種情況:
-
雲端能 SSH 到的邊緣節點
雲端能 SSH 到邊緣節點這個操作比較常規,通過下發一個 SSH 的 Job, 批量 SSH 遠端執行命令新增邊緣節點。
penetrator
的關鍵是無法直接SSH到的邊緣節點怎麼實現批量添? -
雲端不能 SSH 到的邊緣節點
不能直接 SSH 到的邊緣節點,如下圖,可以通過一個代理或者其他辦法把同一子網的一個節點加入到邊緣 K8s 叢集。以這個邊緣節點為跳板,然後把任務 Job 下發到這個跳板節點,然後就可以批量的執行新增和這個跳板節點同一內網的邊緣節點。這樣就實現了遠端批量新增不能 SSH 到的邊緣內網節點。
SuperEdge 未來的雲邊端
SuperEdge 未來的雲上
騰訊雲邊緣團隊最近剛開源了團隊的第二個開源專案 Clusternet,這並不是一個叢集網路相關的開源專案,而是為了實現像訪問Internet網路一樣,訪問使用者各處K8s叢集
的目標而構建的一個分散式多叢集管理開源專案。為什麼需要這個專案?
-
第一是為了滿足海量邊緣節點的管理
一個 K8s 叢集管理的邊緣節點是有限的,原生的 K8s 叢集目前社群給出的節點上限是5000。K8s 叢集管理的節點越多,維護成本和技術難度都將指數級上升。把數量龐大的節點放在一個叢集裡面,本身面臨的風險就是比較高的,一旦中心有問題,節點的應用可能都會受到影響。
要管理上萬的邊緣節點,單叢集並不優雅,反而是小而美的多叢集更安全更穩定。clusternet 目前能夠納管各式各樣的 K8s 叢集,包括公有云的、私有化的和邊緣K8s叢集。可以實現在中心一個控制面統一管理和訪問和各個 K8s 叢集,並且可以實現從納管的叢集互相訪問。 -
第二是為了滿足站點和應用容災的需要
納管各種 K8s 叢集只是實現分散式多叢集管理的第一步,叢集容災、應用容災才是目的。邊緣站點斷網斷電的可能性要比中心更高也更頻繁。站點當機之後相應站點服務需要在臨近站點或者備份站點上繼續提供服務,叢集遷移、同城雙活是迫切的需求。邊緣的應用也不會只部署在一個站點之內,一個站點崩潰還需要在其他站點上繼續提供服務。
上圖是 Clusternet 的架構,目前由兩個元件clusternet-agent
和 clusternet-hub
組成。clusternet-agent
負責把 K8s 叢集註冊到父叢集,clusternet-hub
負責處理註冊、聚合各個子 K8s 叢集 Kube-apiserver,以及把應用部署到多個 K8s 叢集。
SuperEdge 未來的邊上
下圖表述的是目前邊緣 K8s 叢集雲邊 Service 互訪和邊邊 Service 互訪的現狀。
雲邊 Service 互訪大多都是以 NodePort 方式對外暴露,很少有邊緣專案實現像原生 K8s 叢集一樣,在一個叢集內Service無縫進行互訪
。
邊邊 Service 互訪困難更高,要是邊邊之間是單向網路還能通過打隧道互訪,要是物理網路完全不通只能通過雲端中轉。就算實現了雲邊 Service 互訪和邊邊 Service 互訪,又如何避免效能損失,以及突破雲邊和邊邊物理網路的不穩定性?
這裡的解決方案可關注 SuperEdge 社群,後續會推出相關的解決方案。
SuperEdge 未來的端上
端上 SuperEdge 已經實現 Addon 原生的 Edgex Foundry, 可以通過如下命令有選擇的部署 Edgex Foundry 的各層元件:
attlee➜ ✗ ./edgeadm addon edgex -h
Addon edgex to Kubernetes cluster
Usage:
edgeadm addon edgex [flags]
Flags:
--core Addon the edgex core-services to cluster.
--app Addon the edgex application-services to cluster.
--device Addon the edgex device-services to cluster.
--ui Addon the edgex ui web to your cluster.
詳細的操作可檢視在 SuperEdge 上用 EdgeX Foundry 接入 IoT 裝置。
這只是 SuperEdge 實現邊緣裝置管理的第一步,EdgeX Foundry 也只是眾多裝置管理平臺中的一種,後續 SuperEdge 還會和更多的緣裝置平臺進行抽象和整合,推出多平臺邊緣裝置平臺無縫銜接
的解決方案。但無論是那種方案,SuperEdge 都會以 Addon 的方式讓使用者去自由選擇,絕不強繫結任何邊緣裝置平臺。
最後這張圖是目前 SuperEdge 和 EdgeX Foundry 在端邊的部署方式,以及裝置的接入方式。一個站點只用部署 SuperEdge 和 EdgeX Foundry 的一套邊端服務即可管理相應站點的邊緣裝置。
後續 SuperEdge也 會面向邊緣站點做一系列的支援,包括站點自治、站點 Workload、站點容災等,在雲端統一管理使用者的邊緣站點。
最後送大家一句話:
邊緣計算技術將成為萬物互聯成功的關鍵,將低延遲和低成本的服務於 5G 和數字化!
演講原視訊
https://attlee-1251707795.cos.ap-chengdu.myqcloud.com/superedge/v0.6.0/superedge_future.mp4
關注【騰訊雲原生】公眾號,後臺回覆關鍵詞【雲邊開源峰會】可獲取演講PPT原稿。
SuperEdge 相關文章:
- 騰訊雲聯合多家生態夥伴,重磅開源 SuperEdge 邊緣容器專案
- 【TKE 邊緣容器系列】SuperEdge易學易用 【6個短頻教學合集】
- 【TKE 邊緣容器系列】從0到N瞭解 SuperEdge【18篇乾貨合集】
- 【TKE 邊緣容器系列】一文讀懂 SuperEdge 邊緣容器架構與原理
- 【TKE 邊緣容器系列】用 edgeadm 一鍵安裝邊緣 K8s 叢集和原生 K8s 叢集
- 【TKE 邊緣容器系列】Addon SuperEdge 讓原生 K8s 叢集可管理邊緣應用和節點
- 【TKE 邊緣容器系列】在SuperEdge 上用 EdgeX Foundry 接入 IoT 裝置
- 【TKE 邊緣容器系列】打破內網壁壘,從雲端一次新增成百上千的邊緣節點
- 【TKE 邊緣容器系列】SuperEdge 雲邊隧道新特性:從雲端SSH運維邊緣節點
- 【TKE 邊緣容器系列】SuperEdge 高可用雲邊隧道有哪些特點?
落地案例相關資料:
- 騰訊WeMake工業網際網路平臺的邊緣容器化實踐:打造更高效的工業網際網路
- 完爆!用邊緣容器,竟能秒級實現團隊七八人一週的工作量
- 基於邊緣容器技術的工業網際網路平臺建設
- 使用TKE Edge部署EdgeX Foundry
關於我們
更多關於雲原生的案例和知識,可關注同名【騰訊雲原生】公眾號~
福利:公眾號後臺回覆【手冊】,可獲得《騰訊雲原生路線圖手冊》&《騰訊雲原生最佳實踐》~
【騰訊雲原生】雲說新品、雲研新術、雲遊新活、雲賞資訊,掃碼關注同名公眾號,及時獲取更多幹貨!!