azure-iot-edge - 使用 DPS 时,为什么 IoT Edge 会在重新启动时重新创建容器?
问题描述
在不使用 DPS 的情况下使用 IoT Edge 时,我可以将状态和日志数据保留在模块中,这些模块在重新启动和服务重新启动后仍然有效。
将 IoT Edge 与 DPS(示例对称密钥)一起使用时,每次重新启动操作系统或重新启动服务时,IoT Edge 都会删除(丢失日志和状态数据)模块并重新创建它们。这使得故障排除和管理模块和业务应用程序成为一项挑战。
- 操作系统:Windows IoT 1809 (LTSC)
- IoT Edge 版本:iotedge 1.0.9.3 (ad04e23b1865211913282b918263700deafdccfa)
- IoT Edge 代理:版本 - 1.0.9.4.32971639 (12d55e582cc7ce95c8abfe11eddfbbc938ed6001)
重现步骤:
- 安装 Windows IoT 1809(虽然我不认为这是特定于操作系统的)
- 使用 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 被视为“重新配置”事件,所有模块实例都作为流程的一部分被删除。您可以在边缘守护程序中查看此日志。
推荐阅读
- nestjs - 如何设置控制器前缀的参数?
- javascript - RestAPI 无法下载从 Django API 发送到 sveltekit 客户端的文件 - 读取 PNG 图像文件的致命错误
- linux - 在 Linux 命令行中创建 FTP 用户
- c# - 是否可以在 azure bot webchat 中的文件上传按钮旁边添加一个按钮?
- kubernetes - 在第二个命名空间上安装 dapr helm chart,而已安装在同一集群中的另一个命名空间上
- javascript - 如何在 HTML iframe 文档中插入特殊字符?
- typescript - 将打字稿配置更改为不接受“任何”
- angular - Monaca / Cordova10 无法在 WKwebview 中使用 iOS 访问 Firebase
- jenkins - 如果创建作业 DSL 管道,git scriptPath 的文档在哪里?
- cypress - 赛普拉斯无法加载第二次测试中使用的不同域