0

我试图了解 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。我可以在门户中看到新标签出现了。
  • 但是,我的测试机器永远不会得到新版本的模块。Docker 仍然显示旧的 ImageID。

那么让我现有的部署策略强制更新我的设备上的模块版本的正确方法是什么?我认为基于https://docs.microsoft.com/en-us/azure/iot-edge/how-to-update-iot-edge#understand-iot-edge-tags我的模块正在使用滚动标记方案.

4

1 回答 1

2

是的,正如您发布的类似内容所述:

如果您在部署中使用滚动标签,则需要强制设备上的容器运行时拉取最新版本的映像。

因此,通过使用滚动标签,设备上不会自动发生任何事情。因为:为什么要呢?这些设备不会监视您的容器注册表的更改。

您实际可以做什么:如果您再次手动在设备上拉取相同的图像 ( docker pull <my_acr.azurecr.io>/mymodule:1.0),iotedge 将在设备上看到该图像已更改。然后它将使用新的映像版本在本地重新部署模块。

于 2019-12-12T20:12:22.967 回答