使用 DPS 时,为什么 IoT Edge 在重新启动时重新创建容器?
When using DPS, why does IoT Edge recreate containers at reboot?
在没有 DPS 的情况下使用 IoT Edge 时,我可以在重启和服务重启后仍然存在的模块中保留状态和记录数据。
将 IoT Edge 与 DPS(例如对称密钥)一起使用时,每次 OS 重新启动或服务重新启动时,IoT Edge 都会删除(丢失日志和状态数据)模块并重新创建它们。这使得模块和业务应用程序的故障排除和管理成为一项挑战。
- OS: Windows 物联网 1809 (LTSC)
- IoT Edge 版本:iotedge 1.0.9.3 (ad04e23b1865211913282b918263700deafdccfa)
- IoT 边缘代理:版本 - 1.0.9.4.32971639 (12d55e582cc7ce95c8abfe11eddfbbc938ed6001)
重现步骤:
- 安装 Windows IoT 1809(虽然我不认为这是 OS 具体的)
- 使用 SAS 令牌(而非 DPS)安装 IoT Edge (https://docs.microsoft.com/en-us/azure/iot-edge/how-to-install-iot-edge-windows)
- 在 Azure 门户中,添加一个简单的模块(我使用:docker.io/ksaye/mqttdemo:0.0.2-windows-amd64,但任何都可以)
- 模块部署到边缘时,运行(进入容器):docker -H npipe:////./pipe/iotedge_moby_engine exec -i -t %yourmodulename% cmd
- 在模块容器内,运行:echo hello > test.txt
- 在模块容器内,运行:键入 test.txt 以查看您的内容
- 键入 exit 退出模块容器,然后重新启动系统
- 设备启动后,再次运行(进入容器):docker -H npipe:////./pipe/iotedge_moby_engine exec - i -t %yourmodulename% cmd
- 再次在模块容器 运行 中:键入 test.txt 以查看您的内容已在重启后保留
(现在可以看到不良行为)
- 停止 iotedge 服务 运行: net stop iotedge
- 更改 c:\programdata\iotedge\config.yaml 以使用带对称密钥的 DPS
- 重新运行步骤4 - 9,但是这次步骤9会失败,因为文件不会存在
是否有可以更改此行为的设置或配置对象?部署 SQL Edge 或 MySQL 时,我无法在每次重新启动设备时都删除容器。
这是设计使然,第 11 步被视为“重新配置”事件,所有模块实例都作为流程的一部分被删除。你可以在边缘守护进程中看到这个日志。
这是一个问题/错误,请参阅:https://github.com/Azure/iotedge/issues/3283
在没有 DPS 的情况下使用 IoT Edge 时,我可以在重启和服务重启后仍然存在的模块中保留状态和记录数据。
将 IoT Edge 与 DPS(例如对称密钥)一起使用时,每次 OS 重新启动或服务重新启动时,IoT Edge 都会删除(丢失日志和状态数据)模块并重新创建它们。这使得模块和业务应用程序的故障排除和管理成为一项挑战。
- OS: Windows 物联网 1809 (LTSC)
- IoT Edge 版本:iotedge 1.0.9.3 (ad04e23b1865211913282b918263700deafdccfa)
- IoT 边缘代理:版本 - 1.0.9.4.32971639 (12d55e582cc7ce95c8abfe11eddfbbc938ed6001)
重现步骤:
- 安装 Windows IoT 1809(虽然我不认为这是 OS 具体的)
- 使用 SAS 令牌(而非 DPS)安装 IoT Edge (https://docs.microsoft.com/en-us/azure/iot-edge/how-to-install-iot-edge-windows)
- 在 Azure 门户中,添加一个简单的模块(我使用:docker.io/ksaye/mqttdemo:0.0.2-windows-amd64,但任何都可以)
- 模块部署到边缘时,运行(进入容器):docker -H npipe:////./pipe/iotedge_moby_engine exec -i -t %yourmodulename% cmd
- 在模块容器内,运行:echo hello > test.txt
- 在模块容器内,运行:键入 test.txt 以查看您的内容
- 键入 exit 退出模块容器,然后重新启动系统
- 设备启动后,再次运行(进入容器):docker -H npipe:////./pipe/iotedge_moby_engine exec - i -t %yourmodulename% cmd
- 再次在模块容器 运行 中:键入 test.txt 以查看您的内容已在重启后保留
(现在可以看到不良行为)
- 停止 iotedge 服务 运行: net stop iotedge
- 更改 c:\programdata\iotedge\config.yaml 以使用带对称密钥的 DPS
- 重新运行步骤4 - 9,但是这次步骤9会失败,因为文件不会存在
是否有可以更改此行为的设置或配置对象?部署 SQL Edge 或 MySQL 时,我无法在每次重新启动设备时都删除容器。
这是设计使然,第 11 步被视为“重新配置”事件,所有模块实例都作为流程的一部分被删除。你可以在边缘守护进程中看到这个日志。
这是一个问题/错误,请参阅:https://github.com/Azure/iotedge/issues/3283