1. 程式人生 > >邊緣計算k8s叢集之SuperEdge

邊緣計算k8s叢集之SuperEdge

什麼是邊緣計算?

邊緣計算,是指在靠近物或資料來源頭的一側,採用網路、計算、儲存、應用核心能力為一體的開放平臺,就近提供最近端服務。其應用程式在邊緣側發起,產生更快的網路服務響應,滿足行業在實時業務、應用智慧、安全與隱私保護等方面的基本需求。邊緣計算處於物理實體和工業連線之間,或處於物理實體的頂端。而云端計算,仍然可以訪問邊緣計算的歷史資料。

邊緣計算在具有低時延、高頻寬、高可靠、海量連線、 異構匯聚和本地安全隱私保護等特點的應用場景,如智慧交通、智慧城市、智慧工廠和智慧家居等行業或領域,存在非常突出的優勢。比如在自動駕駛領域,邊緣計算是實現自動駕駛的關鍵。智慧汽車本質上可以看作是一臺車輪上的大型高功率計算機,其通過多個感測器收集資料。為了使這些車輛安全可靠地執行,這些感測器需要立即響應周圍環境,處理速度的任何滯後都可能是致命的。同時邊緣計算將更多的資料計算和儲存從“核心”下沉到“邊緣”,部署於接近資料來源的地方,一些資料不必再經過網路到達雲端處理,從而降低時延和網路負荷,也提升了資料安全性和隱私性。

什麼是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
  • 請確保需新增節點已安裝 wgetsystemctl 及 iptable

    Centos 7參考安裝指令碼如下所示(自帶systemctl):

    #安裝wget
    yum -y install wget
    #安裝iptables
    yum install -y iptables
    #安裝iptables-services
    yum install iptables-services
  • 節點網路需具備主動訪問公網能力。

準備好邊緣節點了之後,筆者推薦大家使用指令碼來新增節點,如下圖所示:

 

點選【下一步】,就可以獲得一段指令碼:

 

 

我們可以在自己的機器上開始操作了。在開始之前,我們需要確保該節點已安裝 wgetsystemctl 及 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應用開發與快速上雲》來解決問題以及檢視日誌。

 

叢集故障處理之處理思路以及聽診三板斧(三十三