本文詳細介紹了OpenStack奧斯丁峰會上主題演講所提及的開源IoT平臺。首先我們會介紹關于IoT的方法和愿景,隨后會提供簡要的技術概述并展示兩個使用案例。
物聯網(IoT)是云計算領域的“下一件大事”。領先的行業供應商都提供了自己的IoT解決方案,并將其視作自己的業務戰略。因此IoT這個詞已經被濫用成為描述不同供應商專有解決方案的一個新流行詞匯。“IoT”這個詞幾乎可以代表一切,甚至比“云計算服務”更加空泛。物聯網主要圍繞日益增加的計算機間通信,可通過用于收集數據傳感器的網絡和連接到云計算服務的執行程序處理各類信息。這個技術可以讓我們生活中的一切,從街邊路燈到港口都變得更加“智能”。
我們對IoT的看法與其他供應商有所差異。我們會通過相同的方法向客戶提供私有云解決方案,并使用現有的開源項目對云服務的實現方式進行擴展,借此打造通用IoT平臺,以應對不同用例的需求。為此我們定義了下列需求:
開源軟件 整個平臺必須基于現有的開源解決方案,并且絕對不能只由某一家供應商開發。我們希望使用現有的平臺:OpenStack、Kubernetes、Docker、OpenContrail等。
不依賴具體硬件和供應商 軟硬件方面不能存在供應商鎖定的情況。IoT網關CPU必須支持x86/64或ARM架構。我們不想因為昂貴的專有裝置而被迫只能使用某一供應商的產品。
**互操作性**IoT平臺必須是通用的,可以適合不同用例。舉例來說,如果某一IoT網關可用于統計街燈數量,那么也必須能通過相同的方式將其用于智能工廠或工業4.0應用程序中。
因此我們設計出涉及OpenStack、Kubernetes、OpenContrail和Docker開源項目的下列高層體系結構。
開源軟件
整個平臺必須基于現有的開源解決方案,并且絕對不能只由某一家供應商開發。我們希望使用現有的平臺:OpenStack、Kubernetes、Docker、OpenContrail等。
不依賴具體硬件和供應商
軟硬件方面不能存在供應商鎖定的情況。IoT網關CPU必須支持x86/64或ARM架構。我們不想因為昂貴的專有裝置而被迫只能使用某一供應商的產品。
互操作性
IoT平臺必須是通用的,可以適合不同用例。舉例來說,如果某一IoT網關可用于統計街燈數量,那么也必須能通過相同的方式將其用于智能工廠或工業4.0應用程序中。
下文技術概述一節將詳細介紹其中的技術細節。首先一起來看看我們構建解決方案原型的兩個用例。
智能城市原型
第一個用例是為捷克共和國一個名為皮斯克(Pisek)的小城市構建的智能城市項目。智能城市的理念和架構需要部署超過3000個端點,以及大約300個IoT網關,這些網關以高可用模式運行在Kubernetes驅動的容器中。該解決方案還包含開放數據門戶,并通過數據API為第三方公司提供了下列信息:
交通流量、路線、停車位監控和管理能源的使用以實現節能電子商務、營銷、旅游信息環境分析生活方式、社交服務、社交網絡該解決方案使用基于RaspberryPi 2的IoT網關。來自網關的數據存儲在Graphite中,通過自行開發的數據挖掘應用程序進行處理,將結果顯示在基于Leonardo CMS構建的市民門戶網站中。Leonardo CMS是一種Web服務,可以將復雜的可視化結果混合顯示在一起呈現任何內容。這個開放數據門戶可以通過可視化儀表盤或API提供數據訪問。
下圖展示了特定時間內,Kollarova和Zizkova兩條街道十字路口的機動車和行人通行情況。
若要詳細了解該項目,建議閱讀奧斯丁SuperUser雜志《更進一步,讓城市變得更智能》一文,或觀看KubeCon 2016演講。
OpenStack奧斯丁峰會上的智能會議系統
為了證明我們的IoT平臺真正不依賴某種應用程序環境,在OpenStack峰會過程中,我們將智能城市項目中使用的IoT網關(RaspberryPi 2)帶到了奧斯丁會議中心,通過基于IQRF的網狀網絡將其與傳感器連接在一起,借此測量濕度、溫度,以及二氧化碳濃度。這個演示證明了IoT網關可以對IQRF、藍牙、GPIO,以及任何其他基于Linux平臺的通信標準進行管理并收集數據。
我們在會議中心三層樓內部署了20個傳感器和20個路由器,通過一個IoT網關接收來自整個IQRF網狀網絡的數據,并將其中繼至一個專門的時序數據庫,本例中使用的數據庫是Graphite。數據收集器使用了Docker容器內運行,通過Kubernetes管理的MQQT-Java網橋。其中最有趣的地方是距離,運行Docker容器的Raspberry位于美國奧斯丁的會議中心內,而虛擬機運行在歐洲的數據中心。動態網絡覆蓋渠道由OpenContrail SDN提供。下文技術概述一節還將對該平臺進行進一步介紹。
下圖展示了傳感器和路由器發現過程中找到的一個無線IQRF網狀網絡。區域0 - 1覆蓋會議中心一樓,區域2 - 4覆蓋四樓。
IQRF是一種工作在亞GHz ISM波段的無線網狀網絡技術,可提供簡單易行的集成能力,良好的互操作性,最多支持240個躍點的健壯網狀網絡連接,工作距離可達數百米,能耗非常低。
下圖展示了會議中心二樓不同房間的二氧化碳實時濃度。歷史圖表顯示了自周一以來的數值。從中可以直觀了解到主題演講的開始時間和午飯時間。
奧斯丁這套平臺的數據收集方面,我們使用了下列服務架構。
技術概述
本節進一步介紹了這個IoT平臺的一些技術構思。這個IoT平臺以“通用”為愿景,旨在以安全的方式收集、管理和處理來自數千個端點的數據,并以動態的方式集中管理所有數據。
因此整個體系結構可以分為下列兩大主要部分:
數據中心
數據中心是整個IoT平臺的中心管理點。其中包含OpenStack IaaS云,以及伴隨云同時運行的虛擬機和SDN控制面板。這些計算機負責了時序存儲、數據處理群集、數據API網關訪問,以及可視化Web服務等任務。
網關
IoT網關可位于任何目標位置,例如街燈、工廠機械、家用電器中。SDN提供的傳輸層將遠程IoT網關與云服務連接在一起。網關可支持多平臺,甚至可能混合使用了x86/64和ARM設備。該技術可以通過一個網關為多個客戶承載多種傳感器平臺,這一特性是通過微服務分隔(Docker容器)和Kubernetes對多租戶的支持實現的。整個平臺可以提供可伸縮的多租戶環境,無論多遠距離的應用程序和傳感器都可位于同一個網絡中。
下列架構圖展示了數據中心層和網關端的相關組件。下文架構詳情一節提供了進一步介紹。
架構詳情
架構圖展示了整個IoT平臺在體系結構方面的邏輯視圖。左側是數據中心,右側是上文提到的網關。
從下圖可以看到,這里使用OpenStack作為承載所有控制服務的云,同時所有大數據處理和前端可視化任務也是在這里進行的。網關使用Kubernetes對服務進行微分隔,為了實現多租戶功能并確保不同傳感器的安全,這一步是必須的。同時該平臺還使用OpenContrail將兩端連接在一起,并為Kubernetes POD和OpenStack Project虛擬機提供網絡分隔。
上文曾提到過,分隔是通過SDN覆蓋實現的。這里的重點在于數據中心邊緣路由器和IoT網關之間只存在IP連接。網關操作系統和數據中心邊緣路由器之間的VPN連接可以看作該平臺的最底層,該層之上是SDN,在這里可以通過OpenContrail實現虛擬機(OpenStack云)和容器(網關)之間的直接通信。這種方法使得用戶可以自由選擇不同類型的傳感器和執行程序,為其設置權限,并用安全的方式將其與云中負責任務處理的應用程序連接在一起。
數據中心包含下列服務:
管理服務
硬件群集中運行的虛擬機承載了所有控制服務:OpenStack控制器、OpenContrail控制器(SDN)、Kubernetes主機、Salt主機。
OpenStack云
OpenStack項目為數據庫(Graphite、Influxdb、openTSDB)、大數據處理(Hadoop),以及數據可視化(Grafana、LeonardoCMS)所涉及的不同虛擬機服務提供了分隔和劃分。這個云運行在KVM hypervisor之上,通過OpenContrail的Neutron插件實現網絡連接。
邊緣路由器
OpenContrail會與數據中心邊緣路由器創建iBGP對端,這樣便可以將OpenStack虛擬機和Kubernetes POD的動態網絡路由傳播至IoT網關。該設備可以MPLSoverGRE或MPLSoverUDP方式創建標準的L3VPN。
遠程網關包含下列組件:
Kubernetes Minion
Kubernetes minion負責與數據中心內的Kubernetes主機通信,并負責管理Kubeletand POD。Kubelet使用了Opencontrail插件,借此將Docker容器與vRouter代理連接在一起。
Kubernetes POD
Kubernetes POD是連接到vRouter的一個或多個Docker容器。POD可按照標簽進行分隔,這樣即可啟動不同應用程序,從不同消息總線以IQRF、藍牙,或GPIO方式讀取數據。
Docker容器
Kubernetes POD中的Docker容器為整個平臺提供了極大的收益,可在無需特別安裝的情況下支持任何類型的操作系統。例如,IQRF使用了某一版本的簡單Java應用程序,可通過容器在幾分鐘內交付,并且不會與網關本身的操作系統產生不匹配的情況。
應用程序視圖
下列架構圖詳細介紹了應用程序視圖。從圖中可知,借助OpenContrail覆蓋的幫助,OpenStack云內部的虛擬機可以通過L2或L3私有網絡聯系位于任何地理位置的Docker容器。因此應用程序開發者可以使用標準云平臺中用過的同一套工具。他們可以通過HEAT部署虛擬機應用程序控制器,隨后通過簡單的Yaml文件在遠程網關上的容器中部署Kubernetes服務。
以通過環境傳感器收集數據的做法為例:傳感器直接連接至容器,數據在Docker容器中處理后發送至Graphite時序數據庫。因為我們希望以圖形化方式實時呈現數據,因此使用了另一個虛擬機,通過Leonardo CMS借助Graphite API讀取數據,并將其顯示在網站上。據此我們可以通過同一個云平臺,按照相同的原則創建不同項目,并使用多種輸入和輸出位置。
結論
我們希望對這個IoT平臺的愿景和已經部署的原型進行一個簡要的介紹。目前我們正在完成整個智慧城市解決方案的細節設計工作。
今年在奧斯丁舉行的OpenStack峰會和倫敦舉行的KubeCon上對該方案進行介紹后,我們收到了來自社區成員的大量反饋。在IoT平臺的安全性、彈性,以及性能方面,我們的構想得到了大家的認可,很多技術合作伙伴希望通過合作對我們的IoT平臺進行擴展,借此構建他們自己的解決方案。我們現在正在著手有關工業4.0的構想,打算通過開源項目創建第一個智能工廠。
作者:Jakub Pavlik
閱讀英文原文:OpenStack and Kubernetes join forces for an Internet of Things platform