type
status
date
slug
summary
tags
category
icon
password
Language
Eclipse Hono提供了远程服务接口,用于将大量IoT设备连接到后端并以统一的方式与它们进行交互,而无需考虑设备通信协议。它支持开箱即用,并可以通过HTTP,MQTT和AMQP之类的常见物联网协议进行通信间的设备。它还为重要的IoT通信模式提供API:设备可以使用遥测和事件消息来报告传感器读数;应用程序可以使用命令和控制来触发设备上的操作。
设备连接是物联网开发人员需要解决的最常见问题之一。拥有一个基于标准化协议的开源解决方案来解决反复出现的连接问题是一个非常有用的工具。认识EclipseHono,这是一个基于云的物联网连接平台,它为设备连接提供远程接口,并提供与设备统一交互的机制,无论通信协议如何。
虽然可扩展消息传递是设备连接的关键先决条件之一,但EclipseHono的目标不是在这个领域提供自己的解决方案,而是与其他基于云的消息传递平台一起工作。其中一个项目叫做EnMasse(https://github.com/EnMasseProject/enmasse)它为在云中部署可扩展的消息基础设施提供了一个开源解决方案。Hono和EnMasse协同工作,以提供真正可扩展的设备连接。
Eclipse Hono 是一个由 Eclipse Foundation 维护的开源项目,旨在为物联网设备提供连接性。它提供了一个统一的 API,用于连接物联网设备到后端服务和应用程序,使得开发人员可以更轻松地开发连接到物联网网络的应用程序。Eclipse Hono 还提供了一些实用程序,如设备注册、设备管理和消息路由,帮助开发人员更快地构建和部署物联网应用程序。
主要特点
- 可伸缩性
- Eclipse Hono 是一组打包为 Docker 容器的微服务。每个协议适配器都可以线性扩展,并使用 Kubernetes 或任何其他容器编排系统进行部署。
- 多租户
- Eclipse Hono 是多租户的,因此单个 Eclipse Hono 系统可以同时托管多个 IoT 应用程序。这非常适合构建物联网云平台的任何组织,该平台将托管不同类型的物联网应用程序和连接的设备。
- 设备身份验证
- Eclipse Hono 支持各种设备身份验证协议,包括用户名/密码和客户端证书。CoAP 协议适配器还支持在 DTLS 握手期间基于预共享密钥进行身份验证。
- 设备管理集成
- Eclipse Hono 提供了一组 API 来与不同的设备管理系统集成。这样就可以使用现有的记录系统进行设备标识和凭据管理,或者为特定需求构建一个新的记录系统。
- 监视和跟踪
- Eclipse Hono 通过报告指标和跟踪通过系统对单个消息的处理,提供对各个服务组件及其彼此交互的见解,从而为运营团队提供支持。并在仪表板中可视化,例如使用Grafana。
- 遥测消息
- Eclipse Hono 优化了遥测数据的吞吐量。IoT 业务应用程序和其他服务使用遥测 API 接收设备发布的数据。遥测数据可以以最多一次(默认)或至少一次传递的服务级别发送。
- 事件消息
- Eclipse Hono 支持向 IoT 业务应用程序发送事件消息的设备。事件消息可用于指示已超出阈值。如果连接不可靠,Hono 将保留事件消息,以便暂时失去与 Hono 连接的业务应用程序可以在重新建立连接后检索事件。事件消息始终至少发送一次服务级别。
- 命令和控制
- Eclipse Hono 允许 IoT 业务应用程序向特定设备发送命令以触发操作,例如更新配置属性、触发固件更新或切换执行器的状态。Hono 支持两种命令模式:
- 不期望来自设备的响应的 One Way 命令。
- 请求/响应命令,这些命令期望以阻塞或异步方式从设备获得响应。
安装Docker
安装Minikube
Minikube是在本地系统上创建一个虚拟机,并在其中提供一个小型的单节点群集,而不是提供一个成熟的群集。由于Minikube将操作系统放在VM中,因此它可以在所有主要操作系统上运行,包括Windows和macOS。
Linux安装Minikube
- 启动集群
- 与群集交互
Windows安装Minikube
使用PowerShell,请使用以下命令:
添加minikube。exe二进制文件到您的PATH。确保以管理员身份运行PowerShell。
如果您使用终端(如powershell)进行安装,请在运行minikube之前关闭终端并重新打开
启动Minikube
minikube start
- 在你DockerDesktop中可以看到minikube的containers
Minikube Dashboard
该命令创建了一个代理,这意味着一旦我们通过按CTRL+C结束该命令,将无法再访问Dashboard。不过,如果我们查看名称空间kubernetes仪表板,我们会看到服务仍在创建
- 访问dashboard
安装Helm
- 解压到一个目录
- 配置环境变量
- 测试是否安装成功
运行Hono
运行步骤
- 1.运行Hono之前 , 需要创建一个 namespace
kubectl create namespace hono
- 2.helm 添加
eclipse-iot
chart仓库 helm repo add eclipse-iot https://eclipse.org/packages/charts
- 3.在启动服务之前,需要先执行
minikube tunnel
不然外部无法访问
- 4.使用helm安装hono
helm install eclipse-hono eclipse-iot/hono -n hono --wait
- 注意 : 最后报超时失败是因为一开始有些pod没有准备好 , 其实这里是成功的
从Dashboard中查看
一共有8个Pod分别为:
- eclipse-hono-adapter-amqp
- eclipse-hono-adapter-http
- eclipse-hono-adapter-mqtt
- eclipse-hono-kafka
- eclipse-hono-service-auth
- eclipse-hono-service-command-router
- eclipse-hono-service-device-registry
- eclipse-hono-zookeeper
或者使用kubectl get service -n hono
来验证安装
至此 Hono运行完毕 , 保证Hono一直运行需要有两个终端不能关闭
- minikube dashboard
- minikube tunnel
报错记录
- 启动minikube报错1
说不应用 "root" 用户启动 如果 minikube 无法启动,请参阅驱动程序页面以获取设置兼容容器或虚拟机管理器的帮助。
- 启动minikube报错2
timed out waiting for the condition , This error is likely caused by: The kubelet is not running可能原因minikube start 的命令里未使用 --image-mirror-country=‘cn’,导致下载启动镜像不成功。 minikube start 的命令里未使用 --kubernetes-version 指定版本,kubernetes最新版兼容性有问题,所以得使用低版本的kubernetes,推荐使用–kubernetes-version=v1.23.8解决方案minikube start --image-mirror-country='cn' --kubernetes-version=v1.23.8
- 启动minikube报错3
Enabling 'default-storageclass' returned an error: running callbacks: [Error making standard the default storage class: Error listing StorageClasses: Get "https://192.168.49.2:8443/apis/storage.k8s.io/v1/s torageclasses": dial tcp 192.168.49.2:8443: i/o timeout]sudo apt --fix-broken install sudo apt-get update sudo apt-get upgradesudo apt install -y conntrack
- 启动minikube报错4
从K8S 1.24开始,dockershim已经从kubelet中移除,但因为历史问题Docker却不支持K8S主推的CRI(容器运行时接口)标准,所以Docker不能再作为K8S的容器运行时了,即从K8S 1.24开始不再使用Docker了。但是如果想继续使用Docker的话,可以在kubelet和Docker之间加上一个中间层cri-docker。解决办法
下载
cri-dockerd
二进制文件
项目地址:https://github.com/Mirantis/cri-dockerd下载 cri-dockerd-0.2.3.amd64.tgz
解压
tar -xvf cri-dockerd-0.2.3.amd64.tgz
配置启动文件
创建cri-docker.service配置文件
vi /lib/systemd/system/cri-docker.service
创建cri-docker.socket配置文件
vi /lib/systemd/system/cri-docker.socket
启动cri-docker
- 启动minikube报错5
需要安装crictl,我们可以参考官方安装步骤:
- 启动Minikube报错6
解决方案 :minikube start --registry-mirror=https://registry.docker-cn.com --image-mirror-country cn --kubernetes-version=v1.23.3
- 作者:何以问
- 链接:https://heyiwen.com/article/hono-1
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。