在剛開始接觸Kubernetes以及KubeEdge兩套開源軟體時,不太了解背後代表的意義是甚麼,基本上就是按照安裝步驟裝起來,看一下它們有甚麼功能,像是滾動更新、負載平衡、自我修復等等,接著去看別人怎麼用、開始改YAML...,一切都是那麼的駕輕就熟,接到一套新的軟體,開始想辦法讓它"動"起來,從各個角度去"挖掘"它能做出些甚麼功能;但有一天我開始感到困惑,會用這些功能當然很重要,但是這些功能可以怎麼用呢?甚至我在想,好像也沒有真正去思考過為甚麼突然冒出這兩套軟體。
直到後來,接觸久後看多一點其他人的分享,包含部落格文章、社群演講、和實驗室的學長們討論,從不同的觀點、不同角度去看這兩套軟體的意義與價值,更深入的去了解它們。
相比於業界的專家們我的見解肯定是不足甚至有誤解的,但我想希望透過這次的分享,讓自己試著去解釋那些過程,用自己的話去描述,也趁這個機會將自己了解到的東西做一次整理,如果有錯誤或有問題的地方也歡迎大家再跟我討論。
這個系列文章想和大家分享我學習Kubeedge的經驗,通過一些測試討論他和kubernetes有甚麼差別與限制,最後我會分享自己用KubeEdge做的一個小專題。
在開始這個系列文章之前,我們先來談談Kubernetes、KubeEdge的重要性。他們與雲端有甚麼關係,跟物聯網應用的關聯又是甚麼,接下來開始後面的介紹。
使用者經由網路的方式連線,快速取得共享的運算資源。在取得運算資源的同時能達到動態配置資源的功能,動態的分配用戶所需資源,並且監控、管理叢集的軟硬體資源。主要在於強調使用者能夠自己透過簡單的方式即時取得所需的運算資源。
在物聯網應用的發展下,數以萬計的設備產生了大量資料,如果全部傳回雲端進行運算會對伺服器造成極大的負擔,且會受到網路延遲影響,無法達到即時性的要求。因此需要在邊緣端進行運算。相比於雲端運算屬於集中式的運算,邊緣端屬於分散式的運算,運算環境分佈在不同場域中。
雲邊協同則提出一個新的方式,一個雲端與邊緣端的互動方式。當我們需要作更深入的數據分析時,需要將各個邊緣節點的數據收集後傳回雲端,當然如前面所提到大量的即時數據處理將在邊緣端作運算,再將處理後的數據傳回雲端;雲端也可以將新的模型更新到邊緣端作應用,更進一步定義雲端與邊緣端之間的關係,延伸出更多的功能應用。
這裡我先對Kubernetes、Kubeedge與彼此之間的關係作初步的介紹,後續的文章會再更深入的說明。
這個部份以微服務的方式作為切入點,說明Kubernetes在其中扮演甚麼角色。首先先談談微服務架構。將一個完整的服務拆成一個個微服務,各自提供不同種類的功能,透過API的方式串接不同個微服務,讓不同微服務之間透過調用API的方式達到溝通的目的,構築出一個整體的服務。
這麼做有幾項優點,例如微服務間的低耦合性。不同微服務可以透過不同的程式語言實現,只須符合預先定義好的API便可維持元件間的溝通不受影響,意味著可以單獨對微服務進行升級、擴充。為了加快微服務佈署,我們可以以容器(Container)的方式運行微服務。
Kubernetes是一個容器化應用管理調度平台,可以管理集群資源,管理佈署微服務時需要使用的實體、虛擬資源(如資料儲存、網路功能...),並且配合微服務的需求制訂出不同種類的資源類型用以管理微服務。
KubeEdge可以將對容器化管理的支持,從雲端延伸到邊緣端,也就是可以從雲端的主節點對邊緣節點進行跨網域的佈署。除此之外KubeEdge提供了原生的Kubernetes支持,可以將kubeedge視為kubernetes的一種延伸型態。透過kubernetes的操作指令,便可以將命令傳送到邊緣端去執行。因此KubeEdge就是雲邊協同的一種實現方案,建立起雲端與邊緣端的聯繫通道。
在這個系列接下來預計會講到幾個主題: