2018年,工信部启动了国家创新发展工程,建设工业大数据中心。中国移动在该项目中承担了边缘协同和数据采集相关功能的研发。
我们考虑的第一个解决方案是 EdgeX。EdgeX 有利于数据收集和管理,但在边缘云协作等方面仍然存在不足。它更像是边缘的自治架构,无法连接到云。我们确实有一些补救措施。例如,我们可以通过 V** 将 EdgeX 节点连接到中央云,但这种补救措施的可扩展性较差。
第二种解决方案是 K3s/K8s。K3s和K8s都不支持边云协同,K8s占用资源过多。虽然 K3s 可以用更少的资源运行,但它不支持设备管理。
然后我们尝试了 OpenNESS,这是一个通用框架。然而,它对我们来说太普遍了。我们需要为几乎所有我们需要的平台编写适配器,例如底层的 Kubernetes。开发工作量比较大,不支持设备管理。
我们曾经想使用OpenYurt,其功能类似于KubeEdge。然而,当时我们的项目已经进行了一半,我们决定不改变。这似乎是一个正确的决定,尤其是在我们现在发现 OpenYurt 不如 KubeEdge 成熟之后。
但是最后,我们还是决定使用 KubeEdge,因为它消耗更少的资源并提供边缘云协作和设备管理。
上图展示了国家工业互联网大数据中心的架构。核心是 KubeEdge,它管理设备和应用程序。我们将 KubeEdge 的 CloudCore 部署在云端的 Kubernetes 集群中。所有数据,包括管理数据,都存储在这些云集群中。KubeEdge 的 EdgeCore 部署在工业计算机或工业网关上,以在边缘运行容器化应用程序,包括用于设备管理和数据收集的应用程序。
在 EdgeCore 的深处,您可以看到 Mapper,它是设备管理和数据收集的标准。目前,Mapper 社区提供 Modbus 和蓝牙。例如,如果您想管理自己的相机,则可以使用 Mapper 对其进行编码。上一层,可以看到通过Java和Spring Cloud封装的管理服务。如果 KubeEdge 或 Kubernetes API 暴露给用户,用户可能会使用这些开放的 API 来执行一些可能对数据隔离及其 Kubernetes 集群造成灾难性影响的操作。这就是为什么需要封装。
我们还开发了一个工业应用程序市场,供个人开发者或供应商开发和发布基于 KubeEdge 的免费或付费 Mapper 应用程序。我们希望吸引更多 KubeEdge 用户,同时为 Mapper 开发人员带来实实在在的好处。
我们对 KubeEdge 进行了以下改进:
开始的时候,我们发现 KubeEdge 只支持蓝牙和 Modbus。这些协议在 KubeEdge CRD 中是固定的,无法修改。为了支持不同的工业协议(其中一些是专有的),我们需要添加一些自定义扩展。一种是扩展现有协议,例如 Modbus。不同的设备可能有一些额外的配置。在这种情况下,您可以使用新添加的CustomizedValue字段来自定义字段。另一种选择是使用CustomizedProtocol而不是社区协议来自定义您自己的协议。
工业实践有时与普通 IT 开发不同。通常,我们在定义实例之前定义模板。但是,在工业实践中,先定义实例,然后复制和修改实例中的内容是有意义的。例如,10 个相同类型的温度传感器连接到同一个工业总线。除了它们在 Modbus 上的偏移之外,它们具有相同的属性。在这种情况下,您只需要更改实例中的偏移量,我们通过将设备模型中的PropertyVisitor移动到DeviceInstance 来实现这一点。我们还使配置更加灵活。例如,您可以将设备设置为每小时报告一次温度数据,每天报告一次能耗数据。涉及的配置项,如将 CollectCycle,添加到PropertyVisitor,并将串口和 TCP 配置提取到公共配置中。
KubeEdge 向 Kuiper 提供清洗规则。第三方应用直接从边缘 MQTT 设备获取数据。
状态监控对于商用产品非常重要。KubeEdge 提供了一个名为 Cloud Stream 的通道。此通道可以与 MetricServer 或 Prometheus 一起使用。但是需要配置iptables来拦截流量,如果这样做,整个流量都会被拦截。
因此,我们开发了另一种解决方案。我们在边缘节点上运行一个 cron 作业容器,例如每 5 秒从边缘节点上的 NodeExporter 拉取数据,然后将其推送到 PushGateway,Prometheus 官方组件。PushGateway 部署在云端。这样,我们就可以使用云端来监控所有边缘节点。
Kubernetes 允许多租户共享。但是,在 KubeEdge 中,不同的设备不能部署在不同的命名空间下。我们需要标记设备并根据标签对其进行过滤。边缘工作节点也不能属于特定的命名空间。它属于租户,仅供租户使用。在这种情况下,节点需要自己封装上层服务。
通常,租户将其边缘节点连接到云中的 Kubernetes 集群。因此,集群需要公共 IP 地址,但您的项目可能没有足够的 IP 资源。例如,您有 200 个可用的公共 IP 地址,但您有 1,000 个租户。您将如何为租户集群分配 IP 地址?
IPv6 是最好的解决方案。KubeEdge 支持 IPv6,但我们还没有尝试过。
端口复用
KubeEdge 只使用了几个端口,最多 4 到 5 个。默认端口为 10003,一个公网 IP 地址可以被多个 KubeEdge 实例复用。
高可用性解决方案
KubeEdge 重用 Kubernetes 服务、部署和状态检查来确保服务高可用。
用户订阅 OPC-UA 映射器后,将下发到边缘网关,并在配置后与边缘的工业设备协同工作。例如:
OPC-UA 映射器收集温度数据。
边缘节点告警应用直接从边缘节点获取数据。
超过阈值会触发告警,设备被挂起。
KubeEdge 调整阈值。
此应用程序在交付到边缘后自主运行。AI 推理在边缘执行。云端与边缘结合,可以在云端训练模型,然后通过KubeEdge将模型推送到边缘。
KubeEdge 管理边缘节点上的视频监控应用程序配置。
视频监控应用程序在边缘节点上自主运行。
从摄像头收集视频流以进行 AI 推理。
检测安全头盔和工作服。
检测未经授权的访问。
Github:https://github.com/kubeedge/kubeedge
网站:https://kubeedge.io/en/