當物聯網遇上雲原生:K8s向邊緣計算滲透中

華為雲開發者社群發表於2021-10-18
摘要:K8s正在向邊緣計算滲透,它為邊緣側的應用部署提供了便利性,在一定程度上轉變了邊緣應用與硬體之間的關係,將兩者的耦合度降低。

本文分享自華為雲社群《雲原生在物聯網中的應用【拜託了,物聯網!】》,作者: kaliarch。

前言

物聯網已經產生了數量驚人的資料,隨著5G網路的部署,這些資料將呈指數級增長。管理和使用這些資料是一個挑戰。

無論是從交通攝像頭、氣象感測器、電錶等會產生資訊,這些資訊與智慧城市環境中,其他攝像頭和感測器的資料相結合,在一箇中心位置處理起來可能會太多,尤其是當你在預期裝置會對事件做出反應時。

超大規模雲端計算環境中已被普遍使用的Kubernetes(簡稱K8s),帶入到物聯網邊緣計算場景中。新成立的Kubernetes物聯網邊緣工作組將採用執行容器的理念並擴充套件到邊緣,促進K8s在邊緣環境中的適用。

• 支援將工業物聯網IoT的連線裝置數量擴充套件到百萬量級,既可支援IP裝置以直連方式接入K8s雲平臺,又可支援非IP裝置通過物聯網閘道器接入。
• 利用邊緣節點,讓計算更貼近裝置側,以便減少延遲、降低頻寬需求和提高可靠性,滿足使用者實時、智慧、資料聚合和安全需求:
o 將流資料應用部署到邊緣節點,降低裝置和雲平臺之間通訊的頻寬需求。
o 部署無伺服器應用框架,使得邊緣側無需與雲端通訊,便可對某些緊急情況做出快速響應。
• 在混合雲和邊緣環境中提供通用控制平臺,以簡化管理和操作。

一 背景

image.png

1.1 KubeEdge簡介

KubeEdge 是一個開源的系統,可將本機容器化應用編排和管理擴充套件到邊緣端裝置。 它基於Kubernetes構建,為網路和應用程式提供核心基礎架構支援,並在雲端和邊緣端部署應用,同步後設資料。KubeEdge 還支援 MQTT 協議,允許開發人員編寫客戶邏輯,並在邊緣端啟用裝置通訊的資源約束。KubeEdge 包含雲端和邊緣端兩部分。

1.2 KubeEdge特點

邊緣計算

通過在邊緣端執行業務邏輯,可以在本地保護和處理大量資料。KubeEdge 減少了邊和雲之間的頻寬請求,加快響應速度,並保護客戶資料隱私。

簡化開發

開發人員可以編寫常規的基於 http 或 mqtt 的應用程式,容器化並在邊緣或雲端任何地方執行。

Kubernetes 原生支援

使用 KubeEdge 使用者可以在邊緣節點上編排應用、管理裝置並監控應用程式/裝置狀態,就如同在雲端操作 Kubernetes 叢集一樣。

豐富的應用程式

使用者可以輕鬆地將複雜的機器學習、影像識別、事件處理等高層應用程式部署到邊緣端。

二 KubeEdge簡介

2.1 KubeEdge架構

image.png

2.2 架構詳解

2.2.1 雲上部分

• CloudHub: CloudHub 是一個 Web Socket 服務端,負責監聽雲端的變化, 快取併傳送訊息到 EdgeHub。
• EdgeController: EdgeController 是一個擴充套件的 Kubernetes 控制器,管理邊緣節點和 Pods 的後設資料確保資料能夠傳遞到指定的邊緣節點。
• DeviceController: DeviceController 是一個擴充套件的 Kubernetes 控制器,管理邊緣裝置,確保裝置資訊、裝置狀態的雲邊同步。

2.2.2 邊緣部分

• EdgeHub: EdgeHub 是一個 Web Socket 客戶端,負責與邊緣計算的雲服務(例如 KubeEdge 架構圖中的 Edge Controller)互動,包括同步雲端資源更新、報告邊緣主機和裝置狀態變化到雲端等功能。
• Edged: Edged 是執行在邊緣節點的代理,用於管理容器化的應用程式。
• EventBus: EventBus 是一個與 MQTT 伺服器(mosquitto)互動的 MQTT 客戶端,為其他元件提供訂閱和釋出功能。
• ServiceBus: ServiceBus是一個執行在邊緣的HTTP客戶端,接受來自雲上服務的請求,與執行在邊緣端的HTTP伺服器互動,提供了雲上服務通過HTTP協議訪問邊緣端HTTP伺服器的能力。
• DeviceTwin: DeviceTwin 負責儲存裝置狀態並將裝置狀態同步到雲,它還為應用程式提供查詢介面。
• MetaManager: MetaManager 是訊息處理器,位於 Edged 和 Edgehub 之間,它負責向輕量級資料庫(SQLite)儲存/檢索後設資料。

三 實戰部署

3.1 keadm部署

注意事項:

• 目前支援keadmUbuntu 和 CentOS 作業系統。RaspberryPi 支援正在進行中。
• 需要超級使用者許可權(或 root 許可權)才能執行。

3.1.1 設定雲端(KubeEdge 主節點)

預設情況下10000,10002邊緣節點需要可以訪問 Cloudcore 中的埠和埠。

keadm init將安裝 cloudcore,生成證書並安裝 CRD。它還提供了一個可以設定特定版本的標誌。

重要說明: 1. kubeconfig 或 master 中至少一個必須正確配置,以便用於驗證 k8s 叢集的版本和其他資訊。1.請確保邊緣節點可以使用雲節點的本地IP連線雲節點,或者您需要使用--advertise-address標誌指定雲節點的公共IP 。1. --advertise-address(1.3版本後才有效)是雲端暴露的地址(會加入到CloudCore證書的SAN中),預設值為本地IP。

例子:

# keadm init --advertise-address="THE-EXPOSED-IP"(only work since 1.3 release)

輸出:

Kubernetes version verification passed, KubeEdge installation will start...
...
KubeEdge cloudcore is running, For logs visit:  /var/log/kubeedge/cloudcore.log

3.1.2 設定邊緣端(KubeEdge 工作節點)

從雲端獲取令牌
keadm gettoken在雲端執行將返回令牌,該令牌將在加入邊緣節點時使用。

# keadm gettoken
27a37ef16159f7d3be8fae95d588b79b3adaaf92727b72659eb89758c66ffda2.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTAyMTYwNzd9.JBj8LLYWXwbbvHKffJBpPd5CyxqapRQYDIXtFZErgYE

加入邊緣節點

keadm join將安裝 edgecore 和 mqtt。它還提供了一個可以設定特定版本的標誌。

例子:

# keadm join --cloudcore-ipport=192.168.20.50:10000 --token=27a37ef16159f7d3be8fae95d588b79b3adaaf92727b72659eb89758c66ffda2.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTAyMTYwNzd9.JBj8LLYWXwbbvHKffJBpPd5CyxqapRQYDIXtFZErgYE

重要說明: 1. --cloudcore-ipportflag 是強制性標誌。1. 如果要自動為邊緣節點申請證書,--token則需要。1.雲端和邊緣端使用的kubeEdge版本要一致。
輸出:

Host has mosquit+ already installed and running. Hence skipping the installation steps !!!
...
KubeEdge edgecore is running, For logs visit:  /var/log/kubeedge/edgecore.log

3.2 二進位制部署

注意事項:

需要超級使用者許可權(或 root 許可權)才能執行。

3.2.1 設定雲端(KubeEdge 主節點)

建立 CRD

kubectl apply -f https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/devices/devices_v1alpha2_device.yaml
kubectl apply -f https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/devices/devices_v1alpha2_devicemodel.yaml
kubectl apply -f https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/reliablesyncs/cluster_objectsync_v1alpha1.yaml
kubectl apply -f https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/reliablesyncs/objectsync_v1alpha1.yaml

準備配置檔案
# cloudcore --minconfig > cloudcore.yaml
詳情請參考雲配置。

執行
# cloudcore --config cloudcore.yaml

3.2.2 設定邊緣端(KubeEdge 工作節點)

3.2.2.1 準備配置檔案

生成配置檔案
# edgecore --minconfig > edgecore.yaml
在雲端獲取代幣值:

# kubectl get secret -nkubeedge tokensecret -o=jsonpath='{.data.tokendata}' | base64 -d

更新 edgecore 配置檔案中的令牌值:

# sed -i -e "s|token: .*|token: ${token}|g" edgecore.yaml

這token就是上面步驟得到的。

詳情請參考edge的配置。

3.2.2.2 執行

如果要在同一臺主機上執行 cloudcore 和 edgecore,請先執行以下命令:

# export CHECK_EDGECORE_ENVIRONMENT="false"

啟動邊緣核:

# edgecore --config edgecore.yaml
執行edgecore -h以獲取幫助資訊並根據需要新增選項。

四 反思

K8s正在向邊緣計算滲透,它為邊緣側的應用部署提供了便利性,在一定程度上轉變了邊緣應用與硬體之間的關係,將兩者的耦合度降低。通過KubeEdge,擴充“邊緣場景”,可幫助使用者加速實現雲邊協同,在海量邊、端裝置上完成大規模應用的統一交付、運維與管控。

據Gartner估計,到2025年,超過75%的企業生成資料可以在傳統資料中心和雲之外建立和處理,像Kubernetes這樣的編排系統前景光明,它已經被證明是完成這一任務的最佳工具。

參考資料

https://github.com/kubeedge/k...
https://www.cncf.io/blog/2020...

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章