日前在 Austin 举办的 OpenStack 大会上介绍过基于 Kubernetes 和 Openstack 的开源物联网平台。我们来看看这两者的结合在物联网平台如何玩,先说说我们对物联网的解决方法和看法,再给大家展示两个案例。
视频: https://v.qq.com/iframe/player.html?vid=a0300sz5wvb&width=670&height=502.5&auto=0
物联网( IoT )是云计算领域的“下一个大事件”。物联网意味着所有的事情,它甚至比云计算服务更加具体。物联网以增加机器间通信为中心,它建立在数据采集传感器网络和连接到云计算服务执行器的基础上。
我们来看看如何使用开源项目,来扩展云服务方法进而创建通用的物联网平台,可以处理多个用户案例。我们定义了以下要求:
开源软件 整个平台基于已存在的开源解决方案,我们想要使用的平台包括: OpenStack , Kubernetes , Docker , OpenContrail 等。
HW 和独立供应商 没有一家供应商的定位是既包括软件又包括硬件的。物联网网关 CPU 不是 x86/64 架构就是 ARM 架构。我们不想被锁定到用昂贵专用设备的供应商。
可互相操作 物联网平台对多种使用情况来说都是普遍可用的。比如,物联网网关也可用在计算对象的路灯,就如同用在智能工厂或者工业 4.0 应用程序。因此,我们设计了以下高层次的架构,这个架构使用的是开源项目, OpenStack , Kubernetes , OpenContrail 和 Docker 。
传感器 任意用来阅读环境数据(温度,湿度,二氧化碳水平),对象,计数等等的传感器。
IQRF 网络 IQRF 是一个操作 sub - gigahertz ISM bands 的强大无线网格技术。能够很容易地跟传感器整合。
网关 在物联网网关,由 IQRF 协调员来处理从传感器传来的数据。这些可以是任意的 x86/64 或者 ARM 架构,这些基于 Docker , Kubernetes , OpenContrail vRouter 和 Debian ,从预构建镜像方面来运行系统。
网络 网关可通过任意网络连接( GSM / LTE / WiFi ),因为 SDN 在 Docker service 和数据中心之间创建了动态 L3VPN 。
数据中心 数据中心包括了 OpenStack 和 Kubernetes 控制面板。这两个编排解决方法都使用 OpenContrail 作为单个 SDN (软件定义网络)。这就可以从中心点管理整个平台。我们可以在本地远程开启任意 Docker 容器,然后创建动态连接到 OpenStack 上的 service 。 OpenStack 云容器数据存储和大数据进程 services 。
虚拟化/ API 访问 所有数据在网络端口已经被虚拟化,而且可以通过 REST API service 访问。
下面,让我们来看两个案例。
第一个案例是捷克共和国 Pisek 城市的 SmartCity 项目。 SmartCity 概念和架构将会部署超过 3000 个端点,大约 300 个物联网网关,这些网关以高可用模式运行在由 Kubernetes 驱动的容器中。解决方案的一部分是开放数据门户,数据 API 对提供信息的第三方公司来说可用:
-交通,路径,停车
-监测,管理,节能
-电子商务,市场,旅游信息
-环境分析
-生活方式,社会服务,社交网络
目标解决方案使用基于树莓派 2 的物联网网关作为物联网网关服务。网关的数据被存储在 Graphite ,由自定义的数据挖掘应用程序进行处理,结果已经被展示到基于 LeonardoCMS 的城市公民门户,这是一种允许混合复杂的可视化与任意内容的网页服务。这个开放数据门户使得数据能够通过可视化仪表或者 API 访问。
以下屏幕用特定时期内的车辆和行人展示了简单的从十字路口 Kollarova X Zizkova 输出。
为了证明我们的物联网平台在应用程序环境独立,我们从智能城市项目采取了一个物联网网关,然后和基于 IQRF 网状网络连接传感器(测量湿度,温度和二氧化碳水平)一起在 OpenStack 峰会上放入 Austin 会展中心。这说明了物联网网关管理和收集信息的能力,它可以从任意像 IQRF , Bluetooth , GPIO 之类的基于 Linux 平台通信技术获得信息。
我们用单个、主动的物联网网关在 3 楼会议部署了 20 个传感器和 20 个路由器,从整个 IQRF 网状网络接收数据并传送到专门的时间序列数据库,在这个例子里是 Graphite 。收集器是运行在由 Kubernetes 管理的 Docker 容器 MQQT - Java 桥。最有趣的就是运行在树莓派上的 Docker 容器,和运行在 Europe 数据中心的虚拟机。 OpenContrail SDN 提供动态网络覆盖 tunnels 。
以下图片展示了单个无线 IQRF 网状网络传感器和路由器发现。
IQRF 是一个在 sub - gigahertz 频带上操作的无线网状网络技术。它提供非常简单的整合,产品互操作性,最大值 240 hops 的健壮网状网络,范围多达数百米,以及超低功率操作。
以下截屏从 2 楼不同的房间展示了各个时间下的 CO2 值。历史图表展示的是周一的情况。
从收集的 Austin 数据来看,以下图覆盖了 services 。
所谓“物联网平台”,是用一般视角创建的,这个视角基于收集,管理和安全、动态处理成千上万的端点来集中管理。因此,架构会分成两个主要的部分:
1 数据中心
数据中心是整个物联网平台管理的重点。 OpenStack IaaS 云和虚拟机一起运行在 SDN 控制面板上。这些机器包括时间序列存储,处理数据集群,数据 API 代理服务,虚拟化网页服务等。
2 网关
物联网网关位于像路灯,工业设备,家用电器之类的目标地方。 SDN 提供传输层用云服务来连接远程物联网网关。网关可以是多平台的,有可能的话,可以将 x86/64 和 ARM 设备混合到一起。在单个网关为多个客户处理多个传感器平台,由于微服务分割( Docker 容器)和 Kubernetes 多租户支持。这个平台可以提供可伸缩的多租户空间。 以下图表展示了在网关方面的数据中心层和组件。这个章节的细节展示了更多信息。
细节图表
细节图表提供了整个物联网平台在本地的架构视图。左边展示的是数据中心,右边展示的是之前提到的网关。
就如同你在下面看到的那样, OpenStack 被用作云来处理所有的 control service ,以及大数据处理,和之前提到的虚拟单元。在网关的 Kubernetes 被用于 services 的微分段,这对多租户和不同传感器间的安全来说十分有必要。
OpenContrail 被用来连接这两边,并且提供 Kubernetes PODs 和 OpenStack 项目虚拟机间的网络分段。
像上文提到的, SDN 覆盖已经完成了分割。重要的是只有数据中心边界路由器和物联网网关之间的 IP 连接。最底层是网关 OS 和数据中心边界路由器之间的 VPN ,在这里 OpenContrail 可以直接在虚拟机( OpenStack 云)和容器(网关)间交流。这个方法允许从不同的传感器和执行器选择,给予他们特权,并且安全地连接处理应用程序内部的云。
数据中心包括以下 services :
管理 services HW 集群用所有的 control service 来运行虚拟机: OpenStack controller , OpenContrail controller ( SDN ), Kubernetes master , SaltMaster 。
OpenStack 云 OpenStack 项目为不同的虚拟机提供分段,虚拟机包括数据库( graphite , influxdb , openTSDB ),大数据处理( Hadoop ),数据虚拟化( Grafana , LeonardoCMS )。它运行在 KVM 超管理器上,并且为网络使用 OpenContrail neutron 插件。
边界路由器 OpenContrail 创建 iBGP , iBGP 与数据中心边界路由器对等,在边界路由器上,从 OpenStack 虚拟机和物联网网关上的 Kubernetes pods 可以传播动态网络路由。它创建了标准的 L3VPN , MPLSoverGRE 或者 MPLSoverUDP 。
远程网关包括的组件:
Kubernetes Minion Kubernetes minion 与 Kubernetes master 在数据中心进行交流,并且通过 kubelet 管理 PODs 。 Kubelet 使用 opencontrail 插件,这个插件可以用 vRouter 代理连接 Docker 容器。
Kubernetes PODs Kubernetes PODs 连接到 vRouter 的单个或者多个容器组。 PODs 由标签进行分类。这就可以开启不同的应用程序,就可以从像 IQRF , Bluetooth 或者 GPIO 这样的消息总线读取。
Docker 容器 Kubernetes PODs 中的 Docker 容器带来无须任何特殊装置就可以轻松操作系统的巨大好处。比如 IQRF 用特定版本来使用简单的 Java 应用程序,这个版本用容器可以在几分钟内进行交付,而且不会导致跟操作系统网关不匹配的状况。
下图提供了应用视图的模式。展示了虚拟机内部 OpenStack 云能够在任意地理位置 L2 或者 L3 上联系到 Docker 容器的状况,这得益于 OpenContrail 的覆盖。因此,应用程序开发者能够使用相同的工具,就如同他们在标准云中使用的那样。
比如,我们从环境传感器收集数据。传感器直接连接到容器,数据在容器中处理,之后发送到 Graphite 时间序列数据库。因为我们想要生动地实时显示数据,我们用读取 GraphiyeAPI 接口的 Leonardo CMS 来使用另一个虚拟机,并在网页上展现数据。根据这个,我们就可以在同一个由多个输入和输出的云中,依据相同的准则来创建不同的项目。
以上简述了如何基于 Kubernetes 和 OpenStack 来做物联网平台的原型部署,目前我们正在为整个 Smart City 处理细节上的设计。 今年,在 Austin 的 OpenStack 峰会,以及 London 的 KubeCon 上,我们得到了很多反馈。对于处理安全问题,大家觉得我们提供的方法思路是可行的,抵抗属性和性能关系到物联网平台,以及很多技术合作伙伴都想要加入我们,跟我们一起努力,然后拓展我们的物联网平台到他们的解决方案。
(如果需要转载,请联系我们,尊重知识产权人人有责:)