接续上一篇,进行服务创建和发布。
Azure上创建IOT Hub服务
1. 登录到Azure的管理portal,选择新建,物联网,创建IOT Hub:
2. 创建完成后,选择IOT edge,新建一个IOT Edge的设备:
3. 完成后,点击设备,获取设备ID,设备密钥,连接字符串等等信息:
边界设备部署
1. 实际上任何可以安装和运行docker的设备都可以作为边界设备来管理,在这个测试案例中,我们选择在Azure上部署一台Ubuntu 1604的虚拟机作为边界设备进行管理,创建过程和harbor服务器一样,不再赘述。
2. 登录到IOT Edge设备,安装docker环境,安装pip,然后安装IOT Edge运行时:
sudo apt-get install python-pip
sudo pip install --upgrade pip
sudo pip install -U azure-iot-edge-runtime-ctl
3. 接下来我们将设备注册并连接到IOT Hub,需要用到之前创建设备时连接字符串:
sudo iotedgectl setup --connection-string "HostName=myiothubdemo.azure-devices.cn;DeviceId=myiotedge;SharedAccessKey=p45q791E7KAaompZ5+HoyxAD6vfmNJMeR9OgznerWaI=" --nopass
启动IOT Edge的运行时,本质上是一个docker的容器,可以使用docker ps来查看状态:
sudo iotedgectl start
4. 用docker登录到Harbor容器注册表,需要在你的edge虚拟机上安装证书,然后使用docker login:
sudo mkdir -p /etc/docker/certs.d/stevenrepo.chinanorth.cloudapp.chinacloudapi.cn/
sudo cp ca.crt /etc/docker/certs.d/stevenrepo.chinanorth.cloudapp.chinacloudapi.cn/
docker login stevenrepo.chinanorth.cloudapp.chinacloudapi.cn
5. 添加注册表凭据到IOT Edge边缘设备,注册表服务器就是harbor服务器:
sudo iotedgectl login --address stevenrepo.chinanorth.cloudapp.chinacloudapi.cn --username admin ---password PASSWORD
构建并发布你的IOT Edge端应用
我们来开发IOT Edge端应用基本的流程是:
本地开发构建edge端应用
使用Dockerfile打包成docker image
使用Docker tag命令标记你的image
推送image到你的私有容器注册表
通过IOT Hub在你的边界设备上部署应用
程序开发和使用Dockerfile打包的部分略去,以后有时间再讨论,本例通过在开发机上pull down演示的镜像microsoft/azureiotedge-simulated-temperature-sensor:1.0-preview并将其推送到harbor私有容器注册表中,然后部署到物联网边界设备。
1. 使用docker pull将你要部署的镜像拉到本地来:
docker pullmicrosoft/azureiotedge-simulated-temperature-sensor:1.0-preview
2. 使用docker标记这个镜像:
docker tag microsoft/azureiotedge-simulated-temperature-sensor:1.0-preview stevenrepo.chinanorth.cloudapp.chinacloudapi.cn/myrepo/azureiotedge-simulated-temperature-sensor:2.0
注意:stevenrepo.chinanorth.cloudapp.chinacloudapi.cn是你的harbor服务器地址;myrepo是harbor上你的项目名称;后面是image:tag。
3. 推送标记过的镜像到私有容器注册表:
docker push stevenrepo.chinanorth.cloudapp.chinacloudapi.cn/myrepo/azureiotedge-simulated-temperature-sensor:2.0
4. 配置你的IOT Hub上的设备部署,将你的应用部署到物联网边界设备,在Azure管理界面上,进入IOT Hub的IOT Edge设备管理,点击"Set Modules":
点击"添加",添加IOT Edge module,其中name你可以自己起个模块名字,Image URI是你私有容器注册表中镜像地址,例如stevenrepo.chinanorth.cloudapp.chinacloudapi.cn/myrepo/azureiotedge-simulated-temperature-sensor:2.0,点击保存,下一步,最后submit。
大约等待1分钟左右时间,可以看到你的模块mysensor已经部署成功,并处于"running"状态,说明你的容器已经被推送到了边界设备:
5. 登录到你的边界设备,检查当前的Edge agent日志以及状态:
docker ps
查看edge agent日志,sudo docker logs edgeAgent,可以看到部署执行的命令:
查看我们部署的边界程序,可以看到他在持续不断的产生模拟数据,正常工作:
6. 通过之前blog介绍的可以使用visual studio code免费的IOT Hub插件进行监控和管理,设置连接字符串后,我们可以看到当前部署的module,以及module发送到云端的消息:
问题故障排查
Azure IOT Edge在中国处于preview阶段,难免会又一些问题,出现问题时除了仔细检查配置,提交支持case之外,也可以自己做一些troubleshooting工作,因为edge端本身就是一个docker运行环境,很多相关的命令都可以来使用:
日志查看:无论是你的容器还时edge的运行时,都可以通过docker logs来查看问题,例如:
sudo docker ps
sudo docker logs -f edgeAgent
sudo docker logs -f YOURCONTAINER
关于界面部署出现"Agent configuration format is invalid"错误
在有些情况下,在界面部署会出现长期pending的情况,检查edgeAgent的日志会发现:
解决办法:使用Azure CLI进行部署:
#设置环境为Azure中国
az cloud set -n AzureChinaCloud
#登录
az login
azure cli必须是2.0.24以上版本才可以,az –version可以获得当前版本
添加IOT的扩展
az extension add --name azure-cli-iot-ext
下载例子配置文件: https://github.com/kingliantop/azurelabs/blob/master/IOTEdge/config.json
命令行执行部署即可:
az iot hub apply-configuration --device-id myedgedevice --hub-name myiotdemo --content ./config.json
领取专属 10元无门槛券
私享最新 技术干货