什么是邊緣計算?
邊緣計算,是指在靠近物或數據源頭的一側,采用網絡、計算、存儲、應用核心能力為一體的開放平台,就近提供最近端服務。其應用程序在邊緣側發起,產生更快的網絡服務響應,滿足行業在實時業務、應用智能、安全與隱私保護等方面的基本需求。邊緣計算處於物理實體和工業連接之間,或處於物理實體的頂端。而雲端計算,仍然可以訪問邊緣計算的歷史數據。
邊緣計算在具有低時延、高帶寬、高可靠、海量連接、 異構匯聚和本地安全隱私保護等特點的應用場景,如智能交通、智慧城市、智慧工廠和智能家居等行業或領域,存在非常突出的優勢。比如在自動駕駛領域,邊緣計算是實現自動駕駛的關鍵。智能汽車本質上可以看作是一台車輪上的大型高功率計算機,其通過多個傳感器收集數據。為了使這些車輛安全可靠地運行,這些傳感器需要立即響應周圍環境,處理速度的任何滯后都可能是致命的。同時邊緣計算將更多的數據計算和存儲從“核心”下沉到“邊緣”,部署於接近數據源的地方,一些數據不必再經過網絡到達雲端處理,從而降低時延和網絡負荷,也提升了數據安全性和隱私性。
什么是SuperEdge?
SuperEdge是Kubernetes原生的開源的邊緣容器方案,它將Kubernetes強大的容器管理能力擴展到邊緣計算場景中,針對邊緣計算場景中常見的技術挑戰提供了解決方案,如:單集群節點跨地域、雲邊網絡不可靠、邊緣節點位於NAT網絡等。這些能力可以讓應用很容易地部署到邊緣計算節點上,並且可靠地運行。
項目說明
項目地址:https://github.com/superedge/superedge
SuperEdge可以幫助您很方便地把分布在各處的計算資源放到一個Kubernetes集群中管理,包括但不限於:邊緣雲計算資源、私有雲資源、現場設備,打造屬於您的邊緣PaaS平台。
SuperEdge支持所有Kubernetes資源類型、API接口、使用方式、運維工具,無額外的學習成本。也兼容其他雲原生項目,如:Promethues,使用者可以結合其他所需的雲原生項目一起使用。
SuperEdge項目由以下公司共同發起:騰訊、Intel、VMware、虎牙直播、寒武紀、首都在線和美團。
特點
SuperEdge具有如下特性:
- Kubernetes 原生:SuperEdge 以無侵入的方式將 Kubernetes 強大的容器編排、調度能力拓展到邊緣端,其原生支持 Kubernetes,完全兼容 Kubernetes 所有 API 及資源,無額外學習成本
- 邊緣自治:SuperEdge 提供 L3 級邊緣自治能力,當邊緣節點與雲端網絡連接不穩定或處於離線狀態時,邊緣節點可以自主工作,化解了網絡不可靠所帶來的不利影響
- 分布式節點健康監測:SuperEdge 是業內首個提供邊緣側健康監測能力的開源容器管理系統。SuperEdge 能在邊緣側持續守護進程,並收集節點的故障信息,實現更加快速和精准的問題發現與報告。此外,其分布式的設計還可以實現多區域、多范圍的監測和管理
- 內置邊緣編排能力:SuperEdge 能夠自動部署多區域的微服務,方便管理運行於多個地區的微服務。同時,網格內閉環服務可以有效減少運行負載,提高系統的容錯能力和可用性
- 內網穿透:SuperEdge 能夠保證 Kubernetes 節點在有無公共網絡的情況下都可以連續運行和維護,並且同時支持傳輸控制協議(TCP)、超文本傳輸協議(HTTP)和超文本傳輸安全協議(HTTPS)
體系架構

使用ECK免費管理自己的邊緣節點
邊緣容器服務(Edge Cloud Kubernetes Engine,簡稱 ECK)是騰訊雲容器服務基於SuperEdge推出的用於從中心雲管理邊緣雲資源的容器系統。邊緣容器服務完全兼容原生 Kubernetes、支持在同一個集群中管理位於多個機房的節點、一鍵將應用下發到所有邊緣節點,並且具備邊緣自治和分布式健康檢查能力。
優勢
簡而言之,言而總之,最大的優勢就是開箱即用,免費托管。不過目前僅支持創建一個集群。
ECK基於SuperEdge打造,使用ECK和容器服務托管集群一樣,不會收取托管的 Master、Etcd 等管理方面資源的費用。
計算節點由我們自己掌握和提供,邊緣容器服務不收取額外費用。
敞開來講,他有如下優勢:
- 原生支持
邊緣容器服務緊跟社區,支持最新的 Kubernetes 版本及原生的 Kubernetes 集群管理方式,開箱即用。
- 跨機房可用
邊緣容器服務是一種 Master 組件托管在雲端,worker 節點可位於任意地點的 Kubernetes 服務,用戶無須提供 Master 組件所需資源。
- 安全可靠
邊緣容器服務支持內外網證書分離,節點權限最小化控制來最大限度避免集群訪問控制權限泄露問題。雲邊通信使用 TLS 加密,防止系統管理數據泄露或被篡改。
- 系統容災
邊緣容器服務針對雲邊通信網絡場景提供了可靠的邊緣自治能力,並且具備分布式集群健康檢查能力,可更准確地判定 pod 遷移時機。
- 系統運維便利
借助於騰訊多年積累的隧道技術,即使邊緣設備不具備公網地址,管理員也可以從雲端直接登錄運行在邊緣節點上的容器。
- 多雲管理
邊緣容器服務不限定計算資源。例如,公有雲、私有雲、騰訊雲或其他雲計算資源。
創建邊緣集群
集群的創建可以參考:https://cloud.tencent.com/document/product/457/42889

值得注意的是,需開啟外網訪問。
添加節點
集群創建完成后,我們就可以添加邊緣節點了。這里可以添加本地的終端,也可以添加其他雲的主機,相關條件如下:
-
節點處理器:支持 x86_64、ARM、ARM64。
-
支持的節點操作系統如下:
- Ubuntu 18.04/16.04
- CentOS 7.6/7.5/7.4
- Tencent Linux Release 2.4/2.2 (Final)
- SUSE Linux Enterprise Server 12 SP3
- Debian 9.0
-
請確保需添加節點已安裝
wget
、systemctl
及iptable
。Centos 7參考安裝腳本如下所示(自帶systemctl):
#安裝wget yum -y install wget #安裝iptables yum install -y iptables #安裝iptables-services yum install iptables-services
-
節點網絡需具備主動訪問公網能力。
准備好邊緣節點了之后,筆者推薦大家使用腳本來添加節點,如下圖所示:

點擊【下一步】,就可以獲得一段腳本:

我們可以在自己的機器上開始操作了。在開始之前,我們需要確保該節點已安裝 wget
、systemctl
及 iptable
,並且最好是一台干凈的終端。接下來我們就可以執行安裝了:

直到:

在執行腳本的時候,這里可能會存在以下問題(已反饋):
- 操作文檔(https://cloud.tencent.com/document/product/457/42890)和實際操作對不上,需要將上面的edgectl腳本打開查看相關邏輯進行操作:
- 其支持Install、check、clear等命令,這里我們需要使用install命令進行安裝
- install命令有兩個參數:
- -n:節點名稱,在集群內必須是唯一的,是必須的
- -i:節點內網通信使用的網卡,可不填
- 執行成功后,會輸出上圖中的“success-message”的內容,如果執行失敗,控制台不會返回任何內容,需要查看上圖中的日志文件。
- 提示執行成功后,可能會在集群中無法看到自己的節點,目前已確定是執行腳本對kubelet狀態判斷邏輯有問題,在大家看到這篇教程時,應該已經修復了。
使用Kubectl管理邊緣集群
在前面的教程我們已經詳細講述過相關的教程了,這里就不贅述了。Kubectl的安裝和集群連接請參考以下文檔:
https://cloud.tencent.com/document/product/457/42894
添加工作負載
邊緣集群搭建好了,我們先來運行一個Demo:
- 部署一個dotnet-samples demo程序
- 創建Service,開放端口30500(注意配置邊緣節點的防火牆)
Yaml如下所示:
apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: "1" generation: 1 labels: k8s-app: dotnet-samples qcloud-app: dotnet-samples name: dotnet-samples namespace: default spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: k8s-app: dotnet-samples qcloud-app: dotnet-samples strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 0 type: RollingUpdate template: metadata: annotations: edge.tke.cloud.tencent.com/cpu: "1" edge.tke.cloud.tencent.com/mem: 2Gi creationTimestamp: null labels: k8s-app: dotnet-samples qcloud-app: dotnet-samples spec: containers: - image: mcr.microsoft.com/dotnet/samples:aspnetapp imagePullPolicy: IfNotPresent name: dotnet-samples resources: limits: cpu: 500m memory: 1Gi requests: cpu: 250m memory: 256Mi securityContext: privileged: false terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst imagePullSecrets: - name: qcloudregistrykey restartPolicy: Always schedulerName: default-scheduler terminationGracePeriodSeconds: 30 --- apiVersion: v1 kind: Service metadata: name: dotnet-samples namespace: default spec: externalTrafficPolicy: Cluster ports: - name: tcp-80-80 nodePort: 30500 port: 80 protocol: TCP targetPort: 80 selector: k8s-app: dotnet-samples qcloud-app: dotnet-samples sessionAffinity: None type: NodePort
創建成功后,訪問后如下所示(注意開放端口):

最后
在邊緣計算場景下,其實還有很多痛點,比如當一個集群橫跨多個地域,如何控制工作負載創建的節點位置?如何對各服務流量進行管控?同時,邊緣容器分布式節點狀態判定機制也是存在特殊性的,因為邊緣弱網絡會觸發 Kubernetes 驅逐機制,這可能會引起不符合預期的 Pod 驅逐動作。這些問題,大家可以參考官方幫助文檔,里面都有詳細的回答。
回歸正題,利用邊緣集群我們可以干很多事情,連接和管理本地、客戶所在地、各雲廠商的機房、世界的各個終端。如何利用它搭建一個管道,鍛煉技術,學習技術,我們下回分解。
如果在添加節點的過程中碰到問題,可以參考筆者之前的教程、博客和書籍《Docker+Kubernetes應用開發與快速上雲》來解決問題以及查看日志。