我试图了解 IoT Edge 设备如何在给定特定设备部署策略的情况下部署模块。这是我的测试用例:
- 在我的开发计算机上,我创建了一个自定义 IoT Edge 模块(本质上是 VS Code 中的默认 CModule 示例)。我手动将该模块推送到我的 Azure 容器注册表,并手动将其标记为 1.0.1 和 1.0
- 我创建了一个部署策略,其中包括我的自定义模块,如下所示
"modules": {
"MyModule": {
"version": "1.0",
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "<my_acr.azurecr.io>/mymodule:1.0",
"createOptions": "{}"
}
}
}
- 我创建了一个使用上述自定义部署策略进行部署的 IoT Edge 设备(我使用标签来执行此操作)。我可以在我的测试机器上看到/mymodule:1.0 docker 镜像变得可用。测试机上的docker ImageID与ImageID匹配
- 在我的开发机器上,我稍微修改了模块并重建它。我用 1.0.2 和 1.0 标记新模块 docker 镜像,并将新标记推送到 ACR。我可以在门户中看到新标 checkout 现。
- 但是,我的测试机从未获得该模块的新版本。 Docker 仍然显示旧的 ImageID。
那么让我的现有部署策略强制更新我的设备上的模块版本的正确方法是什么?我认为基于https://learn.microsoft.com/en-us/azure/iot-edge/how-to-update-iot-edge#understand-iot-edge-tags我的模块使用滚动标记方案。
最佳答案
是的,正如您发布的类似内容中所述:
If you use rolling tags in your deployment then you need to force the container runtime on your device to pull the latest version of the image.
因此,通过使用滚动标签,设备上不会自动发生任何事情。因为:为什么要这样做?这些设备不会监视您的容器注册表的更改。
您实际可以做什么:如果您再次在设备上手动拉取相同的镜像 ( docker pull <my_acr.azurecr.io>/mymodule:1.0
),iotedge 将在设备上看到该镜像已更改。然后它将使用新的镜像版本在本地重新部署模块。
关于用于滚动标记的 Azure IoT Edge 部署策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59311214/