邊緣計算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,並且最好是一台干凈的終端。接下來我們就可以執行安裝了:

edgectl-install
 

直到:

edgectl-install-success
 

在執行腳本的時候,這里可能會存在以下問題(已反饋):

  • 操作文檔(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

創建成功后,訪問后如下所示(注意開放端口):

Demo界面
 

最后

在邊緣計算場景下,其實還有很多痛點,比如當一個集群橫跨多個地域,如何控制工作負載創建的節點位置?如何對各服務流量進行管控?同時,邊緣容器分布式節點狀態判定機制也是存在特殊性的,因為邊緣弱網絡會觸發 Kubernetes 驅逐機制,這可能會引起不符合預期的 Pod 驅逐動作。這些問題,大家可以參考官方幫助文檔,里面都有詳細的回答。

回歸正題,利用邊緣集群我們可以干很多事情,連接和管理本地、客戶所在地、各雲廠商的機房、世界的各個終端。如何利用它搭建一個管道,鍛煉技術,學習技術,我們下回分解。

如果在添加節點的過程中碰到問題,可以參考筆者之前的教程、博客和書籍《Docker+Kubernetes應用開發與快速上雲》來解決問題以及查看日志。

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM